19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/*
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2005 The Android Open Source Project
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License.
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project *
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License.
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/TextOutput.h>
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <utils/Debug.h>
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdio.h>
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <stdlib.h>
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <string.h>
249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
25aaf834a284a025cedd8ec1cf01d09e1790c1dcf8Mathias Agopiannamespace android {
26aaf834a284a025cedd8ec1cf01d09e1790c1dcf8Mathias Agopian
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// ---------------------------------------------------------------------------
289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
29aaf834a284a025cedd8ec1cf01d09e1790c1dcf8Mathias AgopianTextOutput::TextOutput() {
30aaf834a284a025cedd8ec1cf01d09e1790c1dcf8Mathias Agopian}
31aaf834a284a025cedd8ec1cf01d09e1790c1dcf8Mathias Agopian
32aaf834a284a025cedd8ec1cf01d09e1790c1dcf8Mathias AgopianTextOutput::~TextOutput() {
33aaf834a284a025cedd8ec1cf01d09e1790c1dcf8Mathias Agopian}
34aaf834a284a025cedd8ec1cf01d09e1790c1dcf8Mathias Agopian
35aaf834a284a025cedd8ec1cf01d09e1790c1dcf8Mathias Agopian// ---------------------------------------------------------------------------
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, bool val)
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (val) to.print("true", 4);
409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    else to.print("false", 5);
419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return to;
429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, int val)
459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    char buf[16];
479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    sprintf(buf, "%d", val);
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    to.print(buf, strlen(buf));
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return to;
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, long val)
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    char buf[16];
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    sprintf(buf, "%ld", val);
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    to.print(buf, strlen(buf));
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return to;
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, unsigned int val)
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    char buf[16];
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    sprintf(buf, "%u", val);
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    to.print(buf, strlen(buf));
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return to;
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, unsigned long val)
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    char buf[16];
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    sprintf(buf, "%lu", val);
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    to.print(buf, strlen(buf));
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return to;
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, long long val)
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    char buf[32];
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    sprintf(buf, "%Ld", val);
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    to.print(buf, strlen(buf));
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return to;
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, unsigned long long val)
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    char buf[32];
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    sprintf(buf, "%Lu", val);
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    to.print(buf, strlen(buf));
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return to;
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic TextOutput& print_float(TextOutput& to, double value)
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    char buf[64];
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    sprintf(buf, "%g", value);
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if( !strchr(buf, '.') && !strchr(buf, 'e') &&
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        !strchr(buf, 'E') ) {
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        strncat(buf, ".0", sizeof(buf)-1);
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    }
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    to.print(buf, strlen(buf));
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return to;
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, float val)
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return print_float(to,val);
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, double val)
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return print_float(to,val);
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, const void* val)
1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    char buf[16];
1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    sprintf(buf, "%p", val);
1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    to.print(buf, strlen(buf));
1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return to;
1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectstatic void textOutputPrinter(void* cookie, const char* txt)
1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    ((TextOutput*)cookie)->print(txt, strlen(txt));
1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, const TypeCode& val)
1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    printTypeCode(val.typeCode(), textOutputPrinter, (void*)&to);
1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return to;
1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectHexDump::HexDump(const void *buf, size_t size, size_t bytesPerLine)
1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    : mBuffer(buf)
1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    , mSize(size)
1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    , mBytesPerLine(bytesPerLine)
1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    , mSingleLineCutoff(16)
1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    , mAlignment(4)
1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    , mCArrayStyle(false)
1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    if (bytesPerLine >= 16) mAlignment = 4;
1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    else if (bytesPerLine >= 8) mAlignment = 2;
1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    else mAlignment = 1;
1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source ProjectTextOutput& operator<<(TextOutput& to, const HexDump& val)
1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project{
1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    printHexData(0, val.buffer(), val.size(), val.bytesPerLine(),
1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        val.singleLineCutoff(), val.alignment(), val.carrayStyle(),
1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project        textOutputPrinter, (void*)&to);
1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project    return to;
1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}; // namespace android
155