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