| /* | 
 |  * Copyright (C) 2013 The Android Open Source Project | 
 |  * | 
 |  * Licensed under the Apache License, Version 2.0 (the "License"); | 
 |  * you may not use this file except in compliance with the License. | 
 |  * You may obtain a copy of the License at | 
 |  * | 
 |  *      http://www.apache.org/licenses/LICENSE-2.0 | 
 |  * | 
 |  * Unless required by applicable law or agreed to in writing, software | 
 |  * distributed under the License is distributed on an "AS IS" BASIS, | 
 |  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 
 |  * See the License for the specific language governing permissions and | 
 |  * limitations under the License. | 
 |  */ | 
 |  | 
 | #ifndef ANDROID_PRINTER_H | 
 | #define ANDROID_PRINTER_H | 
 |  | 
 | #include <android/log.h> | 
 |  | 
 | namespace android { | 
 |  | 
 | // Interface for printing to an arbitrary data stream | 
 | class Printer { | 
 | public: | 
 |     // Print a new line specified by 'string'. \n is appended automatically. | 
 |     // -- Assumes that the string has no new line in it. | 
 |     virtual void printLine(const char* string = "") = 0; | 
 |  | 
 |     // Print a new line specified by the format string. \n is appended automatically. | 
 |     // -- Assumes that the resulting string has no new line in it. | 
 |     virtual void printFormatLine(const char* format, ...) __attribute__((format (printf, 2, 3))); | 
 |  | 
 | protected: | 
 |     Printer(); | 
 |     virtual ~Printer(); | 
 | }; // class Printer | 
 |  | 
 | // Print to logcat | 
 | class LogPrinter : public Printer { | 
 | public: | 
 |     // Create a printer using the specified logcat and log priority | 
 |     // - Unless ignoreBlankLines is false, print blank lines to logcat | 
 |     // (Note that the default ALOG behavior is to ignore blank lines) | 
 |     LogPrinter(const char* logtag, | 
 |                android_LogPriority priority = ANDROID_LOG_DEBUG, | 
 |                const char* prefix = 0, | 
 |                bool ignoreBlankLines = false); | 
 |  | 
 |     // Print the specified line to logcat. No \n at the end is necessary. | 
 |     virtual void printLine(const char* string); | 
 |  | 
 | private: | 
 |     void printRaw(const char* string); | 
 |  | 
 |     const char* mLogTag; | 
 |     android_LogPriority mPriority; | 
 |     const char* mPrefix; | 
 |     bool mIgnoreBlankLines; | 
 | }; // class LogPrinter | 
 |  | 
 | // Print to a file descriptor | 
 | class FdPrinter : public Printer { | 
 | public: | 
 |     // Create a printer using the specified file descriptor. | 
 |     // - Each line will be prefixed with 'indent' number of blank spaces. | 
 |     // - In addition, each line will be prefixed with the 'prefix' string. | 
 |     FdPrinter(int fd, unsigned int indent = 0, const char* prefix = 0); | 
 |  | 
 |     // Print the specified line to the file descriptor. \n is appended automatically. | 
 |     virtual void printLine(const char* string); | 
 |  | 
 | private: | 
 |     enum { | 
 |         MAX_FORMAT_STRING = 20, | 
 |     }; | 
 |  | 
 |     int mFd; | 
 |     unsigned int mIndent; | 
 |     const char* mPrefix; | 
 |     char mFormatString[MAX_FORMAT_STRING]; | 
 | }; // class FdPrinter | 
 |  | 
 | class String8; | 
 |  | 
 | // Print to a String8 | 
 | class String8Printer : public Printer { | 
 | public: | 
 |     // Create a printer using the specified String8 as the target. | 
 |     // - In addition, each line will be prefixed with the 'prefix' string. | 
 |     // - target's memory lifetime must be a superset of this String8Printer. | 
 |     String8Printer(String8* target, const char* prefix = 0); | 
 |  | 
 |     // Append the specified line to the String8. \n is appended automatically. | 
 |     virtual void printLine(const char* string); | 
 |  | 
 | private: | 
 |     String8* mTarget; | 
 |     const char* mPrefix; | 
 | }; // class String8Printer | 
 |  | 
 | // Print to an existing Printer by adding a prefix to each line | 
 | class PrefixPrinter : public Printer { | 
 | public: | 
 |     // Create a printer using the specified printer as the target. | 
 |     PrefixPrinter(Printer& printer, const char* prefix); | 
 |  | 
 |     // Print the line (prefixed with prefix) using the printer. | 
 |     virtual void printLine(const char* string); | 
 |  | 
 | private: | 
 |     Printer& mPrinter; | 
 |     const char* mPrefix; | 
 | }; | 
 |  | 
 | }; // namespace android | 
 |  | 
 | #endif // ANDROID_PRINTER_H |