1d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton//===-- StreamBuffer.h ------------------------------------------*- C++ -*-===// 2d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton// 3d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton// The LLVM Compiler Infrastructure 4d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton// 5d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton// This file is distributed under the University of Illinois Open Source 6d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton// License. See LICENSE.TXT for details. 7d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton// 8d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton//===----------------------------------------------------------------------===// 9d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton 10d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton#ifndef liblldb_StreamBuffer_h_ 11d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton#define liblldb_StreamBuffer_h_ 12d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton 13d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton#include <stdio.h> 14d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton#include <string> 15d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton#include "llvm/ADT/SmallVector.h" 16d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton#include "lldb/Core/Stream.h" 17d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton 18d52d00f4edb746ba458a3e659699160952dc925eGreg Claytonnamespace lldb_private { 19d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton 20d52d00f4edb746ba458a3e659699160952dc925eGreg Claytontemplate <unsigned N> 21d52d00f4edb746ba458a3e659699160952dc925eGreg Claytonclass StreamBuffer : public Stream 22d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton{ 23d52d00f4edb746ba458a3e659699160952dc925eGreg Claytonpublic: 24d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton StreamBuffer () : 25d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton Stream (0, 4, lldb::eByteOrderBig), 26d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton m_packet () 27d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton { 28d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton } 29d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton 30d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton 31d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton StreamBuffer (uint32_t flags, 32d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton uint32_t addr_size, 33d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton lldb::ByteOrder byte_order) : 34d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton Stream (flags, addr_size, byte_order), 35d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton m_packet () 36d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton { 37d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton } 38d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton 39d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton virtual 40d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton ~StreamBuffer () 41d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton { 42d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton } 43d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton 44d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton virtual void 45d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton Flush () 46d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton { 47d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton // Nothing to do when flushing a buffer based stream... 48d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton } 49d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton 5036da2aa6dc5ad9994b638ed09eb81c44cc05540bGreg Clayton virtual size_t 51d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton Write (const void *s, size_t length) 52d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton { 53d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton if (s && length) 54d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton m_packet.append ((const char *)s, ((const char *)s) + length); 55d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton return length; 56d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton } 57d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton 58d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton void 59d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton Clear() 60d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton { 61d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton m_packet.clear(); 62d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton } 63d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton 64b924eb6c5250a9909dc55ac736d231f7ccae423bGreg Clayton // Beware, this might not be NULL terminated as you can expect from 65b924eb6c5250a9909dc55ac736d231f7ccae423bGreg Clayton // StringString as there may be random bits in the llvm::SmallVector. If 66b924eb6c5250a9909dc55ac736d231f7ccae423bGreg Clayton // you are using this class to create a C string, be sure the call PutChar ('\0') 67b924eb6c5250a9909dc55ac736d231f7ccae423bGreg Clayton // after you have created your string, or use StreamString. 68d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton const char * 69d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton GetData () const 70d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton { 71d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton return m_packet.data(); 72d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton } 73d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton 74d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton size_t 75d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton GetSize() const 76d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton { 77d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton return m_packet.size(); 78d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton } 79d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton 80d52d00f4edb746ba458a3e659699160952dc925eGreg Claytonprotected: 81d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton llvm::SmallVector<char, N> m_packet; 82d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton 83d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton}; 84d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton 85d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton} // namespace lldb_private 86d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton 87d52d00f4edb746ba458a3e659699160952dc925eGreg Clayton#endif // #ifndef liblldb_StreamBuffer_h_ 88