Home | History | Annotate | Download | only in Core
      1 //===-- 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"
     11 #include <stdio.h>
     12 
     13 using namespace lldb;
     14 using namespace lldb_private;
     15 
     16 StreamString::StreamString () :
     17     Stream (0, 4, eByteOrderBig)
     18 {
     19 }
     20 
     21 StreamString::StreamString(uint32_t flags, uint32_t addr_size, ByteOrder byte_order) :
     22     Stream (flags, addr_size, byte_order),
     23     m_packet ()
     24 {
     25 }
     26 
     27 StreamString::~StreamString()
     28 {
     29 }
     30 
     31 void
     32 StreamString::Flush ()
     33 {
     34     // Nothing to do when flushing a buffer based stream...
     35 }
     36 
     37 size_t
     38 StreamString::Write (const void *s, size_t length)
     39 {
     40     m_packet.append ((char *)s, length);
     41     return length;
     42 }
     43 
     44 void
     45 StreamString::Clear()
     46 {
     47     m_packet.clear();
     48 }
     49 
     50 bool
     51 StreamString::Empty() const
     52 {
     53     return GetSize() == 0;
     54 }
     55 
     56 const char *
     57 StreamString::GetData () const
     58 {
     59     return m_packet.c_str();
     60 }
     61 
     62 size_t
     63 StreamString::GetSize () const
     64 {
     65     return m_packet.size();
     66 }
     67 
     68 std::string &
     69 StreamString::GetString()
     70 {
     71     return m_packet;
     72 }
     73 
     74 const std::string &
     75 StreamString::GetString() const
     76 {
     77     return m_packet;
     78 }
     79 
     80 void
     81 StreamString::FillLastLineToColumn (uint32_t column, char fill_char)
     82 {
     83     const size_t length = m_packet.size();
     84     size_t last_line_begin_pos = m_packet.find_last_of("\r\n");
     85     if (last_line_begin_pos == std::string::npos)
     86     {
     87         last_line_begin_pos = 0;
     88     }
     89     else
     90     {
     91         ++last_line_begin_pos;
     92     }
     93 
     94     const size_t line_columns = length - last_line_begin_pos;
     95     if (column > line_columns)
     96     {
     97         m_packet.append(column - line_columns, fill_char);
     98     }
     99 }
    100 
    101