diff options
Diffstat (limited to 'Minecraft.World/ByteArrayOutputStream.cpp')
| -rw-r--r-- | Minecraft.World/ByteArrayOutputStream.cpp | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/Minecraft.World/ByteArrayOutputStream.cpp b/Minecraft.World/ByteArrayOutputStream.cpp new file mode 100644 index 00000000..9296fe5e --- /dev/null +++ b/Minecraft.World/ByteArrayOutputStream.cpp @@ -0,0 +1,80 @@ +#include "stdafx.h" + +#include "ByteArrayOutputStream.h" + +// Creates a new byte array output stream. The buffer capacity is initially 32 bytes, though its size increases if necessary. +ByteArrayOutputStream::ByteArrayOutputStream() +{ + count = 0; + buf = byteArray( 32 ); +} + +//Creates a new byte array output stream, with a buffer capacity of the specified size, in bytes. +//Parameters: +//size - the initial size. +ByteArrayOutputStream::ByteArrayOutputStream(unsigned int size) +{ + count = 0; + buf = byteArray( size ); +} + +ByteArrayOutputStream::~ByteArrayOutputStream() +{ + if (buf.data != NULL) + delete[] buf.data; +} + +//Writes the specified byte to this byte array output stream. +//Parameters: +//b - the byte to be written. +void ByteArrayOutputStream::write(unsigned int b) +{ + // If we will fill the buffer we need to make it bigger + if( count + 1 >= buf.length ) + buf.resize( buf.length * 2 ); + + buf[count] = (byte) b; + count++; +} + +// Writes b.length bytes from the specified byte array to this output stream. +//The general contract for write(b) is that it should have exactly the same effect as the call write(b, 0, b.length). +void ByteArrayOutputStream::write(byteArray b) +{ + write(b, 0, b.length); +} + +//Writes len bytes from the specified byte array starting at offset off to this byte array output stream. +//Parameters: +//b - the data. +//off - the start offset in the data. +//len - the number of bytes to write. +void ByteArrayOutputStream::write(byteArray b, unsigned int offset, unsigned int length) +{ + assert( b.length >= offset + length ); + + // If we will fill the buffer we need to make it bigger + if( count + length >= buf.length ) + buf.resize( max( count + length + 1, buf.length * 2 ) ); + + XMemCpy( &buf[count], &b[offset], length ); + //std::copy( b->data+offset, b->data+offset+length, buf->data + count ); // Or this instead? + + count += length; +} + +//Closing a ByteArrayOutputStream has no effect. +//The methods in this class can be called after the stream has been closed without generating an IOException. +void ByteArrayOutputStream::close() +{ +} + +//Creates a newly allocated byte array. Its size is the current size of this output stream and the valid contents of the buffer have been copied into it. +//Returns: +//the current contents of this output stream, as a byte array. +byteArray ByteArrayOutputStream::toByteArray() +{ + byteArray out(count); + memcpy(out.data,buf.data,count); + return out; +}
\ No newline at end of file |
