comparison 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
comparison
equal deleted inserted replaced
4149:72047b61570f 4150:b56f3a37a4a1
32 { 32 {
33 class ORTHANC_PUBLIC ChunkedBuffer : public boost::noncopyable 33 class ORTHANC_PUBLIC ChunkedBuffer : public boost::noncopyable
34 { 34 {
35 private: 35 private:
36 typedef std::list<std::string*> Chunks; 36 typedef std::list<std::string*> Chunks;
37 size_t numBytes_; 37
38 Chunks chunks_; 38 size_t numBytes_;
39 Chunks chunks_;
40 std::string pendingBuffer_; // Buffer to speed up if adding many small chunks
41 size_t pendingPos_;
39 42
40 void Clear(); 43 void Clear();
41 44
45 void AddChunkInternal(const void* chunkData,
46 size_t chunkSize);
47
48 void FlushPendingBuffer();
49
42 public: 50 public:
43 ChunkedBuffer() : numBytes_(0) 51 ChunkedBuffer();
44 {
45 }
46 52
47 ~ChunkedBuffer() 53 ~ChunkedBuffer()
48 { 54 {
49 Clear(); 55 Clear();
50 } 56 }
51 57
52 size_t GetNumBytes() const 58 size_t GetNumBytes() const
53 { 59 {
54 return numBytes_; 60 return numBytes_ + pendingPos_;
61 }
62
63 void SetPendingBufferSize(size_t size);
64
65 size_t GetPendingBufferSize() const
66 {
67 return pendingBuffer_.size();
55 } 68 }
56 69
57 void AddChunk(const void* chunkData, 70 void AddChunk(const void* chunkData,
58 size_t chunkSize); 71 size_t chunkSize);
59 72