OLD | NEW |
1 /* | 1 /* |
2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2004 The WebRTC Project Authors. All rights reserved. |
3 * | 3 * |
4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
9 */ | 9 */ |
10 | 10 |
(...skipping 400 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
411 | 411 |
412 protected: | 412 protected: |
413 virtual void DoClose(); | 413 virtual void DoClose(); |
414 | 414 |
415 FILE* file_; | 415 FILE* file_; |
416 | 416 |
417 private: | 417 private: |
418 DISALLOW_COPY_AND_ASSIGN(FileStream); | 418 DISALLOW_COPY_AND_ASSIGN(FileStream); |
419 }; | 419 }; |
420 | 420 |
| 421 // A stream that caps the output at a certain size, dropping content from the |
| 422 // middle of the logical stream and maintaining equal parts of the start/end of |
| 423 // the logical stream. |
| 424 class CircularFileStream : public FileStream { |
| 425 public: |
| 426 explicit CircularFileStream(size_t max_size); |
| 427 |
| 428 bool Open(const std::string& filename, const char* mode, int* error) override; |
| 429 StreamResult Read(void* buffer, |
| 430 size_t buffer_len, |
| 431 size_t* read, |
| 432 int* error) override; |
| 433 StreamResult Write(const void* data, |
| 434 size_t data_len, |
| 435 size_t* written, |
| 436 int* error) override; |
| 437 |
| 438 private: |
| 439 enum ReadSegment { |
| 440 READ_MARKED, // Read 0 .. marked_position_ |
| 441 READ_MIDDLE, // Read position_ .. file_size |
| 442 READ_LATEST, // Read marked_position_ .. position_ if the buffer was |
| 443 // overwritten or 0 .. position_ otherwise. |
| 444 }; |
| 445 |
| 446 size_t max_write_size_; |
| 447 size_t position_; |
| 448 size_t marked_position_; |
| 449 size_t last_write_position_; |
| 450 ReadSegment read_segment_; |
| 451 size_t read_segment_available_; |
| 452 }; |
| 453 |
421 /////////////////////////////////////////////////////////////////////////////// | 454 /////////////////////////////////////////////////////////////////////////////// |
422 // MemoryStream is a simple implementation of a StreamInterface over in-memory | 455 // MemoryStream is a simple implementation of a StreamInterface over in-memory |
423 // data. Data is read and written at the current seek position. Reads return | 456 // data. Data is read and written at the current seek position. Reads return |
424 // end-of-stream when they reach the end of data. Writes actually extend the | 457 // end-of-stream when they reach the end of data. Writes actually extend the |
425 // end of data mark. | 458 // end of data mark. |
426 /////////////////////////////////////////////////////////////////////////////// | 459 /////////////////////////////////////////////////////////////////////////////// |
427 | 460 |
428 class MemoryStreamBase : public StreamInterface { | 461 class MemoryStreamBase : public StreamInterface { |
429 public: | 462 public: |
430 StreamState GetState() const override; | 463 StreamState GetState() const override; |
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
694 // as a pass in parameter, it indicates data in buffer that should move to sink | 727 // as a pass in parameter, it indicates data in buffer that should move to sink |
695 StreamResult Flow(StreamInterface* source, | 728 StreamResult Flow(StreamInterface* source, |
696 char* buffer, size_t buffer_len, | 729 char* buffer, size_t buffer_len, |
697 StreamInterface* sink, size_t* data_len = NULL); | 730 StreamInterface* sink, size_t* data_len = NULL); |
698 | 731 |
699 /////////////////////////////////////////////////////////////////////////////// | 732 /////////////////////////////////////////////////////////////////////////////// |
700 | 733 |
701 } // namespace rtc | 734 } // namespace rtc |
702 | 735 |
703 #endif // WEBRTC_BASE_STREAM_H_ | 736 #endif // WEBRTC_BASE_STREAM_H_ |
OLD | NEW |