summaryrefslogtreecommitdiff
path: root/include/lldb/Utility/Stream.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/lldb/Utility/Stream.h')
-rw-r--r--include/lldb/Utility/Stream.h231
1 files changed, 69 insertions, 162 deletions
diff --git a/include/lldb/Utility/Stream.h b/include/lldb/Utility/Stream.h
index bd4283edf8a9..b24d4e457177 100644
--- a/include/lldb/Utility/Stream.h
+++ b/include/lldb/Utility/Stream.h
@@ -1,9 +1,8 @@
//===-- Stream.h ------------------------------------------------*- C++ -*-===//
//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//
@@ -24,15 +23,11 @@
namespace lldb_private {
-//----------------------------------------------------------------------
-/// @class Stream Stream.h "lldb/Utility/Stream.h"
+/// \class Stream Stream.h "lldb/Utility/Stream.h"
/// A stream class that can stream formatted output to a file.
-//----------------------------------------------------------------------
class Stream {
public:
- //------------------------------------------------------------------
/// \a m_flags bit values.
- //------------------------------------------------------------------
enum {
eBinary = (1 << 0) ///< Get and put data as binary instead of as the default
/// string mode.
@@ -40,11 +35,11 @@ public:
/// Utility class for counting the bytes that were written to a stream in a
/// certain time span.
- /// @example
+ /// \example
/// ByteDelta delta(*this);
/// WriteDataToStream("foo");
/// return *delta;
- /// @endcode
+ /// \endcode
class ByteDelta {
Stream *m_stream;
/// Bytes we have written so far when ByteDelta was created.
@@ -57,19 +52,15 @@ public:
size_t operator*() const { return m_stream->GetWrittenBytes() - m_start; }
};
- //------------------------------------------------------------------
/// Construct with flags and address size and byte order.
///
/// Construct with dump flags \a flags and the default address size. \a
/// flags can be any of the above enumeration logical OR'ed together.
- //------------------------------------------------------------------
Stream(uint32_t flags, uint32_t addr_size, lldb::ByteOrder byte_order);
- //------------------------------------------------------------------
/// Construct a default Stream, not binary, host byte order and host addr
/// size.
///
- //------------------------------------------------------------------
Stream();
// FIXME: Streams should not be copyable.
@@ -83,37 +74,29 @@ public:
return *this;
}
- //------------------------------------------------------------------
/// Destructor
- //------------------------------------------------------------------
virtual ~Stream();
- //------------------------------------------------------------------
// Subclasses must override these methods
- //------------------------------------------------------------------
- //------------------------------------------------------------------
/// Flush the stream.
///
/// Subclasses should flush the stream to make any output appear if the
/// stream has any buffering.
- //------------------------------------------------------------------
virtual void Flush() = 0;
- //------------------------------------------------------------------
/// Output character bytes to the stream.
///
/// Appends \a src_len characters from the buffer \a src to the stream.
///
- /// @param[in] src
+ /// \param[in] src
/// A buffer containing at least \a src_len bytes of data.
///
- /// @param[in] src_len
+ /// \param[in] src_len
/// A number of bytes to append to the stream.
///
- /// @return
+ /// \return
/// The number of bytes that were appended to the stream.
- //------------------------------------------------------------------
size_t Write(const void *src, size_t src_len) {
size_t appended_byte_count = WriteImpl(src, src_len);
m_bytes_written += appended_byte_count;
@@ -122,50 +105,42 @@ public:
size_t GetWrittenBytes() const { return m_bytes_written; }
- //------------------------------------------------------------------
// Member functions
- //------------------------------------------------------------------
size_t PutChar(char ch);
- //------------------------------------------------------------------
/// Set the byte_order value.
///
/// Sets the byte order of the data to extract. Extracted values will be
/// swapped if necessary when decoding.
///
- /// @param[in] byte_order
+ /// \param[in] byte_order
/// The byte order value to use when extracting data.
///
- /// @return
+ /// \return
/// The old byte order value.
- //------------------------------------------------------------------
lldb::ByteOrder SetByteOrder(lldb::ByteOrder byte_order);
- //------------------------------------------------------------------
/// Format a C string from a printf style format and variable arguments and
/// encode and append the resulting C string as hex bytes.
///
- /// @param[in] format
+ /// \param[in] format
/// A printf style format string.
///
- /// @param[in] ...
+ /// \param[in] ...
/// Any additional arguments needed for the printf format string.
///
- /// @return
+ /// \return
/// The number of bytes that were appended to the stream.
- //------------------------------------------------------------------
size_t PrintfAsRawHex8(const char *format, ...)
__attribute__((__format__(__printf__, 2, 3)));
- //------------------------------------------------------------------
/// Append an uint8_t value in the hexadecimal format to the stream.
///
- /// @param[in] uvalue
+ /// \param[in] uvalue
/// The value to append.
///
- /// @return
+ /// \return
/// The number of bytes that were appended to the stream.
- //------------------------------------------------------------------
size_t PutHex8(uint8_t uvalue);
size_t PutNHex8(size_t n, uint8_t uvalue);
@@ -204,292 +179,242 @@ public:
lldb::ByteOrder src_byte_order = lldb::eByteOrderInvalid,
lldb::ByteOrder dst_byte_order = lldb::eByteOrderInvalid);
- size_t PutCStringAsRawHex8(const char *s);
+ size_t PutStringAsRawHex8(llvm::StringRef s);
- //------------------------------------------------------------------
/// Output a NULL terminated C string \a cstr to the stream \a s.
///
- /// @param[in] cstr
+ /// \param[in] cstr
/// A NULL terminated C string.
///
- /// @return
+ /// \return
/// A reference to this class so multiple things can be streamed
/// in one statement.
- //------------------------------------------------------------------
Stream &operator<<(const char *cstr);
Stream &operator<<(llvm::StringRef str);
- //------------------------------------------------------------------
/// Output a pointer value \a p to the stream \a s.
///
- /// @param[in] p
+ /// \param[in] p
/// A void pointer.
///
- /// @return
+ /// \return
/// A reference to this class so multiple things can be streamed
/// in one statement.
- //------------------------------------------------------------------
Stream &operator<<(const void *p);
- //------------------------------------------------------------------
/// Output a character \a ch to the stream \a s.
///
- /// @param[in] ch
+ /// \param[in] ch
/// A printable character value.
///
- /// @return
+ /// \return
/// A reference to this class so multiple things can be streamed
/// in one statement.
- //------------------------------------------------------------------
Stream &operator<<(char ch);
- //------------------------------------------------------------------
/// Output a uint8_t \a uval to the stream \a s.
///
- /// @param[in] uval
+ /// \param[in] uval
/// A uint8_t value.
///
- /// @return
+ /// \return
/// A reference to this class so multiple things can be streamed
/// in one statement.
- //------------------------------------------------------------------
Stream &operator<<(uint8_t uval);
- //------------------------------------------------------------------
/// Output a uint16_t \a uval to the stream \a s.
///
- /// @param[in] uval
+ /// \param[in] uval
/// A uint16_t value.
///
- /// @return
+ /// \return
/// A reference to this class so multiple things can be streamed
/// in one statement.
- //------------------------------------------------------------------
Stream &operator<<(uint16_t uval);
- //------------------------------------------------------------------
/// Output a uint32_t \a uval to the stream \a s.
///
- /// @param[in] uval
+ /// \param[in] uval
/// A uint32_t value.
///
- /// @return
+ /// \return
/// A reference to this class so multiple things can be streamed
/// in one statement.
- //------------------------------------------------------------------
Stream &operator<<(uint32_t uval);
- //------------------------------------------------------------------
/// Output a uint64_t \a uval to the stream \a s.
///
- /// @param[in] uval
+ /// \param[in] uval
/// A uint64_t value.
///
- /// @return
+ /// \return
/// A reference to this class so multiple things can be streamed
/// in one statement.
- //------------------------------------------------------------------
Stream &operator<<(uint64_t uval);
- //------------------------------------------------------------------
/// Output a int8_t \a sval to the stream \a s.
///
- /// @param[in] sval
+ /// \param[in] sval
/// A int8_t value.
///
- /// @return
+ /// \return
/// A reference to this class so multiple things can be streamed
/// in one statement.
- //------------------------------------------------------------------
Stream &operator<<(int8_t sval);
- //------------------------------------------------------------------
/// Output a int16_t \a sval to the stream \a s.
///
- /// @param[in] sval
+ /// \param[in] sval
/// A int16_t value.
///
- /// @return
+ /// \return
/// A reference to this class so multiple things can be streamed
/// in one statement.
- //------------------------------------------------------------------
Stream &operator<<(int16_t sval);
- //------------------------------------------------------------------
/// Output a int32_t \a sval to the stream \a s.
///
- /// @param[in] sval
+ /// \param[in] sval
/// A int32_t value.
///
- /// @return
+ /// \return
/// A reference to this class so multiple things can be streamed
/// in one statement.
- //------------------------------------------------------------------
Stream &operator<<(int32_t sval);
- //------------------------------------------------------------------
/// Output a int64_t \a sval to the stream \a s.
///
- /// @param[in] sval
+ /// \param[in] sval
/// A int64_t value.
///
- /// @return
+ /// \return
/// A reference to this class so multiple things can be streamed
/// in one statement.
- //------------------------------------------------------------------
Stream &operator<<(int64_t sval);
- //------------------------------------------------------------------
/// Output an address value to this stream.
///
/// Put an address \a addr out to the stream with optional \a prefix and \a
/// suffix strings.
///
- /// @param[in] addr
+ /// \param[in] addr
/// An address value.
///
- /// @param[in] addr_size
+ /// \param[in] addr_size
/// Size in bytes of the address, used for formatting.
///
- /// @param[in] prefix
+ /// \param[in] prefix
/// A prefix C string. If nullptr, no prefix will be output.
///
- /// @param[in] suffix
+ /// \param[in] suffix
/// A suffix C string. If nullptr, no suffix will be output.
- //------------------------------------------------------------------
void Address(uint64_t addr, uint32_t addr_size, const char *prefix = nullptr,
const char *suffix = nullptr);
- //------------------------------------------------------------------
/// Output an address range to this stream.
///
/// Put an address range \a lo_addr - \a hi_addr out to the stream with
/// optional \a prefix and \a suffix strings.
///
- /// @param[in] lo_addr
+ /// \param[in] lo_addr
/// The start address of the address range.
///
- /// @param[in] hi_addr
+ /// \param[in] hi_addr
/// The end address of the address range.
///
- /// @param[in] addr_size
+ /// \param[in] addr_size
/// Size in bytes of the address, used for formatting.
///
- /// @param[in] prefix
+ /// \param[in] prefix
/// A prefix C string. If nullptr, no prefix will be output.
///
- /// @param[in] suffix
+ /// \param[in] suffix
/// A suffix C string. If nullptr, no suffix will be output.
- //------------------------------------------------------------------
void AddressRange(uint64_t lo_addr, uint64_t hi_addr, uint32_t addr_size,
const char *prefix = nullptr, const char *suffix = nullptr);
- //------------------------------------------------------------------
/// Output a C string to the stream.
///
/// Print a C string \a cstr to the stream.
///
- /// @param[in] cstr
+ /// \param[in] cstr
/// The string to be output to the stream.
- //------------------------------------------------------------------
size_t PutCString(llvm::StringRef cstr);
- //------------------------------------------------------------------
/// Output and End of Line character to the stream.
- //------------------------------------------------------------------
size_t EOL();
- //------------------------------------------------------------------
/// Get the address size in bytes.
///
- /// @return
+ /// \return
/// The size of an address in bytes that is used when outputting
/// address and pointer values to the stream.
- //------------------------------------------------------------------
uint32_t GetAddressByteSize() const;
- //------------------------------------------------------------------
/// The flags accessor.
///
- /// @return
+ /// \return
/// A reference to the Flags member variable.
- //------------------------------------------------------------------
Flags &GetFlags();
- //------------------------------------------------------------------
/// The flags const accessor.
///
- /// @return
+ /// \return
/// A const reference to the Flags member variable.
- //------------------------------------------------------------------
const Flags &GetFlags() const;
- //------------------------------------------------------------------
//// The byte order accessor.
////
- //// @return
+ //// \return
//// The byte order.
- //------------------------------------------------------------------
lldb::ByteOrder GetByteOrder() const;
- //------------------------------------------------------------------
/// Get the current indentation level.
///
- /// @return
+ /// \return
/// The current indentation level as an integer.
- //------------------------------------------------------------------
int GetIndentLevel() const;
- //------------------------------------------------------------------
/// Indent the current line in the stream.
///
/// Indent the current line using the current indentation level and print an
/// optional string following the indentation spaces.
///
- /// @param[in] s
+ /// \param[in] s
/// A C string to print following the indentation. If nullptr, just
/// output the indentation characters.
- //------------------------------------------------------------------
size_t Indent(const char *s = nullptr);
size_t Indent(llvm::StringRef s);
- //------------------------------------------------------------------
/// Decrement the current indentation level.
- //------------------------------------------------------------------
void IndentLess(int amount = 2);
- //------------------------------------------------------------------
/// Increment the current indentation level.
- //------------------------------------------------------------------
void IndentMore(int amount = 2);
- //------------------------------------------------------------------
/// Output an offset value.
///
/// Put an offset \a uval out to the stream using the printf format in \a
/// format.
///
- /// @param[in] offset
+ /// \param[in] offset
/// The offset value.
///
- /// @param[in] format
+ /// \param[in] format
/// The printf style format to use when outputting the offset.
- //------------------------------------------------------------------
void Offset(uint32_t offset, const char *format = "0x%8.8x: ");
- //------------------------------------------------------------------
/// Output printf formatted output to the stream.
///
/// Print some formatted output to the stream.
///
- /// @param[in] format
+ /// \param[in] format
/// A printf style format string.
///
- /// @param[in] ...
+ /// \param[in] ...
/// Variable arguments that are needed for the printf style
/// format string \a format.
- //------------------------------------------------------------------
size_t Printf(const char *format, ...) __attribute__((format(printf, 2, 3)));
size_t PrintfVarArg(const char *format, va_list args);
@@ -498,70 +423,56 @@ public:
PutCString(llvm::formatv(format, std::forward<Args>(args)...).str());
}
- //------------------------------------------------------------------
/// Output a quoted C string value to the stream.
///
/// Print a double quoted NULL terminated C string to the stream using the
/// printf format in \a format.
///
- /// @param[in] cstr
+ /// \param[in] cstr
/// A NULL terminated C string value.
///
- /// @param[in] format
+ /// \param[in] format
/// The optional C string format that can be overridden.
- //------------------------------------------------------------------
void QuotedCString(const char *cstr, const char *format = "\"%s\"");
- //------------------------------------------------------------------
/// Set the address size in bytes.
///
- /// @param[in] addr_size
+ /// \param[in] addr_size
/// The new size in bytes of an address to use when outputting
/// address and pointer values.
- //------------------------------------------------------------------
void SetAddressByteSize(uint32_t addr_size);
- //------------------------------------------------------------------
/// Set the current indentation level.
///
- /// @param[in] level
+ /// \param[in] level
/// The new indentation level.
- //------------------------------------------------------------------
void SetIndentLevel(int level);
- //------------------------------------------------------------------
/// Output a SLEB128 number to the stream.
///
/// Put an SLEB128 \a uval out to the stream using the printf format in \a
/// format.
///
- /// @param[in] uval
+ /// \param[in] uval
/// A uint64_t value that was extracted as a SLEB128 value.
- //------------------------------------------------------------------
size_t PutSLEB128(int64_t uval);
- //------------------------------------------------------------------
/// Output a ULEB128 number to the stream.
///
/// Put an ULEB128 \a uval out to the stream using the printf format in \a
/// format.
///
- /// @param[in] uval
+ /// \param[in] uval
/// A uint64_t value that was extracted as a ULEB128 value.
- //------------------------------------------------------------------
size_t PutULEB128(uint64_t uval);
- //------------------------------------------------------------------
/// Returns a raw_ostream that forwards the data to this Stream object.
- //------------------------------------------------------------------
llvm::raw_ostream &AsRawOstream() {
return m_forwarder;
}
protected:
- //------------------------------------------------------------------
// Member variables
- //------------------------------------------------------------------
Flags m_flags; ///< Dump flags.
uint32_t m_addr_size; ///< Size of an address in bytes.
lldb::ByteOrder
@@ -571,28 +482,24 @@ protected:
void _PutHex8(uint8_t uvalue, bool add_prefix);
- //------------------------------------------------------------------
/// Output character bytes to the stream.
///
/// Appends \a src_len characters from the buffer \a src to the stream.
///
- /// @param[in] src
+ /// \param[in] src
/// A buffer containing at least \a src_len bytes of data.
///
- /// @param[in] src_len
+ /// \param[in] src_len
/// A number of bytes to append to the stream.
///
- /// @return
+ /// \return
/// The number of bytes that were appended to the stream.
- //------------------------------------------------------------------
virtual size_t WriteImpl(const void *src, size_t src_len) = 0;
- //----------------------------------------------------------------------
- /// @class RawOstreamForward Stream.h "lldb/Utility/Stream.h"
+ /// \class RawOstreamForward Stream.h "lldb/Utility/Stream.h"
/// This is a wrapper class that exposes a raw_ostream interface that just
/// forwards to an LLDB stream, allowing to reuse LLVM algorithms that take
/// a raw_ostream within the LLDB code base.
- //----------------------------------------------------------------------
class RawOstreamForward : public llvm::raw_ostream {
// Note: This stream must *not* maintain its own buffer, but instead
// directly write everything to the internal Stream class. Without this,