Added wrappers for the std::cerr/std::cout objects. The wrappers will
authorBill Wendling <isanbard@gmail.com>
Fri, 17 Nov 2006 09:51:22 +0000 (09:51 +0000)
committerBill Wendling <isanbard@gmail.com>
Fri, 17 Nov 2006 09:51:22 +0000 (09:51 +0000)
soon replace all uses of those objects.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@31817 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Support/Streams.h [new file with mode: 0644]
lib/Support/Streams.cpp [new file with mode: 0644]

diff --git a/include/llvm/Support/Streams.h b/include/llvm/Support/Streams.h
new file mode 100644 (file)
index 0000000..5af96fd
--- /dev/null
@@ -0,0 +1,47 @@
+//===- llvm/Support/Streams.h - Wrappers for iostreams ----------*- C++ -*-===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file was developed by Bill Wendling and is distributed under the
+// University of Illinois Open Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements a wrapper for the std::cout and std::cerr I/O streams.
+// It prevents the need to include <iostream> to each file just to get I/O.
+//
+//===----------------------------------------------------------------------===//
+
+#ifndef LLVM_SUPPORT_STREAMS_H
+#define LLVM_SUPPORT_STREAMS_H
+
+#include <ostream>              // Doesn't have static d'tors!!
+
+namespace llvm {
+
+  /// llvm_ostream - Acts like an ostream. It's a wrapper for the std::cerr and
+  /// std::cout ostreams. However, it doesn't require #including <iostream> in
+  /// every file, which increases static c'tors & d'tors in the object code.
+  /// 
+  class llvm_ostream {
+    std::ostream* Stream;
+  public:
+    llvm_ostream() : Stream(0) {}
+    llvm_ostream(std::ostream &OStream) : Stream(&OStream) {}
+
+    template <typename Ty>
+    llvm_ostream &operator << (const Ty &Thing) {
+      if (Stream) *Stream << Thing;
+      return *this;
+    }
+
+    bool operator == (const std::ostream &OS) { return &OS == Stream; }
+  };
+
+  extern llvm_ostream llvm_null;
+  extern llvm_ostream llvm_cout;
+  extern llvm_ostream llvm_cerr;
+
+} // End llvm namespace
+
+#endif
diff --git a/lib/Support/Streams.cpp b/lib/Support/Streams.cpp
new file mode 100644 (file)
index 0000000..9ca7590
--- /dev/null
@@ -0,0 +1,21 @@
+//===-- Streams.cpp - Wrappers for iostreams ------------------------------===//
+//
+//                     The LLVM Compiler Infrastructure
+//
+// This file was developed by Bill Wendling and is distributed under the
+// University of Illinois Open Source License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file implements a wrapper for the std::cout and std::cerr I/O streams.
+// It prevents the need to include <iostream> to each file just to get I/O.
+//
+//===----------------------------------------------------------------------===//
+
+#include "llvm/Support/Streams.h"
+#include <iostream>
+using namespace llvm;
+
+llvm_ostream llvm::llvm_null;
+llvm_ostream llvm::llvm_cout(std::cout);
+llvm_ostream llvm::llvm_cerr(std::cerr);