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 | 050c961c067bb454d704641603db9fac097592ae (patch) | |
tree | 3e4c5cf41e4f07147846061184bb64be4ccddd28 | |
parent | ef27e64737b7b423f9711b603d5ee0772db665db (diff) | |
download | external_llvm-050c961c067bb454d704641603db9fac097592ae.tar.gz external_llvm-050c961c067bb454d704641603db9fac097592ae.tar.bz2 external_llvm-050c961c067bb454d704641603db9fac097592ae.zip |
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
-rw-r--r-- | include/llvm/Support/raw_ostream.h | 29 | ||||
-rw-r--r-- | lib/Support/raw_ostream.cpp | 31 |
2 files changed, 59 insertions, 1 deletions
diff --git a/include/llvm/Support/raw_ostream.h b/include/llvm/Support/raw_ostream.h index 6d538003fe..34dd052e88 100644 --- a/include/llvm/Support/raw_ostream.h +++ b/include/llvm/Support/raw_ostream.h @@ -1,4 +1,4 @@ -//===--- raw_ostream.h - Raw output stream ---------------------------------===// +//===--- raw_ostream.h - Raw output stream --------------------------------===// // // The LLVM Compiler Infrastructure // @@ -15,6 +15,7 @@ #define LLVM_SUPPORT_RAW_OSTREAM_H #include <string> +#include <iosfwd> namespace llvm { @@ -151,6 +152,8 @@ public: virtual void flush_impl(); }; +/// raw_stdout_ostream - This is a stream that always prints to stdout. +/// class raw_stdout_ostream : public raw_fd_ostream { // An out of line virtual method to provide a home for the class vtable. virtual void handle(); @@ -158,6 +161,8 @@ public: raw_stdout_ostream(); }; +/// raw_stderr_ostream - This is a stream that always prints to stderr. +/// class raw_stderr_ostream : public raw_fd_ostream { // An out of line virtual method to provide a home for the class vtable. virtual void handle(); @@ -165,6 +170,28 @@ public: raw_stderr_ostream(); }; +/// outs() - This returns a reference to a raw_ostream for standard output. +/// Use it like: outs() << "foo" << "bar"; +raw_ostream &outs(); + +/// errs() - This returns a reference to a raw_ostream for standard error. +/// Use it like: errs() << "foo" << "bar"; +raw_ostream &errs(); + + +/// raw_os_ostream - A raw_ostream that writes to an std::ostream. This is a +/// simple adaptor class. +class raw_os_ostream : public raw_ostream { + std::ostream &OS; +public: + raw_os_ostream(std::ostream &O) : OS(O) {} + + /// 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 #endif 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(); +} |