1*bf9a7730SZachary Turner //===-- StreamString.cpp ----------------------------------------*- C++ -*-===// 2*bf9a7730SZachary Turner // 3*bf9a7730SZachary Turner // The LLVM Compiler Infrastructure 4*bf9a7730SZachary Turner // 5*bf9a7730SZachary Turner // This file is distributed under the University of Illinois Open Source 6*bf9a7730SZachary Turner // License. See LICENSE.TXT for details. 7*bf9a7730SZachary Turner // 8*bf9a7730SZachary Turner //===----------------------------------------------------------------------===// 9*bf9a7730SZachary Turner 10*bf9a7730SZachary Turner #include "lldb/Utility/StreamString.h" 11*bf9a7730SZachary Turner #include <stdio.h> 12*bf9a7730SZachary Turner 13*bf9a7730SZachary Turner using namespace lldb; 14*bf9a7730SZachary Turner using namespace lldb_private; 15*bf9a7730SZachary Turner 16*bf9a7730SZachary Turner StreamString::StreamString() : Stream(0, 4, eByteOrderBig) {} 17*bf9a7730SZachary Turner 18*bf9a7730SZachary Turner StreamString::StreamString(uint32_t flags, uint32_t addr_size, 19*bf9a7730SZachary Turner ByteOrder byte_order) 20*bf9a7730SZachary Turner : Stream(flags, addr_size, byte_order), m_packet() {} 21*bf9a7730SZachary Turner 22*bf9a7730SZachary Turner StreamString::~StreamString() {} 23*bf9a7730SZachary Turner 24*bf9a7730SZachary Turner void StreamString::Flush() { 25*bf9a7730SZachary Turner // Nothing to do when flushing a buffer based stream... 26*bf9a7730SZachary Turner } 27*bf9a7730SZachary Turner 28*bf9a7730SZachary Turner size_t StreamString::Write(const void *s, size_t length) { 29*bf9a7730SZachary Turner m_packet.append(reinterpret_cast<const char *>(s), length); 30*bf9a7730SZachary Turner return length; 31*bf9a7730SZachary Turner } 32*bf9a7730SZachary Turner 33*bf9a7730SZachary Turner void StreamString::Clear() { m_packet.clear(); } 34*bf9a7730SZachary Turner 35*bf9a7730SZachary Turner bool StreamString::Empty() const { return GetSize() == 0; } 36*bf9a7730SZachary Turner 37*bf9a7730SZachary Turner size_t StreamString::GetSize() const { return m_packet.size(); } 38*bf9a7730SZachary Turner 39*bf9a7730SZachary Turner size_t StreamString::GetSizeOfLastLine() const { 40*bf9a7730SZachary Turner const size_t length = m_packet.size(); 41*bf9a7730SZachary Turner size_t last_line_begin_pos = m_packet.find_last_of("\r\n"); 42*bf9a7730SZachary Turner if (last_line_begin_pos == std::string::npos) { 43*bf9a7730SZachary Turner return length; 44*bf9a7730SZachary Turner } else { 45*bf9a7730SZachary Turner ++last_line_begin_pos; 46*bf9a7730SZachary Turner return length - last_line_begin_pos; 47*bf9a7730SZachary Turner } 48*bf9a7730SZachary Turner } 49*bf9a7730SZachary Turner 50*bf9a7730SZachary Turner llvm::StringRef StreamString::GetString() const { return m_packet; } 51*bf9a7730SZachary Turner 52*bf9a7730SZachary Turner void StreamString::FillLastLineToColumn(uint32_t column, char fill_char) { 53*bf9a7730SZachary Turner const size_t length = m_packet.size(); 54*bf9a7730SZachary Turner size_t last_line_begin_pos = m_packet.find_last_of("\r\n"); 55*bf9a7730SZachary Turner if (last_line_begin_pos == std::string::npos) { 56*bf9a7730SZachary Turner last_line_begin_pos = 0; 57*bf9a7730SZachary Turner } else { 58*bf9a7730SZachary Turner ++last_line_begin_pos; 59*bf9a7730SZachary Turner } 60*bf9a7730SZachary Turner 61*bf9a7730SZachary Turner const size_t line_columns = length - last_line_begin_pos; 62*bf9a7730SZachary Turner if (column > line_columns) { 63*bf9a7730SZachary Turner m_packet.append(column - line_columns, fill_char); 64*bf9a7730SZachary Turner } 65*bf9a7730SZachary Turner } 66