Unigine::Blob Class
Header: | #include <UnigineStreams.h> |
Inherits: | Stream |
This class is used to store data in the memory (unlike File which is stored on the disk). The blob uses either an Unigine allocator (if #define USE_MEMORY is set, by default) or a system allocator.
Example#
The code below illustrates the following process:
- Packing data to a blob and saving compressed data to a file
- Reading and uncompressing data from the file to the destination blob
- Reading data from the destination blob
// creating a source blob to store data
BlobPtr blob1 = Blob::create();
// creating a file to save our blob's data to
FilePtr file = File::create("test.dat", "w+");
// clearing a blob
blob1->clear();
// writing data to a blob (prefix, vector and postfix)
blob1->writeChar('B');
blob1->writeVec3(Math::vec3(0.1f, 0.2f, 0.3f));
blob1->writeChar('E');
// compressing blob's data with low compression and saving it to the file
blob1->compress(file->getStream(), 0);
// closing the file
file->close();
// clearing a blob
blob1.clear();
// opening the data file for reading
file->open("test.dat", "r");
// creating a second blob
BlobPtr blob2 = Blob::create();
// reading and decompressing data from the file
blob2->decompress(file->getStream());
// closing the file
file->close();
// setting current position to the beginning of the blob
blob2->seekSet(0);
// reading data from a blob (prefix, vector and postfix)
char pref = blob2->readChar();
Math::vec3 v = blob2->readVec3();
char postf = blob2->readChar();
// reporting the decoded blob data and SHA1 checksum
Log::message("\nDESTINATION: [%c] vec(%f, %f, %f) [%c] - SHA1 checksum (%s)", pref, v.x, v.y, v.z, postf, blob2->getSHA1().get());
// clearing a blob
blob2.clear();
Blob Class
Members
static BlobPtr create ( size_t size = 0 )
Constructor. Creates a new blob of the specified size.Arguments
- size_t size - Blob size.
Ptr<Blob> cast( const Ptr<Stream> & stream )
Casts a Blob out of the Stream instance.Arguments
Return value
Pointer to Blob.Blob.void set( size_t offset, unsigned char value )
Sets the value of the specified byte in the blob.Arguments
- size_t offset - The offset in the blob.
- unsigned char value - The byte value.
unsigned char get( size_t offset )
Returns the value of the specified byte in the blob.Arguments
- size_t offset - The offset, in bytes.
Return value
The byte value.int getc( )
Gets a next symbol from the blob.Return value
Character read from the blob.String getCRC32( )
Returns the 32-bit CRC checksum.Return value
The 32-bit CRC checksum.void setData( unsigned char * data, size_t size )
Sets new data to the Blob instance.You should manage the previously stored data manually.
Arguments
- unsigned char * data - Data to set to the Blob instance.
- size_t size - The size of the blob.
unsigned char * getData( )
Returns the current blob data.Return value
Blob data.String getMD5( )
Returns a 128-bit MD5 checksum.Return value
128-bit MD5 checksum.String getSHA1( )
Returns a 160-bit SHA1 checksum.Return value
160-bit SHA1 checksum.String getSHA256( )
Returns a 256-bit SHA256 checksum.Return value
256-bit SHA256 checksum.size_t getSize( )
Returns the current blob size.Return value
Blob size.void allocate( size_t size )
Allocates the required memory without resizing the blob.The blob will be resized dynamically when the allocated memory is filled.
Arguments
- size_t size - Size of the allocated memory in bytes.
void clear( )
Clears the blob size to 0.int compress( const Ptr<Stream> & dest, int quality )
Compresses the blob and writes it into the given stream.This method uses zlib compression which is better than Lz4 (see the compressLz4() method), but significantly slower.
Arguments
- const Ptr<Stream> & dest - Destination stream.
- int quality - Compression quality (0 is for fast compression, 1 is for a small size).
Return value
1 if the data is compressed successfully; otherwise, 0.int compressLz4( const Ptr<Stream> & dest, int quality )
Compresses the blob with Lz4 algorithm and writes it into the given stream.Arguments
- const Ptr<Stream> & dest - Destination stream.
- int quality - Compression quality (0 is for fast compression, 1 is for a small size).
Return value
1 if the data is successfully compressed; otherwise, 0.int decode( const char * src )
Decodes a base64 encoded string into the blob.Arguments
- const char * src - Source base64 encoded string.
Return value
Returns 1 if the data is decoded successfully; otherwise, 0.int decodeZBase32( const char * src )
Decodes a Zbase32 encoded string into the blob.Arguments
- const char * src - Source Zbase32 encoded string.
Return value
Returns 1 if the data is decoded successfully; otherwise, 0.int decompress( const Ptr<Stream> & src )
Reads the compressed blob from a stream and decompresses it.Arguments
- const Ptr<Stream> & src - Source stream to read data from.
Return value
1 if the blob is decompressed successfully; otherwise, 0.int decompressLz4( const Ptr<Stream> & src )
Reads and decompresses a previously compressed blob with Lz4 algorithm from a given stream.Arguments
- const Ptr<Stream> & src - Source stream to read data from.
Return value
1 if the blob is successfully decompressed; otherwise, 0.String encode( )
Encodes the blob into the base64 encoded string.Return value
Base64 encoded string.String encodeZBase32( )
Encodes the blob into the ZBase32 encoded string.Return value
ZBase32 encoded string.int eof( )
Tests if the end of the blob has been reached.Return value
Returns 1 if the end of the blob is reached; otherwise, 0.int flush( )
Flushes the blob.Return value
Returns 1 if the blob is flushed successfully; otherwise, 0.void reserve( size_t size )
Reserves the blob, i.e. allocates (size * 1.5) bytes without resizing the blob. It will be resized dynamically when the allocated memory is filled.Arguments
- size_t size - Size of the allocated memory.
void resize( size_t size )
Allocates the required memory and resizes the blob.Arguments
- size_t size - Size of the blob in bytes.
int seekCur( size_t offset )
Seeks to position relative to the current offset.Arguments
- size_t offset - Offset in bytes from the current position of indicator.
Return value
Returns 1 if the blob position indicator is set successfully; otherwise, 0.int seekEnd( size_t offset )
Seeks to position relative to the end of the blob.Arguments
- size_t offset - Offset in bytes from the end of the blob.
Return value
Returns 1 if the blob position indicator is set successfully; otherwise, 0.int seekSet( size_t offset )
Seeks to position relative to the start of the blob.Arguments
- size_t offset - Offset in bytes from the beginning of the blob.
Return value
Returns 1 if the blob position indicator is set successfully; otherwise, 0.size_t tell( )
Gets the current blob offset position indicator.Return value
Returns the current blob offset.Last update:
2020-01-14
Help improve this article
Was this article helpful?
(or select a word/phrase and press Ctrl+Enter)