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
288cb8925921523e701c59f5b1ac1c37825528fec7Jeff Sharkeyclass String8;
298cb8925921523e701c59f5b1ac1c37825528fec7Jeff Sharkeyclass String16;
308cb8925921523e701c59f5b1ac1c37825528fec7Jeff Sharkey
31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass TextOutput
32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
3483c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian                        TextOutput();
3583c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian    virtual             ~TextOutput();
36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual status_t    print(const char* txt, size_t len) = 0;
38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual void        moveIndent(int delta) = 0;
39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    class Bundle {
41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    public:
42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        inline Bundle(TextOutput& to) : mTO(to) { to.pushBundle(); }
43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        inline ~Bundle() { mTO.popBundle(); }
44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    private:
45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        TextOutput&     mTO;
46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    };
47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual void        pushBundle() = 0;
49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    virtual void        popBundle() = 0;
50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// Text output stream for printing to the log (via utils/Log.h).
55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectextern TextOutput& alog;
56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// Text output stream for printing to stdout.
58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectextern TextOutput& aout;
59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// Text output stream for printing to stderr.
61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectextern TextOutput& aerr;
62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projecttypedef TextOutput& (*TextOutputManipFunc)(TextOutput&);
64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& endl(TextOutput& to);
66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& indent(TextOutput& to);
67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& dedent(TextOutput& to);
68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, const char* str);
70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, char);     // writes raw character
71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, bool);
72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, int);
73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, long);
74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, unsigned int);
75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, unsigned long);
76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, long long);
77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, unsigned long long);
78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, float);
79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, double);
80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, TextOutputManipFunc func);
81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, const void*);
828cb8925921523e701c59f5b1ac1c37825528fec7Jeff SharkeyTextOutput& operator<<(TextOutput& to, const String8& val);
838cb8925921523e701c59f5b1ac1c37825528fec7Jeff SharkeyTextOutput& operator<<(TextOutput& to, const String16& val);
84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass TypeCode
86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline TypeCode(uint32_t code);
89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline ~TypeCode();
90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline uint32_t typeCode() const;
92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate:
94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    uint32_t mCode;
95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, const TypeCode& val);
98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass HexDump
100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic:
102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    HexDump(const void *buf, size_t size, size_t bytesPerLine=16);
103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline ~HexDump();
104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline HexDump& setBytesPerLine(size_t bytesPerLine);
106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline HexDump& setSingleLineCutoff(int32_t bytes);
107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline HexDump& setAlignment(size_t alignment);
108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline HexDump& setCArrayStyle(bool enabled);
109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline const void* buffer() const;
111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline size_t size() const;
112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline size_t bytesPerLine() const;
113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline int32_t singleLineCutoff() const;
114edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline size_t alignment() const;
115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    inline bool carrayStyle() const;
116edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
117edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate:
118edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    const void* mBuffer;
119edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    size_t mSize;
120edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    size_t mBytesPerLine;
121edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    int32_t mSingleLineCutoff;
122edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    size_t mAlignment;
123edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    bool mCArrayStyle;
124edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project};
125edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
126edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, const HexDump& val);
127edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
128edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
129edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// No user servicable parts below.
130edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
131edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline TextOutput& endl(TextOutput& to)
132edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
133edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    to.print("\n", 1);
134edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
135edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
136edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
137edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline TextOutput& indent(TextOutput& to)
138edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
139edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    to.moveIndent(1);
140edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
141edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
142edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
143edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline TextOutput& dedent(TextOutput& to)
144edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
145edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    to.moveIndent(-1);
146edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
147edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
148edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
149edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline TextOutput& operator<<(TextOutput& to, const char* str)
150edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
151edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    to.print(str, strlen(str));
152edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
153edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
154edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
155edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline TextOutput& operator<<(TextOutput& to, char c)
156edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
157edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    to.print(&c, 1);
158edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
159edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
160edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
161edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline TextOutput& operator<<(TextOutput& to, TextOutputManipFunc func)
162edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
163edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return (*func)(to);
164edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
165edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
166edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline TypeCode::TypeCode(uint32_t code) : mCode(code) { }
167edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline TypeCode::~TypeCode() { }
168edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline uint32_t TypeCode::typeCode() const { return mCode; }
169edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
170edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline HexDump::~HexDump() { }
171edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
172edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline HexDump& HexDump::setBytesPerLine(size_t bytesPerLine) {
173edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    mBytesPerLine = bytesPerLine; return *this;
174edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
175edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline HexDump& HexDump::setSingleLineCutoff(int32_t bytes) {
176edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    mSingleLineCutoff = bytes; return *this;
177edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
178edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline HexDump& HexDump::setAlignment(size_t alignment) {
179edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    mAlignment = alignment; return *this;
180edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
181edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline HexDump& HexDump::setCArrayStyle(bool enabled) {
182edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    mCArrayStyle = enabled; return *this;
183edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
184edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
185edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline const void* HexDump::buffer() const { return mBuffer; }
186edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline size_t HexDump::size() const { return mSize; }
187edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline size_t HexDump::bytesPerLine() const { return mBytesPerLine; }
188edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline int32_t HexDump::singleLineCutoff() const { return mSingleLineCutoff; }
189edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline size_t HexDump::alignment() const { return mAlignment; }
190edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectinline bool HexDump::carrayStyle() const { return mCArrayStyle; }
191edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
192edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
193edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android
194edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
195edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_TEXTOUTPUT_H
196