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 size_t
GetSizeOfLastLine() const69 StreamString::GetSizeOfLastLine () const
70 {
71 const size_t length = m_packet.size();
72 size_t last_line_begin_pos = m_packet.find_last_of("\r\n");
73 if (last_line_begin_pos == std::string::npos)
74 {
75 return length;
76 }
77 else
78 {
79 ++last_line_begin_pos;
80 return length - last_line_begin_pos;
81 }
82 }
83
84 std::string &
GetString()85 StreamString::GetString()
86 {
87 return m_packet;
88 }
89
90 const std::string &
GetString() const91 StreamString::GetString() const
92 {
93 return m_packet;
94 }
95
96 void
FillLastLineToColumn(uint32_t column,char fill_char)97 StreamString::FillLastLineToColumn (uint32_t column, char fill_char)
98 {
99 const size_t length = m_packet.size();
100 size_t last_line_begin_pos = m_packet.find_last_of("\r\n");
101 if (last_line_begin_pos == std::string::npos)
102 {
103 last_line_begin_pos = 0;
104 }
105 else
106 {
107 ++last_line_begin_pos;
108 }
109
110 const size_t line_columns = length - last_line_begin_pos;
111 if (column > line_columns)
112 {
113 m_packet.append(column - line_columns, fill_char);
114 }
115 }
116
117