Write space padding as one string to speed up comment printing.
authorDavid Greene <greened@obbligato.org>
Thu, 23 Jul 2009 23:21:10 +0000 (23:21 +0000)
committerDavid Greene <greened@obbligato.org>
Thu, 23 Jul 2009 23:21:10 +0000 (23:21 +0000)
llvm-svn: 76910

llvm/include/llvm/Support/FormattedStream.h
llvm/lib/Support/FormattedStream.cpp

index dc30cdb..4b13ff2 100644 (file)
@@ -27,16 +27,23 @@ namespace llvm
     /// DELETE_STREAM - Tell the destructor to delete the held stream.
     ///
     const static bool DELETE_STREAM = true;
+
     /// PRESERVE_STREAM - Tell the destructor to not delete the held
     /// stream.
     ///
     const static bool PRESERVE_STREAM = false;
-    
+
+    /// MAX_COLUMN_PAD - This is the maximum column padding we ever
+    /// expect to see.
+    ///
+    const static unsigned MAX_COLUMN_PAD = 100;
+
   private:
     /// TheStream - The real stream we output to. We set it to be
     /// unbuffered, since we're already doing our own buffering.
     ///
     raw_ostream *TheStream;
+
     /// DeleteStream - Do we need to delete TheStream in the
     /// destructor?
     ///
index 3523e2d..1796f9f 100644 (file)
@@ -12,6 +12,8 @@
 //===----------------------------------------------------------------------===//
 
 #include "llvm/Support/FormattedStream.h"
+#include <algorithm>
+
 using namespace llvm;
 
 /// ComputeColumn - Examine the current output and figure out which
@@ -44,9 +46,17 @@ void formatted_raw_ostream::PadToColumn(unsigned NewCol, unsigned MinPad) {
   if (NewCol < Column || num < MinPad)
     num = MinPad;
 
-  // TODO: Write a whole string at a time.
-  while (num-- > 0)
-    write(' ');
+  // Keep a buffer of spaces handy to speed up processing.
+  static char Spaces[MAX_COLUMN_PAD];
+  static bool Initialized = false;
+  if (!Initialized) {
+    std::fill_n(Spaces, MAX_COLUMN_PAD, ' '),
+    Initialized = true;
+  }
+
+  assert(num < MAX_COLUMN_PAD && "Unexpectedly large column padding");
+
+  write(Spaces, num);
 }
 
 /// fouts() - This returns a reference to a formatted_raw_ostream for