1edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project/* 2edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project * Copyright (C) 2006 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#ifndef ANDROID_BUFFEREDTEXTOUTPUT_H 18edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#define ANDROID_BUFFEREDTEXTOUTPUT_H 19edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 20002e1e58dfe19dd3e49a59c6827cbf51573941a2Mathias Agopian#include <binder/TextOutput.h> 21edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#include <utils/threads.h> 22f5f8fa0bbdc4ba8a15a386b66da30e4c1d89ec9dColin Cross#include <sys/uio.h> 23edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 24edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 25edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectnamespace android { 26edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 27edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectclass BufferedTextOutput : public TextOutput 28edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project{ 29edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectpublic: 30edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project //** Flags for constructor */ 31edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project enum { 32edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project MULTITHREADED = 0x0001 33edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project }; 34edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 35edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project BufferedTextOutput(uint32_t flags = 0); 36edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual ~BufferedTextOutput(); 37edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 38edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual status_t print(const char* txt, size_t len); 39edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void moveIndent(int delta); 40edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 41edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void pushBundle(); 42edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual void popBundle(); 43edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 44edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprotected: 45edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project virtual status_t writeLines(const struct iovec& vec, size_t N) = 0; 46edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 47edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Projectprivate: 48edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project struct BufferState; 49edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project struct ThreadState; 50edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 51edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project static ThreadState*getThreadState(); 52edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project static void threadDestructor(void *st); 53edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 54edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project BufferState*getBuffer() const; 55edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 56edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project uint32_t mFlags; 57edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const int32_t mSeq; 58edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project const int32_t mIndex; 59edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 60edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project Mutex mLock; 61edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project BufferState* mGlobalState; 62edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; 63edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 64edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project// --------------------------------------------------------------------------- 65edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project}; // namespace android 66edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project 67edbf3b6af777b721cd2a1ef461947e51e88241e1The Android Open Source Project#endif // ANDROID_BUFFEREDTEXTOUTPUT_H 68