blob: 36e086b0b4332dffe865489baa533ec76ed8cbe8 [file] [log] [blame]
Chris Lattner30fdc8d2010-06-08 16:52:24 +00001//===-- 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"
Eli Friedman88966972010-06-09 08:50:27 +000011#include <stdio.h>
Chris Lattner30fdc8d2010-06-08 16:52:24 +000012
13using namespace lldb;
14using namespace lldb_private;
15
16StreamString::StreamString () :
17 Stream (0, 4, eByteOrderBig)
18{
19}
20
21StreamString::StreamString(uint32_t flags, uint32_t addr_size, ByteOrder byte_order) :
22 Stream (flags, addr_size, byte_order),
23 m_packet ()
24{
25}
26
27StreamString::~StreamString()
28{
29}
30
31void
32StreamString::Flush ()
33{
34 // Nothing to do when flushing a buffer based stream...
35}
36
Greg Claytonc7bece562013-01-25 18:06:21 +000037size_t
Chris Lattner30fdc8d2010-06-08 16:52:24 +000038StreamString::Write (const void *s, size_t length)
39{
Saleem Abdulrasoolba507b02015-10-18 19:34:38 +000040 m_packet.append (reinterpret_cast<const char *>(s), length);
Chris Lattner30fdc8d2010-06-08 16:52:24 +000041 return length;
42}
43
44void
45StreamString::Clear()
46{
47 m_packet.clear();
48}
49
Johnny Chen797a1b32012-05-29 20:04:10 +000050bool
51StreamString::Empty() const
52{
53 return GetSize() == 0;
54}
55
Chris Lattner30fdc8d2010-06-08 16:52:24 +000056const char *
57StreamString::GetData () const
58{
59 return m_packet.c_str();
60}
61
62size_t
63StreamString::GetSize () const
64{
65 return m_packet.size();
66}
67
Jason Molendaaff1b352014-10-10 23:07:36 +000068size_t
69StreamString::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
Chris Lattner30fdc8d2010-06-08 16:52:24 +000084std::string &
85StreamString::GetString()
86{
87 return m_packet;
88}
89
90const std::string &
91StreamString::GetString() const
92{
93 return m_packet;
94}
95
Greg Claytonba812f42012-05-10 02:52:23 +000096void
97StreamString::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