1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/*
2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2005 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
17002e1e58dfe19dd3e49a59c6827cbf51573941a2Mathias Agopian#include <binder/TextOutput.h>
18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
19002e1e58dfe19dd3e49a59c6827cbf51573941a2Mathias Agopian#include <binder/Debug.h>
20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
218cb8925921523e701c59f5b1ac1c37825528fec7Jeff Sharkey#include <utils/String8.h>
228cb8925921523e701c59f5b1ac1c37825528fec7Jeff Sharkey#include <utils/String16.h>
238cb8925921523e701c59f5b1ac1c37825528fec7Jeff Sharkey
24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdio.h>
25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdlib.h>
26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <string.h>
27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
2883c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopiannamespace android {
2983c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian
30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
3283c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias AgopianTextOutput::TextOutput() {
3383c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian}
3483c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian
3583c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias AgopianTextOutput::~TextOutput() {
3683c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian}
3783c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian
3883c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian// ---------------------------------------------------------------------------
39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, bool val)
41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    if (val) to.print("true", 4);
43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    else to.print("false", 5);
44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, int val)
48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    char buf[16];
50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sprintf(buf, "%d", val);
51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    to.print(buf, strlen(buf));
52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, long val)
56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    char buf[16];
58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sprintf(buf, "%ld", val);
59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    to.print(buf, strlen(buf));
60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, unsigned int val)
64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    char buf[16];
66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sprintf(buf, "%u", val);
67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    to.print(buf, strlen(buf));
68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, unsigned long val)
72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    char buf[16];
74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sprintf(buf, "%lu", val);
75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    to.print(buf, strlen(buf));
76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, long long val)
80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    char buf[32];
82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sprintf(buf, "%Ld", val);
83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    to.print(buf, strlen(buf));
84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, unsigned long long val)
88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    char buf[32];
90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sprintf(buf, "%Lu", val);
91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    to.print(buf, strlen(buf));
92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic TextOutput& print_float(TextOutput& to, double value)
96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    char buf[64];
98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sprintf(buf, "%g", value);
99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    if( !strchr(buf, '.') && !strchr(buf, 'e') &&
100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        !strchr(buf, 'E') ) {
101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        strncat(buf, ".0", sizeof(buf)-1);
102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    }
103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    to.print(buf, strlen(buf));
104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, float val)
108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return print_float(to,val);
110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, double val)
113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
114edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return print_float(to,val);
115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
116edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
117edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, const void* val)
118edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
119fae12d4fb45e2c4e8943811d784db04599c7e202Michael Lentine    char buf[32];
120fae12d4fb45e2c4e8943811d784db04599c7e202Michael Lentine    snprintf(buf, sizeof(buf), "%p", val);
121edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    to.print(buf, strlen(buf));
122edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
123edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
124edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
1258cb8925921523e701c59f5b1ac1c37825528fec7Jeff SharkeyTextOutput& operator<<(TextOutput& to, const String8& val)
1268cb8925921523e701c59f5b1ac1c37825528fec7Jeff Sharkey{
1278cb8925921523e701c59f5b1ac1c37825528fec7Jeff Sharkey    to << val.string();
1288cb8925921523e701c59f5b1ac1c37825528fec7Jeff Sharkey    return to;
1298cb8925921523e701c59f5b1ac1c37825528fec7Jeff Sharkey}
1308cb8925921523e701c59f5b1ac1c37825528fec7Jeff Sharkey
1318cb8925921523e701c59f5b1ac1c37825528fec7Jeff SharkeyTextOutput& operator<<(TextOutput& to, const String16& val)
1328cb8925921523e701c59f5b1ac1c37825528fec7Jeff Sharkey{
1338cb8925921523e701c59f5b1ac1c37825528fec7Jeff Sharkey    to << String8(val).string();
1348cb8925921523e701c59f5b1ac1c37825528fec7Jeff Sharkey    return to;
1358cb8925921523e701c59f5b1ac1c37825528fec7Jeff Sharkey}
1368cb8925921523e701c59f5b1ac1c37825528fec7Jeff Sharkey
137edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic void textOutputPrinter(void* cookie, const char* txt)
138edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
139edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    ((TextOutput*)cookie)->print(txt, strlen(txt));
140edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
141edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
142edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, const TypeCode& val)
143edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
144edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    printTypeCode(val.typeCode(), textOutputPrinter, (void*)&to);
145edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
146edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
147edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
148edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectHexDump::HexDump(const void *buf, size_t size, size_t bytesPerLine)
149edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    : mBuffer(buf)
150edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    , mSize(size)
151edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    , mBytesPerLine(bytesPerLine)
152edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    , mSingleLineCutoff(16)
153edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    , mAlignment(4)
154edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    , mCArrayStyle(false)
155edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
156edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    if (bytesPerLine >= 16) mAlignment = 4;
157edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    else if (bytesPerLine >= 8) mAlignment = 2;
158edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    else mAlignment = 1;
159edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
160edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
161edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, const HexDump& val)
162edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
163edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    printHexData(0, val.buffer(), val.size(), val.bytesPerLine(),
164edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        val.singleLineCutoff(), val.alignment(), val.carrayStyle(),
165edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        textOutputPrinter, (void*)&to);
166edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
167edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
168edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
169edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android
170