diff options
author | Daniel Dunbar <daniel@zuster.org> | 2009-03-16 22:55:06 +0000 |
---|---|---|
committer | Daniel Dunbar <daniel@zuster.org> | 2009-03-16 22:55:06 +0000 |
commit | cf2a2c6a26427733f31dd539c6ee6486ea191da2 (patch) | |
tree | fb38cd0aa092459d67a629f2ae107cae8f271320 /lib/Support | |
parent | 4752bd3b40f4c4a15ca9eeb5122e405b17c87b3d (diff) | |
download | external_llvm-cf2a2c6a26427733f31dd539c6ee6486ea191da2.zip external_llvm-cf2a2c6a26427733f31dd539c6ee6486ea191da2.tar.gz external_llvm-cf2a2c6a26427733f31dd539c6ee6486ea191da2.tar.bz2 |
raw_ostream: Lift out flush_nonempty.
- Flush a known non-empty buffers; enforces the interface to
flush_impl and kills off HandleFlush (which I saw no reason to be
an inline method, Chris?).
- Clarify invariant that flush_impl is only called with OutBufCur >
OutBufStart.
- This also cleary collects all places where we have to deal with the
buffer possibly not existing.
- A few more comments and fixing the unbuffered behavior remain in
this commit sequence.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@67057 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support')
-rw-r--r-- | lib/Support/raw_ostream.cpp | 41 |
1 files changed, 21 insertions, 20 deletions
diff --git a/lib/Support/raw_ostream.cpp b/lib/Support/raw_ostream.cpp index 3c24242..bbd1994 100644 --- a/lib/Support/raw_ostream.cpp +++ b/lib/Support/raw_ostream.cpp @@ -116,17 +116,27 @@ raw_ostream &raw_ostream::operator<<(const void *P) { return write(CurPtr, EndPtr-CurPtr); } +void raw_ostream::flush_nonempty() { + assert(OutBufCur > OutBufStart && "Invalid call to flush_nonempty."); + flush_impl(); + OutBufCur = OutBufStart; +} + raw_ostream &raw_ostream::write(unsigned char C) { - if (OutBufCur >= OutBufEnd) - flush_impl(); + if (!OutBufStart) + SetBufferSize(4096); + else if (OutBufCur >= OutBufEnd) + flush_nonempty(); *OutBufCur++ = C; return *this; } raw_ostream &raw_ostream::write(const char *Ptr, unsigned Size) { - if (OutBufCur+Size > OutBufEnd) - flush_impl(); + if (!OutBufStart) + SetBufferSize(4096); + else if (OutBufCur+Size > OutBufEnd) + flush_nonempty(); // Handle short strings specially, memcpy isn't very good at very short // strings. @@ -153,14 +163,14 @@ raw_ostream &raw_ostream::write(const char *Ptr, unsigned Size) { Ptr += NumToEmit; Size -= NumToEmit; OutBufCur = OutBufStart + NumToEmit; - flush_impl(); + flush_nonempty(); } break; } OutBufCur += Size; if (Unbuffered) - flush_impl(); + flush(); return *this; } @@ -260,11 +270,8 @@ raw_fd_ostream::~raw_fd_ostream() { void raw_fd_ostream::flush_impl() { assert (FD >= 0 && "File already closed."); - if (OutBufCur-OutBufStart) { - pos += (OutBufCur - OutBufStart); - ::write(FD, OutBufStart, OutBufCur-OutBufStart); - } - HandleFlush(); + pos += (OutBufCur - OutBufStart); + ::write(FD, OutBufStart, OutBufCur-OutBufStart); } void raw_fd_ostream::close() { @@ -319,9 +326,7 @@ raw_os_ostream::~raw_os_ostream() { /// subclasses. This outputs the currently buffered data and resets the /// buffer to empty. void raw_os_ostream::flush_impl() { - if (OutBufCur-OutBufStart) - OS.write(OutBufStart, OutBufCur-OutBufStart); - HandleFlush(); + OS.write(OutBufStart, OutBufCur-OutBufStart); } //===----------------------------------------------------------------------===// @@ -336,9 +341,7 @@ raw_string_ostream::~raw_string_ostream() { /// subclasses. This outputs the currently buffered data and resets the /// buffer to empty. void raw_string_ostream::flush_impl() { - if (OutBufCur-OutBufStart) - OS.append(OutBufStart, OutBufCur-OutBufStart); - HandleFlush(); + OS.append(OutBufStart, OutBufCur-OutBufStart); } //===----------------------------------------------------------------------===// @@ -353,8 +356,6 @@ raw_svector_ostream::~raw_svector_ostream() { /// subclasses. This outputs the currently buffered data and resets the /// buffer to empty. void raw_svector_ostream::flush_impl() { - if (OutBufCur-OutBufStart) - OS.append(OutBufStart, OutBufCur); - HandleFlush(); + OS.append(OutBufStart, OutBufCur); } |