You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
			
				
					196 lines
				
				5.4 KiB
			
		
		
			
		
	
	
					196 lines
				
				5.4 KiB
			| 
								 
											6 years ago
										 
									 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * Copyright (C) 2006 The Android Open Source Project
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Licensed under the Apache License, Version 2.0 (the "License");
							 | 
						||
| 
								 | 
							
								 * you may not use this file except in compliance with the License.
							 | 
						||
| 
								 | 
							
								 * You may obtain a copy of the License at
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *      http://www.apache.org/licenses/LICENSE-2.0
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Unless required by applicable law or agreed to in writing, software
							 | 
						||
| 
								 | 
							
								 * distributed under the License is distributed on an "AS IS" BASIS,
							 | 
						||
| 
								 | 
							
								 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
							 | 
						||
| 
								 | 
							
								 * See the License for the specific language governing permissions and
							 | 
						||
| 
								 | 
							
								 * limitations under the License.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#ifndef ANDROID_TEXTOUTPUT_H
							 | 
						||
| 
								 | 
							
								#define ANDROID_TEXTOUTPUT_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <utils/Errors.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include <stdint.h>
							 | 
						||
| 
								 | 
							
								#include <string.h>
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// ---------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								namespace android {
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class String8;
							 | 
						||
| 
								 | 
							
								class String16;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class TextOutput
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								                        TextOutput();
							 | 
						||
| 
								 | 
							
								    virtual             ~TextOutput();
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    virtual status_t    print(const char* txt, size_t len) = 0;
							 | 
						||
| 
								 | 
							
								    virtual void        moveIndent(int delta) = 0;
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    class Bundle {
							 | 
						||
| 
								 | 
							
								    public:
							 | 
						||
| 
								 | 
							
								        inline Bundle(TextOutput& to) : mTO(to) { to.pushBundle(); }
							 | 
						||
| 
								 | 
							
								        inline ~Bundle() { mTO.popBundle(); }
							 | 
						||
| 
								 | 
							
								    private:
							 | 
						||
| 
								 | 
							
								        TextOutput&     mTO;
							 | 
						||
| 
								 | 
							
								    };
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    virtual void        pushBundle() = 0;
							 | 
						||
| 
								 | 
							
								    virtual void        popBundle() = 0;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// ---------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Text output stream for printing to the log (via utils/Log.h).
							 | 
						||
| 
								 | 
							
								extern TextOutput& alog;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Text output stream for printing to stdout.
							 | 
						||
| 
								 | 
							
								extern TextOutput& aout;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Text output stream for printing to stderr.
							 | 
						||
| 
								 | 
							
								extern TextOutput& aerr;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								typedef TextOutput& (*TextOutputManipFunc)(TextOutput&);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								TextOutput& endl(TextOutput& to);
							 | 
						||
| 
								 | 
							
								TextOutput& indent(TextOutput& to);
							 | 
						||
| 
								 | 
							
								TextOutput& dedent(TextOutput& to);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								TextOutput& operator<<(TextOutput& to, const char* str);
							 | 
						||
| 
								 | 
							
								TextOutput& operator<<(TextOutput& to, char);     // writes raw character
							 | 
						||
| 
								 | 
							
								TextOutput& operator<<(TextOutput& to, bool);
							 | 
						||
| 
								 | 
							
								TextOutput& operator<<(TextOutput& to, int);
							 | 
						||
| 
								 | 
							
								TextOutput& operator<<(TextOutput& to, long);
							 | 
						||
| 
								 | 
							
								TextOutput& operator<<(TextOutput& to, unsigned int);
							 | 
						||
| 
								 | 
							
								TextOutput& operator<<(TextOutput& to, unsigned long);
							 | 
						||
| 
								 | 
							
								TextOutput& operator<<(TextOutput& to, long long);
							 | 
						||
| 
								 | 
							
								TextOutput& operator<<(TextOutput& to, unsigned long long);
							 | 
						||
| 
								 | 
							
								TextOutput& operator<<(TextOutput& to, float);
							 | 
						||
| 
								 | 
							
								TextOutput& operator<<(TextOutput& to, double);
							 | 
						||
| 
								 | 
							
								TextOutput& operator<<(TextOutput& to, TextOutputManipFunc func);
							 | 
						||
| 
								 | 
							
								TextOutput& operator<<(TextOutput& to, const void*);
							 | 
						||
| 
								 | 
							
								TextOutput& operator<<(TextOutput& to, const String8& val);
							 | 
						||
| 
								 | 
							
								TextOutput& operator<<(TextOutput& to, const String16& val);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class TypeCode 
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								    inline TypeCode(uint32_t code);
							 | 
						||
