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: 2018-06-04
Help improve this article
Was this article helpful?
(or select a word/phrase and press Ctrl+Enter)