Athena IO Library
athena::io::MemoryReader Class Reference

A Stream class for reading data from a memory position. More...

#include <MemoryReader.hpp>

Inheritance diagram for athena::io::MemoryReader:
Inheritance graph
Collaboration diagram for athena::io::MemoryReader:
Collaboration graph

Public Member Functions

 MemoryReader (const void *data, atUint64 length, bool takeOwnership=false, bool globalErr=true)
 This constructor references an existing buffer to read from. More...
 
void seek (atInt64 pos, SeekOrigin origin=SeekOrigin::Current)
 Sets the buffers position relative to the specified position.
It seeks relative to the current position by default. More...
 
atUint64 position () const
 Returns the current position in the stream. More...
 
atUint64 length () const
 Returns whether or not the stream is at the end. More...
 
void setData (const atUint8 *data, atUint64 length, bool takeOwnership=false)
 Sets the buffer to the given one, deleting the current one.
BEWARE: As this deletes the current buffer it WILL cause a loss of data if that was not the intent.
Once you pass the data to setData DO NOT delete the buffer as Stream now owns the address, this is done to keep memory usage down. More...
 
atUint8 * data () const
 Returns a copy of the current buffer.
Changes to the copy do not affect the buffer so it's perfectly safe to directly edit the buffer and use setData to set the new information.
However once you pass the data to setData DO NOT delete the buffer as Stream now owns the address, this is done to keep memory usage down. More...
 
atUint64 readUBytesToBuf (void *buf, atUint64 len)
 Reads a specified number of bytes to user-allocated buffer. More...
 
- Public Member Functions inherited from athena::io::IStreamReader
void seekAlign64 ()
 Sets the buffer's position relative to the next 64-byte aligned position.

 
void seekAlign32 ()
 Sets the buffers position relative to the next 32-byte aligned position.

 
void seekAlign16 ()
 Sets the buffer's position relative to the next 16-byte aligned position.

 
bool atEnd () const
 Returns whether or not the stream is at the end. More...
 
atInt8 readByte ()
 Reads a byte at the current position and advances the current position. More...
 
template<class T >
atInt8 readVal (typename std::enable_if< std::is_same< T, atInt8 >::value >::type *=0)
 
template<class T >
atInt8 readValLittle (typename std::enable_if< std::is_same< T, atInt8 >::value >::type *=0)
 
template<class T >
atInt8 readValBig (typename std::enable_if< std::is_same< T, atInt8 >::value >::type *=0)
 
atUint8 readUByte ()
 Reads a byte at the current position and advances the current position. More...
 
template<class T >
atUint8 readVal (typename std::enable_if< std::is_same< T, atUint8 >::value >::type *=0)
 
template<class T >
atUint8 readValLittle (typename std::enable_if< std::is_same< T, atUint8 >::value >::type *=0)
 
template<class T >
atUint8 readValBig (typename std::enable_if< std::is_same< T, atUint8 >::value >::type *=0)
 
std::unique_ptr< atInt8[]> readBytes (atUint64 length)
 Reads a byte at the current position and advances the current position. More...
 
std::unique_ptr< atUint8[]> readUBytes (atUint64 length)
 Reads a byte at the current position and advances the current position. More...
 
atUint64 readBytesToBuf (void *buf, atUint64 len)
 Attempts to read a fixed length of data into a pre-allocated buffer. More...
 
atInt16 readInt16 ()
 Reads a Int16 and swaps to endianness specified by setEndian depending on platform and advances the current position. More...
 
template<class T >
atInt16 readVal (typename std::enable_if< std::is_same< T, atInt16 >::value >::type *=0)
 
atInt16 readInt16Little ()
 Reads a Int16 and swaps against little endianness depending on platform and advances the current position. More...
 
template<class T >
atInt16 readValLittle (typename std::enable_if< std::is_same< T, atInt16 >::value >::type *=0)
 
atInt16 readInt16Big ()
 Reads a Int16 and swaps against big endianness depending on platform and advances the current position. More...
 
template<class T >
atInt16 readValBig (typename std::enable_if< std::is_same< T, atInt16 >::value >::type *=0)
 
atUint16 readUint16 ()
 Reads a Uint16 and swaps to endianness specified by setEndian depending on platform and advances the current position. More...
 
