Mercurial > hg > orthanc
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 |