| 
								 | 
							
								    inline ~TypeCode();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								    inline uint32_t typeCode() const;
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								    uint32_t mCode;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								TextOutput& operator<<(TextOutput& to, const TypeCode& val);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								class HexDump
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								public:
							 | 
						||
| 
								 | 
							
								    HexDump(const void *buf, size_t size, size_t bytesPerLine=16);
							 | 
						||
| 
								 | 
							
								    inline ~HexDump();
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    inline HexDump& setBytesPerLine(size_t bytesPerLine);
							 | 
						||
| 
								 | 
							
								    inline HexDump& setSingleLineCutoff(int32_t bytes);
							 | 
						||
| 
								 | 
							
								    inline HexDump& setAlignment(size_t alignment);
							 | 
						||
| 
								 | 
							
								    inline HexDump& setCArrayStyle(bool enabled);
							 | 
						||
| 
								 | 
							
								    
							 | 
						||
| 
								 | 
							
								    inline const void* buffer() const;
							 | 
						||
| 
								 | 
							
								    inline size_t size() const;
							 | 
						||
| 
								 | 
							
								    inline size_t bytesPerLine() const;
							 | 
						||
| 
								 | 
							
								    inline int32_t singleLineCutoff() const;
							 | 
						||
| 
								 | 
							
								    inline size_t alignment() const;
							 | 
						||
| 
								 | 
							
								    inline bool carrayStyle() const;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								private:
							 | 
						||
| 
								 | 
							
								    const void* mBuffer;
							 | 
						||
| 
								 | 
							
								    size_t mSize;
							 | 
						||
| 
								 | 
							
								    size_t mBytesPerLine;
							 | 
						||
| 
								 | 
							
								    int32_t mSingleLineCutoff;
							 | 
						||
| 
								 | 
							
								    size_t mAlignment;
							 | 
						||
| 
								 | 
							
								    bool mCArrayStyle;
							 | 
						||
| 
								 | 
							
								};
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								TextOutput& operator<<(TextOutput& to, const HexDump& val);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// ---------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								// No user servicable parts below.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline TextOutput& endl(TextOutput& to)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    to.print("\n", 1);
							 | 
						||
| 
								 | 
							
								    return to;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline TextOutput& indent(TextOutput& to)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    to.moveIndent(1);
							 | 
						||
| 
								 | 
							
								    return to;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline TextOutput& dedent(TextOutput& to)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    to.moveIndent(-1);
							 | 
						||
| 
								 | 
							
								    return to;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline TextOutput& operator<<(TextOutput& to, const char* str)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    to.print(str, strlen(str));
							 | 
						||
| 
								 | 
							
								    return to;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline TextOutput& operator<<(TextOutput& to, char c)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    to.print(&c, 1);
							 | 
						||
| 
								 | 
							
								    return to;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline TextOutput& operator<<(TextOutput& to, TextOutputManipFunc func)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
								    return (*func)(to);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline TypeCode::TypeCode(uint32_t code) : mCode(code) { }
							 | 
						||
| 
								 | 
							
								inline TypeCode::~TypeCode() { }
							 | 
						||
| 
								 | 
							
								inline uint32_t TypeCode::typeCode() const { return mCode; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline HexDump::~HexDump() { }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline HexDump& HexDump::setBytesPerLine(size_t bytesPerLine) {
							 | 
						||
| 
								 | 
							
								    mBytesPerLine = bytesPerLine; return *this;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								inline HexDump& HexDump::setSingleLineCutoff(int32_t bytes) {
							 | 
						||
| 
								 | 
							
								    mSingleLineCutoff = bytes; return *this;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								inline HexDump& HexDump::setAlignment(size_t alignment) {
							 | 
						||
| 
								 | 
							
								    mAlignment = alignment; return *this;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								inline HexDump& HexDump::setCArrayStyle(bool enabled) {
							 | 
						||
| 
								 | 
							
								    mCArrayStyle = enabled; return *this;
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								inline const void* HexDump::buffer() const { return mBuffer; }
							 | 
						||
| 
								 | 
							
								inline size_t HexDump::size() const { return mSize; }
							 | 
						||
| 
								 | 
							
								inline size_t HexDump::bytesPerLine() const { return mBytesPerLine; }
							 | 
						||
| 
								 | 
							
								inline int32_t HexDump::singleLineCutoff() const { return mSingleLineCutoff; }
							 | 
						||
| 
								 | 
							
								inline size_t HexDump::alignment() const { return mAlignment; }
							 | 
						||
| 
								 | 
							
								inline bool HexDump::carrayStyle() const { return mCArrayStyle; }
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// ---------------------------------------------------------------------------
							 | 
						||
| 
								 | 
							
								}; // namespace android
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif // ANDROID_TEXTOUTPUT_H
							 |