diff OrthancFramework/Sources/ChunkedBuffer.h @ 4150:b56f3a37a4a1

optimization of ChunkedBuffer if many small chunks are added
author Sebastien Jodogne <s.jodogne@gmail.com>
date Wed, 19 Aug 2020 11:18:55 +0200
parents 732ad6c618ba
children 0034f855c023
line wrap: on
line diff
--- a/OrthancFramework/Sources/ChunkedBuffer.h	Tue Aug 18 16:57:20 2020 +0200
+++ b/OrthancFramework/Sources/ChunkedBuffer.h	Wed Aug 19 11:18:55 2020 +0200
@@ -34,15 +34,21 @@
   {
   private:
     typedef std::list<std::string*>  Chunks;
-    size_t numBytes_;
-    Chunks chunks_;
+    
+    size_t       numBytes_;
+    Chunks       chunks_;
+    std::string  pendingBuffer_;   // Buffer to speed up if adding many small chunks
+    size_t       pendingPos_;
   
     void Clear();
 
+    void AddChunkInternal(const void* chunkData,
+                          size_t chunkSize);
+
+    void FlushPendingBuffer();
+
   public:
-    ChunkedBuffer() : numBytes_(0)
-    {
-    }
+    ChunkedBuffer();
 
     ~ChunkedBuffer()
     {
@@ -51,7 +57,14 @@
 
     size_t GetNumBytes() const
     {
-      return numBytes_;
+      return numBytes_ + pendingPos_;
+    }
+
+    void SetPendingBufferSize(size_t size);
+
+    size_t GetPendingBufferSize() const
+    {
+      return pendingBuffer_.size();
     }
 
     void AddChunk(const void* chunkData,