diff options
author | Chris Lattner <sabre@nondot.org> | 2008-08-17 04:13:37 +0000 |
---|---|---|
committer | Chris Lattner <sabre@nondot.org> | 2008-08-17 04:13:37 +0000 |
commit | 07f51f788e1dff2982ff0aae7c2ea3d00e48cc61 (patch) | |
tree | 3e4c5cf41e4f07147846061184bb64be4ccddd28 /lib/Support/raw_ostream.cpp | |
parent | c52b128e1a9b1f16403dcbabf46ffc8ee1f7082e (diff) |
add support for a cout/cerr analog (outs()/errs()) as well as
a simple adaptor class to give raw output capabilities to
something that wants to write to an ostream.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@54865 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support/raw_ostream.cpp')
-rw-r--r-- | lib/Support/raw_ostream.cpp | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/lib/Support/raw_ostream.cpp b/lib/Support/raw_ostream.cpp index a4dc797f01..9686427717 100644 --- a/lib/Support/raw_ostream.cpp +++ b/lib/Support/raw_ostream.cpp @@ -12,6 +12,7 @@ //===----------------------------------------------------------------------===// #include "llvm/Support/raw_ostream.h" +#include <ostream> using namespace llvm; #if !defined(_MSC_VER) @@ -62,6 +63,9 @@ void raw_fd_ostream::flush_impl() { HandleFlush(); } +//===----------------------------------------------------------------------===// +// raw_stdout/err_ostream +//===----------------------------------------------------------------------===// raw_stdout_ostream::raw_stdout_ostream():raw_fd_ostream(STDOUT_FILENO, false) {} raw_stderr_ostream::raw_stderr_ostream():raw_fd_ostream(STDERR_FILENO, false) {} @@ -69,3 +73,30 @@ raw_stderr_ostream::raw_stderr_ostream():raw_fd_ostream(STDERR_FILENO, false) {} // An out of line virtual method to provide a home for the class vtable. void raw_stdout_ostream::handle() {} void raw_stderr_ostream::handle() {} + +/// outs() - This returns a reference to a raw_ostream for standard output. +/// Use it like: outs() << "foo" << "bar"; +raw_ostream &outs() { + static raw_stdout_ostream S; + return S; +} + +/// errs() - This returns a reference to a raw_ostream for standard error. +/// Use it like: errs() << "foo" << "bar"; +raw_ostream &errs() { + static raw_stderr_ostream S; + return S; +} + +//===----------------------------------------------------------------------===// +// raw_os_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. +void raw_os_ostream::flush_impl() { + if (OutBufCur-OutBufStart) + OS.write(OutBufStart, OutBufCur-OutBufStart); + HandleFlush(); +} |