Public Member Functions |
| CBlobT () |
| Default constructor - makes new Blob ready to accept any data.
|
| CBlobT (const OnTransfer &ot) |
| Take ownership constructor.
|
| ~CBlobT () |
| Destructor - ensures that allocated memory (if any) is freed.
|
void | CheckIdx (size_t index) const |
| Check the validity of item index (only in debug mode)
|
T * | Data () |
| Return pointer to the first data item - non-const version.
|
const T * | Data () const |
| Return pointer to the first data item - const version.
|
T * | Data (size_t index) |
| Return pointer to the index-th data item - non-const version.
|
const T * | Data (size_t index) const |
| Return pointer to the index-th data item - const version.
|
size_t | Size () const |
| Return number of items in the Blob.
|
size_t | MaxSize () const |
| Return total number of items that can fit in the Blob without buffer reallocation.
|
size_t | GetReserve () const |
| Return number of additional items that can fit in the Blob without buffer reallocation.
|
T * | GrowSizeNC (size_t num_items) |
| Grow number of data items in Blob by given number - doesn't construct items.
|
T * | MakeFreeSpace (size_t num_items) |
| Ensures that given number of items can be added to the end of Blob.
|
OnTransfer | Transfer () |
| ByteBlob () |
| default constructor - initializes empty blob
|
| ByteBlob (const ByteBlob &src) |
| copy constructor
|
| ByteBlob (BlobHeader *const &src) |
| move constructor - take ownership of blob data
|
| ~ByteBlob () |
| destructor
|
bool | IsEmpty () const |
| return true if blob doesn't contain valid data
|
size_t | Length () const |
| return the number of valid data bytes in the blob
|
size_t | Capacity () const |
| return the current blob capacity in bytes
|
byte * | Begin () |
| return pointer to the first byte of data - non-const version
|
const byte * | Begin () const |
| return pointer to the first byte of data - const version
|
void | Clear () |
| invalidate blob's data - doesn't free buffer
|
void | Free () |
| free the blob's memory
|
void | AppendRaw (const void *p, size_t num_bytes) |
| append new bytes at the end of existing data bytes - reallocates if necessary
|
void | AppendRaw (const ByteBlob &src) |
| append bytes from given source blob to the end of existing data bytes - reallocates if necessary
|
byte * | Prepare (size_t num_bytes) |
| Reallocate if there is no free space for num_bytes bytes.
|
byte * | Append (size_t num_bytes) |
| Increase Length() by num_bytes.
|
void | SmartAlloc (size_t new_size) |
| reallocate blob data if needed
|
void | FixTail () const |
| fixing the four bytes at the end of blob data - useful when blob is used to hold string
|
Additional Inherited Members |
void | InitEmpty () |
| initialize the empty blob
|
void | Init (BlobHeader *src) |
| initialize blob by attaching it to the given header followed by data
|
BlobHeader & | Hdr () |
| blob header accessor - use it rather than using the pointer arithmetics directly - non-const version
|
const BlobHeader & | Hdr () const |
| blob header accessor - use it rather than using the pointer arithmetics directly - const version
|
size_t & | LengthRef () |
| return reference to the actual blob size - used when the size needs to be modified
|
static BlobHeader * | RawAlloc (size_t num_bytes) |
| all allocation should happen here
|
static BlobHeader * | Zero () |
| Return header pointer to the static BlobHeader with both items and capacity containing zero.
|
static size_t | AllocPolicy (size_t min_alloc) |
| simple allocation policy - can be optimized later
|
static void | RawFree (BlobHeader *p) |
| all deallocations should happen here
|
union { |
byte * data |
| ptr to the first byte of data
|
BlobHeader * header |
| ptr just after the BlobHeader holding items and capacity
|
}; | |
| type used as class member
|
template<typename T>
class CBlobT< T >
Blob - simple dynamic T array.
T (template argument) is a placeholder for any type. T can be any integral type, pointer, or structure. Using Blob instead of just plain C array simplifies the resource management in several ways:
- When adding new item(s) it automatically grows capacity if needed.
- When variable of type Blob comes out of scope it automatically frees the data buffer.
- Takes care about the actual data size (number of used items).
- Dynamically constructs only used items (as opposite of static array which constructs all items)
Definition at line 308 of file blob.hpp.