summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/misc/blob.hpp14
-rw-r--r--src/misc/str.hpp9
2 files changed, 23 insertions, 0 deletions
diff --git a/src/misc/blob.hpp b/src/misc/blob.hpp
index ed8c52ac6..6c271cdcf 100644
--- a/src/misc/blob.hpp
+++ b/src/misc/blob.hpp
@@ -74,6 +74,12 @@ public:
/** default constructor - initializes empty blob */
FORCEINLINE ByteBlob() { InitEmpty(); }
+ /** copy constructor */
+ FORCEINLINE ByteBlob(const ByteBlob &src) {
+ InitEmpty();
+ AppendRaw(src);
+ }
+
/** move constructor - take ownership of blob data */
FORCEINLINE ByteBlob(BlobHeader * const & src)
{
@@ -216,6 +222,14 @@ public:
}
}
+ /** 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(Append(src.Length()), src.Begin(), src.Length());
+ }
+ }
+
/** Reallocate if there is no free space for num_bytes bytes.
* @return pointer to the new data to be added */
FORCEINLINE byte *Prepare(uint num_bytes)
diff --git a/src/misc/str.hpp b/src/misc/str.hpp
index c0388852b..44595e9a6 100644
--- a/src/misc/str.hpp
+++ b/src/misc/str.hpp
@@ -56,6 +56,15 @@ struct CStrA : public CBlobT<char>
}
}
+ /** Append another CStrA. */
+ FORCEINLINE void Append(const CStrA &src)
+ {
+ if (src.Length() > 0) {
+ base::AppendRaw(src);
+ base::FixTail();
+ }
+ }
+
/** Assignment from C string. */
FORCEINLINE CStrA &operator = (const char *src)
{