| // Copyright 2018 The Fuchsia Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style license that can be | |
| // found in the LICENSE file. | |
| #ifndef SRC_DEVELOPER_DEBUG_SHARED_TEST_STREAM_BUFFER_H_ | |
| #define SRC_DEVELOPER_DEBUG_SHARED_TEST_STREAM_BUFFER_H_ | |
| #include <deque> | |
| #include "src/developer/debug/shared/stream_buffer.h" | |
| #include "src/lib/fxl/macros.h" | |
| namespace debug { | |
| // An implementation of StreamBuffer that provides the simplest-possible buffering to memory for | |
| // test purposes. | |
| // | |
| // The stream buffer is bidirectional and has a buffer going both ways: | |
| // | |
| // Writing to the stream buffer: stream().Write(...) | |
| // will come out in write_sink(). | |
| // | |
| // Reading from the stream buffer: stream().Read(...) or ...Peek(); | |
| // data is provided by stream().AddReadData(...). | |
| class TestStreamBuffer : public StreamBuffer::Writer { | |
| public: | |
| TestStreamBuffer(); | |
| ~TestStreamBuffer(); | |
| StreamBuffer& stream() { return stream_; } | |
| const StreamBuffer& stream() const { return stream_; } | |
| // Where data that is written to the stream buffer ends up. This emulates what would normally be | |
| // the system-specific destination (file, etc.). | |
| const std::deque<char>& write_sink() const { return write_sink_; } | |
| std::deque<char>& write_sink() { return write_sink_; } | |
| private: | |
| // StreamBuffer::Writer implementation. | |
| size_t ConsumeStreamBufferData(const char* data, size_t len) override; | |
| StreamBuffer stream_; | |
| std::deque<char> write_sink_; | |
| FXL_DISALLOW_COPY_AND_ASSIGN(TestStreamBuffer); | |
| }; | |
| } // namespace debug | |
| #endif // SRC_DEVELOPER_DEBUG_SHARED_TEST_STREAM_BUFFER_H_ |