template<class T >
atUint16 readVal (typename std::enable_if< std::is_same< T, atUint16 >::value >::type *=0)
 
atUint16 readUint16Little ()
 Reads a Uint16 and swaps against little endianness depending on platform and advances the current position. More...
 
template<class T >
atUint16 readValLittle (typename std::enable_if< std::is_same< T, atUint16 >::value >::type *=0)
 
atUint16 readUint16Big ()
 Reads a Uint16 and swaps against big endianness depending on platform and advances the current position. More...
 
template<class T >
atUint16 readValBig (typename std::enable_if< std::is_same< T, atUint16 >::value >::type *=0)
 
atInt32 readInt32 ()
 Reads a Int32 and swaps to endianness specified by setEndian depending on platform and advances the current position. More...
 
template<class T >
atInt32 readVal (typename std::enable_if< std::is_same< T, atInt32 >::value >::type *=0)
 
atInt32 readInt32Little ()
 Reads a Int32 and swaps against little endianness depending on platform and advances the current position. More...
 
template<class T >
atInt32 readValLittle (typename std::enable_if< std::is_same< T, atInt32 >::value >::type *=0)
 
atInt32 readInt32Big ()
 Reads a Int32 and swaps against big endianness depending on platform and advances the current position. More...
 
template<class T >
atInt32 readValBig (typename std::enable_if< std::is_same< T, atInt32 >::value >::type *=0)
 
atUint32 readUint32 ()
 Reads a Uint32 and swaps to endianness specified by setEndian depending on platform and advances the current position. More...
 
template<class T >
atUint32 readVal (typename std::enable_if< std::is_same< T, atUint32 >::value >::type *=0)
 
atUint32 readUint32Little ()
 Reads a Uint32 and swaps against little endianness depending on platform and advances the current position. More...
 
template<class T >
atInt32 readValLittle (typename std::enable_if< std::is_same< T, atUint32 >::value >::type *=0)
 
atUint32 readUint32Big ()
 Reads a Uint32 and swaps against big endianness depending on platform and advances the current position. More...
 
template<class T >
atUint32 readValBig (typename std::enable_if< std::is_same< T, atUint32 >::value >::type *=0)
 
atInt64 readInt64 ()
 Reads a Int64 and swaps to endianness specified by setEndian depending on platform and advances the current position. More...
 
template<class T >
atInt64 readVal (typename std::enable_if< std::is_same< T, atInt64 >::value >::type *=0)
 
atInt64 readInt64Little ()
 Reads a Int64 and swaps against little endianness depending on platform and advances the current position. More...
 
template<class T >
atInt64 readValLittle (typename std::enable_if< std::is_same< T, atInt64 >::value >::type *=0)
 
atInt64 readInt64Big ()
 Reads a Int64 and swaps against big endianness depending on platform and advances the current position. More...
 
template<class T >
atInt64 readValBig (typename std::enable_if< std::is_same< T, atInt64 >::value >::type *=0)
 
atUint64 readUint64 ()
 Reads a Uint64 and swaps to endianness specified by setEndian depending on platform and advances the current position. More...
 
template<class T >
atUint64 readVal (typename std::enable_if< std::is_same< T, atUint64 >::value >::type *=0)
 
atUint64 readUint64Little ()
 Reads a Uint64 and swaps against little endianness depending on platform and advances the current position. More...
 
template<class T >
atUint64 readValLittle (typename std::enable_if< std::is_same< T, atUint64 >::value >::type *=0)
 
atUint64 readUint64Big ()
 Reads a Uint64 and swaps against big endianness depending on platform and advances the current position. More...
 
template<class T >
atUint64 readValBig (typename std::enable_if< std::is_same< T, atUint64 >::value >::type *=0)
 
float readFloat ()
 Reads a float and swaps to endianness specified by setEndian depending on platform and advances the current position. More...
 
template<class T >
float readVal (typename std::enable_if< std::is_same< T, float >::value >::type *=0)
 
float readFloatLittle ()
 Reads a float and swaps against little endianness depending on platform and advances the current position. More...
 
template<class T >
float readValLittle (typename std::enable_if< std::is_same< T, float >::value >::type *=0)
 
float readFloatBig ()
 Reads a float and swaps against big endianness depending on platform and advances the current position. More...
 
