Chromium Code Reviews| Index: webrtc/base/stream.h |
| diff --git a/webrtc/base/stream.h b/webrtc/base/stream.h |
| index b3317663b5e3327cf4fc45ce06383aca9339ba8b..f67c704aa5155f8ed64cbc2cd2a32e4c6b376efd 100644 |
| --- a/webrtc/base/stream.h |
| +++ b/webrtc/base/stream.h |
| @@ -418,6 +418,39 @@ class FileStream : public StreamInterface { |
| DISALLOW_COPY_AND_ASSIGN(FileStream); |
| }; |
| +// A stream that caps the output at a certain size, dropping content from the |
| +// middle of the logical stream and maintaining equal parts of the start/end of |
| +// the logical stream. |
| +class CircularFileStream : public FileStream { |
|
jiayl2
2015/07/06 18:18:14
I think we need unit tests for this class. If the
tkchin
2015/07/06 20:36:50
I just reverted the deletion which didn't have UTs
|
| + public: |
| + explicit CircularFileStream(size_t max_size); |
| + |
| + bool Open(const std::string& filename, const char* mode, int* error) override; |
| + StreamResult Read(void* buffer, |
| + size_t buffer_len, |
| + size_t* read, |
| + int* error) override; |
| + StreamResult Write(const void* data, |
| + size_t data_len, |
| + size_t* written, |
| + int* error) override; |
| + |
| + private: |
| + enum ReadSegment { |
| + READ_MARKED, // Read 0 .. marked_position_ |
| + READ_MIDDLE, // Read position_ .. file_size |
| + READ_LATEST, // Read marked_position_ .. position_ if the buffer was |
| + // overwritten or 0 .. position_ otherwise. |
| + }; |
| + |
| + size_t max_write_size_; |
| + size_t position_; |
| + size_t marked_position_; |
| + size_t last_write_position_; |
| + ReadSegment read_segment_; |
| + size_t read_segment_available_; |
| +}; |
| + |
| /////////////////////////////////////////////////////////////////////////////// |
| // MemoryStream is a simple implementation of a StreamInterface over in-memory |
| // data. Data is read and written at the current seek position. Reads return |