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