1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/* 2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 3edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 4edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * you may not use this file except in compliance with the License. 6edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * You may obtain a copy of the License at 7edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 8edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * 10edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * See the License for the specific language governing permissions and 14edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * limitations under the License. 15edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project */ 16edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#ifndef ANDROID_TEXTOUTPUT_H 18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define ANDROID_TEXTOUTPUT_H 19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Errors.h> 21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdint.h> 23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <string.h> 24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass TextOutput 29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 3183c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian TextOutput(); 3283c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian virtual ~TextOutput(); 33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual status_t print(const char* txt, size_t len) = 0; 35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void moveIndent(int delta) = 0; 36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project class Bundle { 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project public: 39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline Bundle(TextOutput& to) : mTO(to) { to.pushBundle(); } 40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline ~Bundle() { mTO.popBundle(); } 41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project private: 42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project TextOutput& mTO; 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project }; 44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void pushBundle() = 0; 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void popBundle() = 0; 47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// Text output stream for printing to the log (via utils/Log.h). 52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectextern TextOutput& alog; 53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// Text output stream for printing to stdout. 55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectextern TextOutput& aout; 56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// Text output stream for printing to stderr. 58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectextern TextOutput& aerr; 59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttypedef TextOutput& (*TextOutputManipFunc)(TextOutput&); 61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& endl(TextOutput& to); 63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& indent(TextOutput& to); 64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& dedent(TextOutput& to); 65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, const char* str); 67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, char); // writes raw character 68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, bool); 69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, int); 70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, long); 71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, unsigned int); 72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, unsigned long); 73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, long long); 74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, unsigned long long); 75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, float); 76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, double); 77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, TextOutputManipFunc func); 78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, const void*); 79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass TypeCode 81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline TypeCode(uint32_t code); 84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline ~TypeCode(); 85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline uint32_t typeCode() const; 87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate: 89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t mCode; 90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, const TypeCode& val); 93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass HexDump 95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project HexDump(const void *buf, size_t size, size_t bytesPerLine=16); 98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline ~HexDump(); 99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline HexDump& setBytesPerLine(size_t bytesPerLine); 101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline HexDump& setSingleLineCutoff(int32_t bytes); 102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline HexDump& setAlignment(size_t alignment); 103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline HexDump& setCArrayStyle(bool enabled); 104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline const void* buffer() const; 106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline size_t size() const; 107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline size_t bytesPerLine() const; 108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline int32_t singleLineCutoff() const; 109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline size_t alignment() const; 110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project inline bool carrayStyle() const; 111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate: 113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const void* mBuffer; 114edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project size_t mSize; 115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project size_t mBytesPerLine; 116edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project int32_t mSingleLineCutoff; 117edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project size_t mAlignment; 118edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project bool mCArrayStyle; 119edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 120edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 121edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, const HexDump& val); 122edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 123edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 124edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// No user servicable parts below. 125edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 126edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline TextOutput& endl(TextOutput& to) 127edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 128edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project to.print("\n", 1); 129edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return to; 130edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 131edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 132edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline TextOutput& indent(TextOutput& to) 133edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 134edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project to.moveIndent(1); 135edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return to; 136edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 137edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 138edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline TextOutput& dedent(TextOutput& to) 139edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 140edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project to.moveIndent(-1); 141edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return to; 142edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 143edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 144edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline TextOutput& operator<<(TextOutput& to, const char* str) 145edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 146edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project to.print(str, strlen(str)); 147edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return to; 148edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 149edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 150edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline TextOutput& operator<<(TextOutput& to, char c) 151edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 152edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project to.print(&c, 1); 153edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return to; 154edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 155edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 156edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline TextOutput& operator<<(TextOutput& to, TextOutputManipFunc func) 157edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 158edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project return (*func)(to); 159edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 160edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 161edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline TypeCode::TypeCode(uint32_t code) : mCode(code) { } 162edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline TypeCode::~TypeCode() { } 163edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline uint32_t TypeCode::typeCode() const { return mCode; } 164edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 165edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline HexDump::~HexDump() { } 166edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 167edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline HexDump& HexDump::setBytesPerLine(size_t bytesPerLine) { 168edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mBytesPerLine = bytesPerLine; return *this; 169edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 170edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline HexDump& HexDump::setSingleLineCutoff(int32_t bytes) { 171edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mSingleLineCutoff = bytes; return *this; 172edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 173edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline HexDump& HexDump::setAlignment(size_t alignment) { 174edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mAlignment = alignment; return *this; 175edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 176edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline HexDump& HexDump::setCArrayStyle(bool enabled) { 177edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project mCArrayStyle = enabled; return *this; 178edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project} 179edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 180edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline const void* HexDump::buffer() const { return mBuffer; } 181edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline size_t HexDump::size() const { return mSize; } 182edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline size_t HexDump::bytesPerLine() const { return mBytesPerLine; } 183edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline int32_t HexDump::singleLineCutoff() const { return mSingleLineCutoff; } 184edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline size_t HexDump::alignment() const { return mAlignment; } 185edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline bool HexDump::carrayStyle() const { return mCArrayStyle; } 186edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 187edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 188edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 189edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 190edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_TEXTOUTPUT_H 191