template<class T >
float readValBig (typename std::enable_if< std::is_same< T, float >::value >::type *=0)
 
double readDouble ()
 Reads a double and swaps to endianness specified by setEndian depending on platform and advances the current position. More...
 
template<class T >
double readVal (typename std::enable_if< std::is_same< T, double >::value >::type *=0)
 
double readDoubleLittle ()
 Reads a double and swaps against little endianness depending on platform and advances the current position. More...
 
template<class T >
double readValLittle (typename std::enable_if< std::is_same< T, double >::value >::type *=0)
 
double readDoubleBig ()
 Reads a double and swaps against big endianness depending on platform and advances the current position. More...
 
template<class T >
double readValBig (typename std::enable_if< std::is_same< T, double >::value >::type *=0)
 
bool readBool ()
 Reads a bool and advances the current position. More...
 
template<class T >
bool readVal (typename std::enable_if< std::is_same< T, bool >::value >::type *=0)
 
template<class T >
bool readValLittle (typename std::enable_if< std::is_same< T, bool >::value >::type *=0)
 
template<class T >
bool readValBig (typename std::enable_if< std::is_same< T, bool >::value >::type *=0)
 
atVec2f readVec2f ()
 Reads an atVec2f (8 bytes), swaps to endianness specified by setEndian depending on platform and advances the current position. More...
 
template<class T >
atVec2f readVal (typename std::enable_if< std::is_same< T, atVec2f >::value >::type *=0)
 
atVec2f readVec2fLittle ()
 Reads an atVec2f (8 bytes), swaps against little endianness depending on platform and advances the current position. More...
 
template<class T >
atVec2f readValLittle (typename std::enable_if< std::is_same< T, atVec2f >::value >::type *=0)
 
atVec2f readVec2fBig ()
 Reads an atVec2f (8 bytes), swaps against big endianness depending on platform and advances the current position. More...
 
template<class T >
atVec2f readValBig (typename std::enable_if< std::is_same< T, atVec2f >::value >::type *=0)
 
atVec3f readVec3f ()
 Reads an atVec3f (12 bytes), swaps to endianness specified by setEndian depending on platform and advances the current position. More...
 
template<class T >
atVec3f readVal (typename std::enable_if< std::is_same< T, atVec3f >::value >::type *=0)
 
atVec3f readVec3fLittle ()
 Reads an atVec3f (12 bytes), swaps against little endianness depending on platform and advances the current position. More...
 
template<class T >
atVec3f readValLittle (typename std::enable_if< std::is_same< T, atVec3f >::value >::type *=0)
 
atVec3f readVec3fBig ()
 Reads an atVec3f (12 bytes), swaps against big endianness depending on platform and advances the current position. More...
 
template<class T >
atVec3f readValBig (typename std::enable_if< std::is_same< T, atVec3f >::value >::type *=0)
 
atVec4f readVec4f ()
 Reads an atVec4f (16 bytes), swaps to endianness specified by setEndian depending on platform and advances the current position. More...
 
template<class T >
atVec4f readVal (typename std::enable_if< std::is_same< T, atVec4f >::value >::type *=0)
 
atVec4f readVec4fLittle ()
 Reads an atVec4f (16 bytes), swaps against little endianness depending on platform and advances the current position. More...
 
template<class T >
atVec4f readValLittle (typename std::enable_if< std::is_same< T, atVec4f >::value >::type *=0)
 
atVec4f readVec4fBig ()
 Reads an atVec4f (16 bytes), swaps against big endianness depending on platform and advances the current position. More...
 
template<class T >
atVec4f readValBig (typename std::enable_if< std::is_same< T, atVec4f >::value >::type *=0)
 
atVec2d readVec2d ()
 Reads an atVec2d (16 bytes), swaps to endianness specified by setEndian depending on platform and advances the current position. More...
 
template<class T >
atVec2d readVal (typename std::enable_if< std::is_same< T, atVec2d >::value >::type *=0)
 
atVec2d readVec2dLittle ()
 Reads an atVec2d (16 bytes), swaps against little endianness depending on platform and advances the current position. More...
 
template<class T >
atVec2d readValLittle (typename std::enable_if< std::is_same< T, atVec2d >::value >::type *=0)
 
atVec2d readVec2dBig ()
 Reads an atVec2d (16 bytes), swaps against big endianness depending on platform and advances the current position. More...
 
