5#include "intrusive_list.hpp"
17 void Push(
const char* buf,
size_t size);
19 std::optional<TEnvelope> Pop();
20 bool NeedMoreData()
const {
21 return !Messages.empty();
30 bool HasHeader =
false;
32 std::queue<TEnvelope> Messages;
33 std::deque<char> Buffer;
40 std::span<char> Acquire(
size_t size);
41 void Commit(
size_t size);
42 std::optional<TEnvelope> Pop();
44 bool NeedMoreData()
const {
45 return !HasHeader || Size() < Header.Size;
49 void Push(
const char* p,
size_t len);
52 void EnsureCapacity(
size_t size);
54 void CopyOut(
char* buf);
55 void CopyOut(
char* buf,
size_t size);
58 std::vector<char> Data;
63 bool HasHeader =
false;
71 std::span<char> Acquire(
size_t size);
72 void Commit(
size_t size);
73 std::optional<TEnvelope> Pop();
77 bool NeedMoreData()
const {
78 return !HasHeader || Size() < Header.Size;
82 void Push(
const char* p,
size_t len);
84 int UsedChunksCount()
const {
85 return UsedChunks.Size();
93 bool CopyOut(
char* buf);
94 void CopyOut(
char* buf,
size_t size);
95 TBlob ExtractBlob(TChunk& chunk,
size_t size);
100 std::span<char> TryAcquire(
size_t size,
size_t lowWatermark);
101 std::span<char> Acquire(
size_t size);
102 void Commit(
size_t size);
103 template<
size_t size>
104 bool CopyOut(
char* buf);
105 bool CopyOut(
char* buf,
size_t size);
109 std::vector<char> Data;
117 const size_t ChunkSize;
118 const size_t LowWatermark;
119 size_t CurrentSize = 0;
121 bool HasHeader =
false;
122 std::unique_ptr<TChunk> CurrentChunk;
124 std::vector<std::unique_ptr<TChunk>> FreeChunks;
Actor system implementation with message passing and behavior support.
Definition envelope_reader.hpp:14
Definition intrusive_list.hpp:16
Definition envelope_reader.hpp:67
Definition envelope_reader.hpp:36
Memory-efficient unbounded queue implementation for actor message passing.
Definition messages.hpp:84
Definition intrusive_list.hpp:9