1 //===-- StreamString.cpp --------------------------------------------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 9 #include "lldb/Utility/StreamString.h" 10 11 using namespace lldb; 12 using namespace lldb_private; 13 14 StreamString::StreamString(bool colors) : Stream(0, 4, eByteOrderBig, colors) {} 15 16 StreamString::StreamString(uint32_t flags, uint32_t addr_size, 17 ByteOrder byte_order) 18 : Stream(flags, addr_size, byte_order), m_packet() {} 19 20 StreamString::~StreamString() = default; 21 22 void StreamString::Flush() { 23 // Nothing to do when flushing a buffer based stream... 24 } 25 26 size_t StreamString::WriteImpl(const void *s, size_t length) { 27 m_packet.append(static_cast<const char *>(s), length); 28 return length; 29 } 30 31 void StreamString::Clear() { 32 m_packet.clear(); 33 m_bytes_written = 0; 34 } 35 36 bool StreamString::Empty() const { return GetSize() == 0; } 37 38 size_t StreamString::GetSize() const { return m_packet.size(); } 39 40 size_t StreamString::GetSizeOfLastLine() const { 41 const size_t length = m_packet.size(); 42 size_t last_line_begin_pos = m_packet.find_last_of("\r\n"); 43 if (last_line_begin_pos == std::string::npos) { 44 return length; 45 } else { 46 ++last_line_begin_pos; 47 return length - last_line_begin_pos; 48 } 49 } 50 51 llvm::StringRef StreamString::GetString() const { return m_packet; } 52 53 void StreamString::FillLastLineToColumn(uint32_t column, char fill_char) { 54 const size_t length = m_packet.size(); 55 size_t last_line_begin_pos = m_packet.find_last_of("\r\n"); 56 if (last_line_begin_pos == std::string::npos) { 57 last_line_begin_pos = 0; 58 } else { 59 ++last_line_begin_pos; 60 } 61 62 const size_t line_columns = length - last_line_begin_pos; 63 if (column > line_columns) { 64 m_packet.append(column - line_columns, fill_char); 65 } 66 } 67