1 //===-- StreamString.cpp ----------------------------------------*- 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 #include "lldb/Core/StreamString.h"
11 #include <stdio.h>
12 
13 using namespace lldb;
14 using namespace lldb_private;
15 
StreamString()16 StreamString::StreamString () :
17     Stream (0, 4, eByteOrderBig)
18 {
19 }
20 
StreamString(uint32_t flags,uint32_t addr_size,ByteOrder byte_order)21 StreamString::StreamString(uint32_t flags, uint32_t addr_size, ByteOrder byte_order) :
22     Stream (flags, addr_size, byte_order),
23     m_packet ()
24 {
25 }
26 
~StreamString()27 StreamString::~StreamString()
28 {
29 }
30 
31 void
Flush()32 StreamString::Flush ()
33 {
34     // Nothing to do when flushing a buffer based stream...
35 }
36 
37 size_t
Write(const void * s,size_t length)38 StreamString::Write (const void *s, size_t length)
39 {
40     m_packet.append ((char *)s, length);
41     return length;
42 }
43 
44 void
Clear()45 StreamString::Clear()
46 {
47     m_packet.clear();
48 }
49 
50 bool
Empty() const51 StreamString::Empty() const
52 {
53     return GetSize() == 0;
54 }
55 
56 const char *
GetData() const57 StreamString::GetData () const
58 {
59     return m_packet.c_str();
60 }
61 
62 size_t
GetSize() const63 StreamString::GetSize () const
64 {
65     return m_packet.size();
66 }
67 
68 std::string &
GetString()69 StreamString::GetString()
70 {
71     return m_packet;
72 }
73 
74 const std::string &
GetString() const75 StreamString::GetString() const
76 {
77     return m_packet;
78 }
79 
80 void
FillLastLineToColumn(uint32_t column,char fill_char)81 StreamString::FillLastLineToColumn (uint32_t column, char fill_char)
82 {
83     const size_t length = m_packet.size();
84     size_t last_line_begin_pos = m_packet.find_last_of("\r\n");
85     if (last_line_begin_pos == std::string::npos)
86     {
87         last_line_begin_pos = 0;
88     }
89     else
90     {
91         ++last_line_begin_pos;
92     }
93 
94     const size_t line_columns = length - last_line_begin_pos;
95     if (column > line_columns)
96     {
97         m_packet.append(column - line_columns, fill_char);
98     }
99 }
100 
101