diff options
-rw-r--r-- | src/misc/blob.hpp | 65 | ||||
-rw-r--r-- | src/misc/str.hpp | 4 |
2 files changed, 31 insertions, 38 deletions
diff --git a/src/misc/blob.hpp b/src/misc/blob.hpp index bcca582b0..6c8db42fb 100644 --- a/src/misc/blob.hpp +++ b/src/misc/blob.hpp @@ -115,7 +115,7 @@ protected: } /** return reference to the actual blob size - used when the size needs to be modified */ - FORCEINLINE uint& RawSizeRef() + FORCEINLINE uint& LengthRef() { return Hdr().items; }; @@ -124,29 +124,29 @@ public: /** return true if blob doesn't contain valid data */ FORCEINLINE bool IsEmpty() const { - return RawSize() == 0; + return Length() == 0; } /** return the number of valid data bytes in the blob */ - FORCEINLINE uint RawSize() const + FORCEINLINE uint Length() const { return Hdr().items; }; /** return the current blob capacity in bytes */ - FORCEINLINE uint MaxRawSize() const + FORCEINLINE uint Capacity() const { return Hdr().capacity; }; /** return pointer to the first byte of data - non-const version */ - FORCEINLINE byte *RawData() + FORCEINLINE byte *Begin() { return data; } /** return pointer to the first byte of data - const version */ - FORCEINLINE const byte *RawData() const + FORCEINLINE const byte *Begin() const { return data; } @@ -154,13 +154,13 @@ public: /** invalidate blob's data - doesn't free buffer */ FORCEINLINE void Clear() { - RawSizeRef() = 0; + LengthRef() = 0; } /** free the blob's memory */ FORCEINLINE void Free() { - if (MaxRawSize() > 0) { + if (Capacity() > 0) { RawFree(&Hdr()); InitEmpty(); } @@ -171,39 +171,32 @@ public: { assert(p != NULL); if (num_bytes > 0) { - memcpy(GrowRawSize(num_bytes), p, num_bytes); + memcpy(Append(num_bytes), p, num_bytes); } } - /** append bytes from given source blob to the end of existing data bytes - reallocates if necessary */ - FORCEINLINE void AppendRaw(const ByteBlob& src) - { - if (!src.IsEmpty()) - memcpy(GrowRawSize(src.RawSize()), src.RawData(), src.RawSize()); - } - /** Reallocate if there is no free space for num_bytes bytes. * @return pointer to the new data to be added */ - FORCEINLINE byte *MakeRawFreeSpace(uint num_bytes) + FORCEINLINE byte *Prepare(uint num_bytes) { - uint new_size = RawSize() + num_bytes; - if (new_size > MaxRawSize()) SmartAlloc(new_size); - return data + RawSize(); + uint new_size = Length() + num_bytes; + if (new_size > Capacity()) SmartAlloc(new_size); + return data + Length(); } - /** Increase RawSize() by num_bytes. + /** Increase Length() by num_bytes. * @return pointer to the new data added */ - FORCEINLINE byte *GrowRawSize(uint num_bytes) + FORCEINLINE byte *Append(uint num_bytes) { - byte *pNewData = MakeRawFreeSpace(num_bytes); - RawSizeRef() += num_bytes; + byte *pNewData = Prepare(num_bytes); + LengthRef() += num_bytes; return pNewData; } /** reallocate blob data if needed */ void SmartAlloc(uint new_size) { - uint old_max_size = MaxRawSize(); + uint old_max_size = Capacity(); if (old_max_size >= new_size) return; /* calculate minimum block size we need to allocate */ uint min_alloc_size = header_size + new_size + tail_reserve; @@ -212,10 +205,10 @@ public: /* allocate new block */ BlobHeader *tmp = RawAlloc(alloc_size); /* setup header */ - tmp->items = RawSize(); + tmp->items = Length(); tmp->capacity = alloc_size - (header_size + tail_reserve); /* copy existing data */ - if (RawSize() > 0) + if (Length() > 0) memcpy(tmp + 1, data, tmp->items); /* replace our block with new one */ BlobHeader *pOldHdr = &Hdr(); @@ -261,8 +254,8 @@ public: /** fixing the four bytes at the end of blob data - useful when blob is used to hold string */ FORCEINLINE void FixTail() const { - if (MaxRawSize() > 0) { - byte *p = &data[RawSize()]; + if (Capacity() > 0) { + byte *p = &data[Length()]; for (uint i = 0; i < tail_reserve; i++) { p[i] = 0; } @@ -317,13 +310,13 @@ public: /** Return pointer to the first data item - non-const version */ FORCEINLINE T *Data() { - return (T*)base::RawData(); + return (T*)base::Begin(); } /** Return pointer to the first data item - const version */ FORCEINLINE const T *Data() const { - return (const T*)base::RawData(); + return (const T*)base::Begin(); } /** Return pointer to the index-th data item - non-const version */ @@ -343,24 +336,24 @@ public: /** Return number of items in the Blob */ FORCEINLINE uint Size() const { - return (base::RawSize() / type_size); + return (base::Length() / type_size); } /** Return total number of items that can fit in the Blob without buffer reallocation */ FORCEINLINE uint MaxSize() const { - return (base::MaxRawSize() / type_size); + return (base::Capacity() / type_size); } /** Return number of additional items that can fit in the Blob without buffer reallocation */ FORCEINLINE uint GetReserve() const { - return ((base::MaxRawSize() - base::RawSize()) / type_size); + return ((base::Capacity() - base::Length()) / type_size); } /** Grow number of data items in Blob by given number - doesn't construct items */ FORCEINLINE T *GrowSizeNC(uint num_items) { - return (T*)base::GrowRawSize(num_items * type_size); + return (T*)base::Append(num_items * type_size); } /** Add given items (ptr + number of items) at the end of blob */ @@ -377,7 +370,7 @@ public: * first free (unused) item */ FORCEINLINE T *MakeFreeSpace(uint num_items) { - return (T*)base::MakeRawFreeSpace(num_items * type_size); + return (T*)base::Prepare(num_items * type_size); } FORCEINLINE OnTransfer Transfer() diff --git a/src/misc/str.hpp b/src/misc/str.hpp index 9b5b53a8a..c0388852b 100644 --- a/src/misc/str.hpp +++ b/src/misc/str.hpp @@ -51,7 +51,7 @@ struct CStrA : public CBlobT<char> FORCEINLINE void AppendStr(const char *str) { if (!StrEmpty(str)) { - base::Append(str, strlen(str)); + base::AppendRaw(str, strlen(str)); base::FixTail(); } } @@ -69,7 +69,7 @@ struct CStrA : public CBlobT<char> { if (&src != this) { base::Clear(); - base::AppendRaw(src); + base::AppendRaw(src.Data(), src.Size()); base::FixTail(); } return *this; |