summaryrefslogtreecommitdiff
path: root/lib/Support
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2008-08-17 04:13:37 +0000
committerChris Lattner <sabre@nondot.org>2008-08-17 04:13:37 +0000
commit07f51f788e1dff2982ff0aae7c2ea3d00e48cc61 (patch)
tree3e4c5cf41e4f07147846061184bb64be4ccddd28 /lib/Support
parentc52b128e1a9b1f16403dcbabf46ffc8ee1f7082e (diff)
downloadllvm-07f51f788e1dff2982ff0aae7c2ea3d00e48cc61.tar.gz
llvm-07f51f788e1dff2982ff0aae7c2ea3d00e48cc61.tar.bz2
llvm-07f51f788e1dff2982ff0aae7c2ea3d00e48cc61.tar.xz
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')
-rw-r--r--lib/Support/raw_ostream.cpp31
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();
+}