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
17edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/TextOutput.h>
18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/Debug.h>
20edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdio.h>
22edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <stdlib.h>
23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <string.h>
24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
2583c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopiannamespace android {
2683c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian
27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// ---------------------------------------------------------------------------
28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
2983c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias AgopianTextOutput::TextOutput() {
3083c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian}
3183c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian
3283c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias AgopianTextOutput::~TextOutput() {
3383c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian}
3483c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian
3583c0446f27b9542d6c2e724817b2b2d8d1f55085Mathias Agopian// ---------------------------------------------------------------------------
36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, bool val)
38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    if (val) to.print("true", 4);
40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    else to.print("false", 5);
41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, int val)
45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    char buf[16];
47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sprintf(buf, "%d", val);
48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    to.print(buf, strlen(buf));
49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, long val)
53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    char buf[16];
55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sprintf(buf, "%ld", val);
56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    to.print(buf, strlen(buf));
57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, unsigned int val)
61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    char buf[16];
63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sprintf(buf, "%u", val);
64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    to.print(buf, strlen(buf));
65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
68edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, unsigned long val)
69edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
70edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    char buf[16];
71edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sprintf(buf, "%lu", val);
72edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    to.print(buf, strlen(buf));
73edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
74edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
75edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
76edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, long long val)
77edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
78edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    char buf[32];
79edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sprintf(buf, "%Ld", val);
80edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    to.print(buf, strlen(buf));
81edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
82edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
83edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
84edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, unsigned long long val)
85edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
86edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    char buf[32];
87edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sprintf(buf, "%Lu", val);
88edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    to.print(buf, strlen(buf));
89edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
90edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
91edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
92edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic TextOutput& print_float(TextOutput& to, double value)
93edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
94edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    char buf[64];
95edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sprintf(buf, "%g", value);
96edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    if( !strchr(buf, '.') && !strchr(buf, 'e') &&
97edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        !strchr(buf, 'E') ) {
98edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        strncat(buf, ".0", sizeof(buf)-1);
99edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    }
100edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    to.print(buf, strlen(buf));
101edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
102edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
103edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
104edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, float val)
105edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
106edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return print_float(to,val);
107edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
108edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
109edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, double val)
110edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
111edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return print_float(to,val);
112edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
113edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
114edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, const void* val)
115edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
116edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    char buf[16];
117edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    sprintf(buf, "%p", val);
118edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    to.print(buf, strlen(buf));
119edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
120edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
121edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
122edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectstatic void textOutputPrinter(void* cookie, const char* txt)
123edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
124edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    ((TextOutput*)cookie)->print(txt, strlen(txt));
125edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
126edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
127edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, const TypeCode& val)
128edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
129edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    printTypeCode(val.typeCode(), textOutputPrinter, (void*)&to);
130edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
131edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
132edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
133edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectHexDump::HexDump(const void *buf, size_t size, size_t bytesPerLine)
134edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    : mBuffer(buf)
135edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    , mSize(size)
136edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    , mBytesPerLine(bytesPerLine)
137edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    , mSingleLineCutoff(16)
138edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    , mAlignment(4)
139edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    , mCArrayStyle(false)
140edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
141edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    if (bytesPerLine >= 16) mAlignment = 4;
142edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    else if (bytesPerLine >= 8) mAlignment = 2;
143edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    else mAlignment = 1;
144edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
145edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
146edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, const HexDump& val)
147edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{
148edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    printHexData(0, val.buffer(), val.size(), val.bytesPerLine(),
149edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        val.singleLineCutoff(), val.alignment(), val.carrayStyle(),
150edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project        textOutputPrinter, (void*)&to);
151edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project    return to;
152edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}
153edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project
154edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android
155