mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-02 07:11:49 +00:00
Add raw_stream adaptors that write into an std::string and SmallVector/SmallString.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@55265 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
944fac71e0
commit
78a2812538
@ -22,6 +22,8 @@
|
||||
|
||||
namespace llvm {
|
||||
class format_object_base;
|
||||
template <typename T>
|
||||
class SmallVectorImpl;
|
||||
|
||||
/// raw_ostream - This class implements an extremely fast bulk output stream
|
||||
/// that can *only* output to a stream. It does not support seeking, reopening,
|
||||
@ -192,7 +194,7 @@ raw_ostream &errs();
|
||||
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// Bridge Output Streams
|
||||
// Output Stream Adaptors
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
/// raw_os_ostream - A raw_ostream that writes to an std::ostream. This is a
|
||||
@ -208,6 +210,34 @@ public:
|
||||
/// buffer to empty.
|
||||
virtual void flush_impl();
|
||||
};
|
||||
|
||||
/// raw_string_ostream - A raw_ostream that writes to an std::string. This is a
|
||||
/// simple adaptor class.
|
||||
class raw_string_ostream : public raw_ostream {
|
||||
std::string &OS;
|
||||
public:
|
||||
raw_string_ostream(std::string &O) : OS(O) {}
|
||||
~raw_string_ostream();
|
||||
|
||||
/// flush_impl - The is the piece of the class that is implemented by
|
||||
/// subclasses. This outputs the currently buffered data and resets the
|
||||
/// buffer to empty.
|
||||
virtual void flush_impl();
|
||||
};
|
||||
|
||||
/// raw_svector_ostream - A raw_ostream that writes to an SmallVector or
|
||||
/// SmallString. This is a simple adaptor class.
|
||||
class raw_svector_ostream : public raw_ostream {
|
||||
SmallVectorImpl<char> &OS;
|
||||
public:
|
||||
raw_svector_ostream(SmallVectorImpl<char> &O) : OS(O) {}
|
||||
~raw_svector_ostream();
|
||||
|
||||
/// flush_impl - The is the piece of the class that is implemented by
|
||||
/// subclasses. This outputs the currently buffered data and resets the
|
||||
/// buffer to empty.
|
||||
virtual void flush_impl();
|
||||
};
|
||||
|
||||
} // end llvm namespace
|
||||
|
||||
|
@ -268,3 +268,38 @@ void raw_os_ostream::flush_impl() {
|
||||
OS.write(OutBufStart, OutBufCur-OutBufStart);
|
||||
HandleFlush();
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// raw_string_ostream
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
raw_string_ostream::~raw_string_ostream() {
|
||||
flush();
|
||||
}
|
||||
|
||||
/// flush_impl - The is the piece of the class that is implemented by
|
||||
/// subclasses. This outputs the currently buffered data and resets the
|
||||
/// buffer to empty.
|
||||
void raw_string_ostream::flush_impl() {
|
||||
if (OutBufCur-OutBufStart)
|
||||
OS.append(OutBufStart, OutBufCur-OutBufStart);
|
||||
HandleFlush();
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// raw_svector_ostream
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
||||
raw_svector_ostream::~raw_svector_ostream() {
|
||||
flush();
|
||||
}
|
||||
|
||||
/// flush_impl - The is the piece of the class that is implemented by
|
||||
/// subclasses. This outputs the currently buffered data and resets the
|
||||
/// buffer to empty.
|
||||
void raw_svector_ostream::flush_impl() {
|
||||
if (OutBufCur-OutBufStart)
|
||||
OS.append(OutBufStart, OutBufCur);
|
||||
HandleFlush();
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user