template<class T >
atVec2d readValBig (typename std::enable_if< std::is_same< T, atVec2d >::value >::type *=0)
 
atVec3d readVec3d ()
 Reads an atVec3d (24 bytes), swaps to endianness specified by setEndian depending on platform and advances the current position. More...
 
template<class T >
atVec3d readVal (typename std::enable_if< std::is_same< T, atVec3d >::value >::type *=0)
 
atVec3d readVec3dLittle ()
 Reads an atVec3d (24 bytes), swaps against little endianness depending on platform and advances the current position. More...
 
template<class T >
atVec3d readValLittle (typename std::enable_if< std::is_same< T, atVec3d >::value >::type *=0)
 
atVec3d readVec3dBig ()
 Reads an atVec3d (24 bytes), swaps against big endianness depending on platform and advances the current position. More...
 
template<class T >
atVec3d readValBig (typename std::enable_if< std::is_same< T, atVec3d >::value >::type *=0)
 
atVec4d readVec4d ()
 Reads an atVec4d (32 bytes), swaps to endianness specified by setEndian depending on platform and advances the current position. More...
 
template<class T >
atVec4d readVal (typename std::enable_if< std::is_same< T, atVec4d >::value >::type *=0)
 
atVec4d readVec4dLittle ()
 Reads an atVec4d (32 bytes), swaps against little endianness depending on platform and advances the current position. More...
 
template<class T >
atVec4d readValLittle (typename std::enable_if< std::is_same< T, atVec4d >::value >::type *=0)
 
atVec4d readVec4dBig ()
 Reads an atVec4d (32 bytes), swaps against big endianness depending on platform and advances the current position. More...
 
template<class T >
atVec4d readValBig (typename std::enable_if< std::is_same< T, atVec4d >::value >::type *=0)
 
std::string readWStringAsString (atInt32 fixedLen=-1)
 Reads a wide-char string (using endianness from setEndian), converts to UTF8 and advances the position in the file. More...
 
std::string readWStringAsStringLittle (atInt32 fixedLen=-1)
 Reads a wide-char string (against little-endian), converts to UTF8 and advances the position in the file. More...
 
std::string readWStringAsStringBig (atInt32 fixedLen=-1)
 Reads a wide-char string (against big-endian), converts to UTF8 and advances the position in the file. More...
 
std::string readString (atInt32 fixedLen=-1)
 Reads a string and advances the position in the file. More...
 
template<class T >
std::string readVal (typename std::enable_if< std::is_same< T, std::string >::value >::type *=0)
 
std::wstring readWString (atInt32 fixedLen=-1)
 Reads a wstring and advances the position in the file. More...
 
template<class T >
std::wstring readVal (typename std::enable_if< std::is_same< T, std::wstring >::value >::type *=0)
 
std::wstring readWStringLittle (atInt32 fixedLen=-1)
 Reads a wstring assuming little-endian characters and advances the position in the file. More...
 
template<class T >
std::wstring readValLittle (typename std::enable_if< std::is_same< T, std::wstring >::value >::type *=0)
 
std::wstring readWStringBig (atInt32 fixedLen=-1)
 Reads a wstring assuming big-endian characters and advances the position in the file. More...
 
template<class T >
std::wstring readValBig (typename std::enable_if< std::is_same< T, std::wstring >::value >::type *=0)
 
template<class T >
void enumerate (std::vector< T > &vector, size_t count, typename std::enable_if< std::is_arithmetic< T >::value||std::is_same< T, atVec2f >::value||std::is_same< T, atVec3f >::value||std::is_same< T, atVec4f >::value >::type *=0)
 Performs automatic std::vector enumeration reads using numeric type T. More...
 
template<class T >
void enumerateLittle (std::vector< T > &vector, size_t count, typename std::enable_if< std::is_arithmetic< T >::value||std::is_same< T, atVec2f >::value||std::is_same< T, atVec3f >::value||std::is_same< T, atVec4f >::value >::type *=0)
 Performs automatic std::vector enumeration reads using numeric type T. More...
 
template<class T >
void enumerateBig (std::vector< T > &vector, size_t count, typename std::enable_if< std::is_arithmetic< T >::value||std::is_same< T, atVec2f >::value||std::is_same< T, atVec3f >::value||std::is_same< T, atVec4f >::value >::type *=0)
 Performs automatic std::vector enumeration reads using numeric type T. More...
 
