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