[llvm-commits] CVS: llvm/include/llvm/Support/Streams.h

Bill Wendling isanbard at gmail.com
Fri Nov 17 01:51:38 PST 2006



Changes in directory llvm/include/llvm/Support:

Streams.h added (r1.1)
---
Log message:

Added wrappers for the std::cerr/std::cout objects. The wrappers will
soon replace all uses of those objects.


---
Diffs of the changes:  (+47 -0)

 Streams.h |   47 +++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 47 insertions(+)


Index: llvm/include/llvm/Support/Streams.h
diff -c /dev/null llvm/include/llvm/Support/Streams.h:1.1
*** /dev/null	Fri Nov 17 03:51:32 2006
--- llvm/include/llvm/Support/Streams.h	Fri Nov 17 03:51:22 2006
***************
*** 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






More information about the llvm-commits mailing list