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