[llvm-commits] [llvm] r78923 - in /llvm/trunk: include/llvm/Support/raw_ostream.h lib/Support/raw_ostream.cpp

Dan Gohman gohman at apple.com
Sun Aug 16 09:41:58 PDT 2009


On Aug 15, 2009, at 2:13 AM, Sanjiv Gupta wrote:

> Dan Gohman wrote:
>> Author: djg
>> Date: Thu Aug 13 12:27:29 2009
>> New Revision: 78923
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=78923&view=rev
>> Log:
>> Add support to raw_ostream for sizing the buffer according to the
>> needs of the underlying output mechanism. raw_fd_ostream now uses
>> st_blksize from fstat to determine a buffer size.
>>
>> Modified:
>>    llvm/trunk/include/llvm/Support/raw_ostream.h
>>    llvm/trunk/lib/Support/raw_ostream.cpp
>>
>> Modified: llvm/trunk/include/llvm/Support/raw_ostream.h
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/Support/raw_ostream.h?rev=78923&r1=78922&r2=78923&view=diff
>>
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =
>> =====================================================================
>> --- llvm/trunk/include/llvm/Support/raw_ostream.h (original)
>> +++ llvm/trunk/include/llvm/Support/raw_ostream.h Thu Aug 13  
>> 12:27:29 2009
>> @@ -96,16 +96,26 @@
>>   // Configuration Interface
>>   // 
>> = 
>> = 
>> = 
>> -------------------------------------------------------------------- 
>> ===//
>> -  /// SetBufferSize - Set the internal buffer size to the  
>> specified amount
>> -  /// instead of the default.
>> -  void SetBufferSize(size_t Size=4096);
>> +  /// SetBuffered - Set the stream to be buffered, with an  
>> automatically
>> +  /// determined buffer size.
>> +  void SetBuffered();
>> +
>> +  /// SetBufferrSize - Set the stream to be buffered, using the
>> +  /// specified buffer size.
>> +  void SetBufferSize(size_t Size);
>> +
>> +  size_t GetBufferSize() {
>> +    // If we're supposed to be buffered but haven't actually  
>> gotten around
>> +    // to allocating the buffer yet, return the value that would  
>> be used.
>> +    if (!Unbuffered && !OutBufStart)
>> +      return preferred_buffer_size();
>> -  size_t GetBufferSize() const {
>> +    // Otherwise just return the size of the allocated buffer.
>>     return OutBufEnd - OutBufStart;
>>   }
>> -  /// SetUnbuffered - Set the streams buffering status. When
>> -  /// unbuffered the stream will flush after every write. This  
>> routine
>> +  /// SetUnbuffered - Set the stream to be unbuffered. When
>> +  /// unbuffered, the stream will flush after every write. This  
>> routine
>>   /// will also flush the buffer immediately when the stream is being
>>   /// set to unbuffered.
>>   void SetUnbuffered();
>> @@ -233,6 +243,10 @@
>>   virtual uint64_t current_pos() = 0;
>>  protected:
>> +  /// preferred_buffer_size - Return an efficient buffer size for  
>> the
>> +  /// underlying output mechanism.
>> +  virtual size_t preferred_buffer_size();
>> +
>>   /// error_detected - Set the flag indicating that an output error  
>> has
>>   /// been encountered.
>>   void error_detected() { Error = true; }
>> @@ -273,6 +287,9 @@
>>   /// counting the bytes currently in the buffer.
>>   virtual uint64_t current_pos() { return pos; }
>> +  /// preferred_buffer_size - Determine an efficient buffer size.
>> +  virtual size_t preferred_buffer_size();
>> +
>> public:
>>   /// raw_fd_ostream - Open the specified file for writing. If an
>>   /// error occurs, information about the error is put into  
>> ErrorInfo,
>>
>> Modified: llvm/trunk/lib/Support/raw_ostream.cpp
>> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Support/raw_ostream.cpp?rev=78923&r1=78922&r2=78923&view=diff
>>
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> = 
>> =====================================================================
>> --- llvm/trunk/lib/Support/raw_ostream.cpp (original)
>> +++ llvm/trunk/lib/Support/raw_ostream.cpp Thu Aug 13 12:27:29 2009
>> @@ -20,6 +20,8 @@
>> #include "llvm/Support/Compiler.h"
>> #include "llvm/Support/ErrorHandling.h"
>> #include <ostream>
>> +#include <sys/stat.h>
>> +#include <sys/types.h>
>>  #if defined(HAVE_UNISTD_H)
>> # include <unistd.h>
>> @@ -63,6 +65,16 @@
>> // An out of line virtual method to provide a home for the class  
>> vtable.
>> void raw_ostream::handle() {}
>> +size_t raw_ostream::preferred_buffer_size() {
>> +  // BUFSIZ is intended to be a reasonable default.
>> +  return BUFSIZ;
>> +}
>> +
>> +void raw_ostream::SetBuffered() {
>> +  // Ask the subclass to determine an appropriate buffer size.
>> +  SetBufferSize(preferred_buffer_size());
>> +}
>> +
>> void raw_ostream::SetBufferSize(size_t Size) {
>>   assert(Size >= 64 &&
>>          "Buffer size must be somewhat large for invariants to  
>> hold");
>> @@ -172,7 +184,7 @@
>>     }
>>          if (!OutBufStart)
>> -      SetBufferSize();
>> +      SetBuffered();
>>     else
>>       flush_nonempty();
>>   }
>> @@ -190,7 +202,7 @@
>>         return *this;
>>       }
>>       // Set up a buffer and start over.
>> -      SetBufferSize();
>> +      SetBuffered();
>>       return write(Ptr, Size);
>>     }
>>     // Write out the data in buffer-sized blocks until the remainder
>> @@ -353,6 +365,17 @@
>>   return pos;   }
>> +size_t raw_fd_ostream::preferred_buffer_size() {
>> +#if !defined(_MSC_VER) // Windows reportedly doesn't have  
>> st_blksize.
>> +  assert(FD >= 0 && "File not yet open!");
>> +  struct stat statbuf;
>> +  if (fstat(FD, &statbuf) == 0)
>> +    return statbuf.st_blksize;
>>
> on Mingw
>
> C:/msys/home/auto-tester/projects/c16/lib/Support/raw_ostream.cpp: 
> 379: error: 's
> truct stat' has no member named 'st_blksize'
> make[1]: *** [/home/auto-tester/projects/objs/lib/Support/Debug/ 
> raw_ostream.o] E
> rror 1

Fixed, thanks!

Dan





More information about the llvm-commits mailing list