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