[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