| 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 |