mirror of
https://github.com/RPCSX/llvm.git
synced 2025-01-20 19:25:05 +00:00
enhance raw_svector_ostream::write_impl to work with unbuffered streams,
which may call write_impl on things that are not the usual buffer. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@96209 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
efbdaa6463
commit
17f26b4fd2
@ -574,12 +574,18 @@ void raw_svector_ostream::resync() {
|
||||
}
|
||||
|
||||
void raw_svector_ostream::write_impl(const char *Ptr, size_t Size) {
|
||||
assert(Ptr == OS.end() && OS.size() + Size <= OS.capacity() &&
|
||||
"Invalid write_impl() call!");
|
||||
|
||||
// We don't need to copy the bytes, just commit the bytes to the
|
||||
// SmallVector.
|
||||
OS.set_size(OS.size() + Size);
|
||||
// If we're writing bytes from the end of the buffer into the smallvector, we
|
||||
// don't need to copy the bytes, just commit the bytes because they are
|
||||
// already in the right place.
|
||||
if (Ptr == OS.end()) {
|
||||
assert(OS.size() + Size <= OS.capacity() && "Invalid write_impl() call!");
|
||||
OS.set_size(OS.size() + Size);
|
||||
} else {
|
||||
assert(GetNumBytesInBuffer() == 0 &&
|
||||
"Should be writing from buffer if some bytes in it");
|
||||
// Otherwise, do copy the bytes.
|
||||
OS.append(Ptr, Ptr+Size);
|
||||
}
|
||||
|
||||
// Grow the vector if necessary.
|
||||
if (OS.capacity() - OS.size() < 64)
|
||||
|
Loading…
x
Reference in New Issue
Block a user