| /* | |
| * 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 |