media/omx-plugin/include/froyo/utils/TextOutput.h

Thu, 15 Jan 2015 15:59:08 +0100

author
Michael Schloh von Bennewitz <michael@schloh.com>
date
Thu, 15 Jan 2015 15:59:08 +0100
branch
TOR_BUG_9701
changeset 10
ac0c01689b40
permissions
-rw-r--r--

Implement a real Private Browsing Mode condition by changing the API/ABI;
This solves Tor bug #9701, complying with disk avoidance documented in
https://www.torproject.org/projects/torbrowser/design/#disk-avoidance.

     1 /*
     2  * Copyright (C) 2006 The Android Open Source Project
     3  *
     4  * Licensed under the Apache License, Version 2.0 (the "License");
     5  * you may not use this file except in compliance with the License.
     6  * You may obtain a copy of the License at
     7  *
     8  *      http://www.apache.org/licenses/LICENSE-2.0
     9  *
    10  * Unless required by applicable law or agreed to in writing, software
    11  * distributed under the License is distributed on an "AS IS" BASIS,
    12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  * See the License for the specific language governing permissions and
    14  * limitations under the License.
    15  */
    17 #ifndef ANDROID_TEXTOUTPUT_H
    18 #define ANDROID_TEXTOUTPUT_H
    20 #include <utils/Errors.h>
    22 #include <stdint.h>
    23 #include <string.h>
    25 // ---------------------------------------------------------------------------
    26 namespace android {
    28 class TextOutput
    29 {
    30 public:
    31                         TextOutput();
    32     virtual             ~TextOutput();
    34     virtual status_t    print(const char* txt, size_t len) = 0;
    35     virtual void        moveIndent(int delta) = 0;
    37     class Bundle {
    38     public:
    39         inline Bundle(TextOutput& to) : mTO(to) { to.pushBundle(); }
    40         inline ~Bundle() { mTO.popBundle(); }
    41     private:
    42         TextOutput&     mTO;
    43     };
    45     virtual void        pushBundle() = 0;
    46     virtual void        popBundle() = 0;
    47 };
    49 // ---------------------------------------------------------------------------
    51 // Text output stream for printing to the log (via utils/Log.h).
    52 extern TextOutput& alog;
    54 // Text output stream for printing to stdout.
    55 extern TextOutput& aout;
    57 // Text output stream for printing to stderr.
    58 extern TextOutput& aerr;
    60 typedef TextOutput& (*TextOutputManipFunc)(TextOutput&);
    62 TextOutput& endl(TextOutput& to);
    63 TextOutput& indent(TextOutput& to);
    64 TextOutput& dedent(TextOutput& to);
    66 TextOutput& operator<<(TextOutput& to, const char* str);
    67 TextOutput& operator<<(TextOutput& to, char);     // writes raw character
    68 TextOutput& operator<<(TextOutput& to, bool);
    69 TextOutput& operator<<(TextOutput& to, int);
    70 TextOutput& operator<<(TextOutput& to, long);
    71 TextOutput& operator<<(TextOutput& to, unsigned int);
    72 TextOutput& operator<<(TextOutput& to, unsigned long);
    73 TextOutput& operator<<(TextOutput& to, long long);
    74 TextOutput& operator<<(TextOutput& to, unsigned long long);
    75 TextOutput& operator<<(TextOutput& to, float);
    76 TextOutput& operator<<(TextOutput& to, double);
    77 TextOutput& operator<<(TextOutput& to, TextOutputManipFunc func);
    78 TextOutput& operator<<(TextOutput& to, const void*);
    80 class TypeCode 
    81 {
    82 public:
    83     inline TypeCode(uint32_t code);
    84     inline ~TypeCode();
    86     inline uint32_t typeCode() const;
    88 private:
    89     uint32_t mCode;
    90 };
    92 TextOutput& operator<<(TextOutput& to, const TypeCode& val);
    94 class HexDump
    95 {
    96 public:
    97     HexDump(const void *buf, size_t size, size_t bytesPerLine=16);
    98     inline ~HexDump();
   100     inline HexDump& setBytesPerLine(size_t bytesPerLine);
   101     inline HexDump& setSingleLineCutoff(int32_t bytes);
   102     inline HexDump& setAlignment(size_t alignment);
   103     inline HexDump& setCArrayStyle(bool enabled);
   105     inline const void* buffer() const;
   106     inline size_t size() const;
   107     inline size_t bytesPerLine() const;
   108     inline int32_t singleLineCutoff() const;
   109     inline size_t alignment() const;
   110     inline bool carrayStyle() const;
   112 private:
   113     const void* mBuffer;
   114     size_t mSize;
   115     size_t mBytesPerLine;
   116     int32_t mSingleLineCutoff;
   117     size_t mAlignment;
   118     bool mCArrayStyle;
   119 };
   121 TextOutput& operator<<(TextOutput& to, const HexDump& val);
   123 // ---------------------------------------------------------------------------
   124 // No user servicable parts below.
   126 inline TextOutput& endl(TextOutput& to)
   127 {
   128     to.print("\n", 1);
   129     return to;
   130 }
   132 inline TextOutput& indent(TextOutput& to)
   133 {
   134     to.moveIndent(1);
   135     return to;
   136 }
   138 inline TextOutput& dedent(TextOutput& to)
   139 {
   140     to.moveIndent(-1);
   141     return to;
   142 }
   144 inline TextOutput& operator<<(TextOutput& to, const char* str)
   145 {
   146     to.print(str, strlen(str));
   147     return to;
   148 }
   150 inline TextOutput& operator<<(TextOutput& to, char c)
   151 {
   152     to.print(&c, 1);
   153     return to;
   154 }
   156 inline TextOutput& operator<<(TextOutput& to, TextOutputManipFunc func)
   157 {
   158     return (*func)(to);
   159 }
   161 inline TypeCode::TypeCode(uint32_t code) : mCode(code) { }
   162 inline TypeCode::~TypeCode() { }
   163 inline uint32_t TypeCode::typeCode() const { return mCode; }
   165 inline HexDump::~HexDump() { }
   167 inline HexDump& HexDump::setBytesPerLine(size_t bytesPerLine) {
   168     mBytesPerLine = bytesPerLine; return *this;
   169 }
   170 inline HexDump& HexDump::setSingleLineCutoff(int32_t bytes) {
   171     mSingleLineCutoff = bytes; return *this;
   172 }
   173 inline HexDump& HexDump::setAlignment(size_t alignment) {
   174     mAlignment = alignment; return *this;
   175 }
   176 inline HexDump& HexDump::setCArrayStyle(bool enabled) {
   177     mCArrayStyle = enabled; return *this;
   178 }
   180 inline const void* HexDump::buffer() const { return mBuffer; }
   181 inline size_t HexDump::size() const { return mSize; }
   182 inline size_t HexDump::bytesPerLine() const { return mBytesPerLine; }
   183 inline int32_t HexDump::singleLineCutoff() const { return mSingleLineCutoff; }
   184 inline size_t HexDump::alignment() const { return mAlignment; }
   185 inline bool HexDump::carrayStyle() const { return mCArrayStyle; }
   187 // ---------------------------------------------------------------------------
   188 }; // namespace android
   190 #endif // ANDROID_TEXTOUTPUT_H

mercurial