123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- //-----------------------------------------------------------------------------
- // Copyright (c) 2012 GarageGames, LLC
- //
- // Permission is hereby granted, free of charge, to any person obtaining a copy
- // of this software and associated documentation files (the "Software"), to
- // deal in the Software without restriction, including without limitation the
- // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
- // sell copies of the Software, and to permit persons to whom the Software is
- // furnished to do so, subject to the following conditions:
- //
- // The above copyright notice and this permission notice shall be included in
- // all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- // IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
- // FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
- // AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
- // LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
- // FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
- // IN THE SOFTWARE.
- //-----------------------------------------------------------------------------
- #ifndef _MEMSTREAM_H_
- #define _MEMSTREAM_H_
- #ifndef _STREAM_H_
- #include "core/stream/stream.h"
- #endif
- /// The MemStream class is used to read and write to a memory buffer.
- class MemStream : public Stream
- {
- typedef Stream Parent;
- protected:
- /// The amount to grow the buffer when we run out of
- /// space writing to the stream.
- U32 mGrowSize;
- /// The actual size of the memory buffer. It is always
- /// greater than or equal to the mStreamSize.
- U32 mBufferSize;
- /// The size of the data in the stream. It is always
- /// less than or equal to the mBufferSize.
- U32 mStreamSize;
- /// The memory buffer.
- void *mBufferBase;
- /// If true the memory is owned by the steam and it
- /// will be deleted in the destructor.
- bool mOwnsMemory;
- ///
- U32 mInstCaps;
- /// Our current read/write position within the buffer.
- U32 mCurrentPosition;
- public:
- /// This constructs an empty memory stream that will grow
- /// in increments as needed.
- MemStream( U32 growSize,
- bool allowRead = true,
- bool allowWrite = true );
- /// This constructs the stream with a fixed size memory buffer. If
- /// buffer is null then it will be allocated for you.
- MemStream( U32 bufferSize,
- void *buffer,
- bool allowRead = true,
- bool allowWrite = true );
- /// The destructor.
- virtual ~MemStream();
- protected:
- // Stream
- bool _read( const U32 in_numBytes, void *out_pBuffer );
- bool _write( const U32 in_numBytes, const void *in_pBuffer );
- public:
- // Stream
- bool hasCapability( const Capability caps ) const;
- U32 getPosition() const;
- bool setPosition( const U32 in_newPosition );
- U32 getStreamSize();
- /// Returns the memory buffer.
- void *getBuffer() { return mBufferBase; }
- const void *getBuffer() const { return mBufferBase; }
- /// Takes the memory buffer reseting the stream.
- void *takeBuffer();
- };
- #endif //_MEMSTREAM_H_
|