TextOutput.h revision 83c0446f27b9542d6c2e724817b2b2d8d1f55085
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