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