template<class T >
void enumerate (std::vector< T > &vector, size_t count, typename std::enable_if<!std::is_arithmetic< T >::value &&!std::is_same< T, atVec2f >::value &&!std::is_same< T, atVec3f >::value &&!std::is_same< T, atVec4f >::value >::type *=0)
 Performs automatic std::vector enumeration reads using non-numeric type T. More...
 
template<class T >
void enumerate (std::vector< T > &vector, size_t count, std::function< void(IStreamReader &, T &)> readf)
 Performs lambda-assisted std::vector enumeration reads using type T. More...
 
- Public Member Functions inherited from athena::io::IStream
void setEndian (Endian endian)
 
Endian endian () const
 
bool isBigEndian () const
 
bool isLittleEndian () const
 
bool hasError () const
 

Protected Attributes

const void * m_data = nullptr
 
atUint64 m_length = 0
 
atUint64 m_position = 0
 
bool m_owns = false
 
bool m_globalErr = true
 
- Protected Attributes inherited from athena::io::IStream
bool m_hasError = false
 
Endian m_endian = BigEndian
 

Additional Inherited Members

- Protected Member Functions inherited from athena::io::IStream
void setError ()
 

Detailed Description

A Stream class for reading data from a memory position.

A Class for reading binary data from a file or memory stream, all work is done using a memory buffer, and not read directly from the disk this allows for fast, flexible code as well as the ability to quickly modify data

See also
Stream

Definition at line 21 of file MemoryReader.hpp.

Constructor & Destructor Documentation

athena::io::MemoryReader::MemoryReader ( const void *  data,
atUint64  length,
bool  takeOwnership = false,
bool  globalErr = true 
)

This constructor references an existing buffer to read from.

Parameters
dataThe existing buffer
lengthThe length of the existing buffer
takeOwnershipMemory will be freed with the reader if set

Member Function Documentation

atUint8* athena::io::MemoryReader::data ( ) const

Returns a copy of the current buffer.
Changes to the copy do not affect the buffer so it's perfectly safe to directly edit the buffer and use setData to set the new information.
However once you pass the data to setData DO NOT delete the buffer as Stream now owns the address, this is done to keep memory usage down.

Returns
Uint8* The copy of the buffer.

Here is the caller graph for this function:

atUint64 athena::io::MemoryReader::length ( ) const
inlinevirtual

Returns whether or not the stream is at the end.

Returns
bool True if at end; False otherwise.

Implements athena::io::IStreamReader.

Definition at line 54 of file MemoryReader.hpp.

Here is the call graph for this function:

atUint64 athena::io::MemoryReader::position ( ) const
inlinevirtual

Returns the current position in the stream.

Returns
Int64 The current position in the stream.

Implements athena::io::IStreamReader.

Definition at line 47 of file MemoryReader.hpp.

atUint64 athena::io::MemoryReader::readUBytesToBuf ( void *  buf,
atUint64  len 
)
virtual

Reads a specified number of bytes to user-allocated buffer.

Parameters
bufUser-allocated buffer pointer
lenLength to read
Returns
Number of bytes read

Implements athena::io::IStreamReader.

Here is the caller graph for this function:

void athena::io::MemoryReader::seek ( atInt64  pos,
SeekOrigin  origin = SeekOrigin::Current 
)
virtual

Sets the buffers position relative to the specified position.
It seeks relative to the current position by default.

Parameters
positionwhere in the buffer to seek
originThe Origin to seek
See also
SeekOrigin

Implements athena::io::IStreamReader.

void athena::io::MemoryReader::setData ( const atUint8 *  data,
atUint64  length,
bool  takeOwnership = false 
)

Sets the buffer to the given one, deleting the current one.
BEWARE: As this deletes the current buffer it WILL cause a loss of data if that was not the intent.
Once you pass the data to setData DO NOT delete the buffer as Stream now owns the address, this is done to keep memory usage down.

Parameters
dataThe new buffer.
lengthThe length of the new buffer.
takeOwnershipMemory will be freed with the reader if set
Exceptions
IOException

Here is the caller graph for this function:


The documentation for this class was generated from the following file: