rogue
Loading...
Searching...
No Matches
Buffer.h
Go to the documentation of this file.
1
17#ifndef __ROGUE_INTERFACES_STREAM_BUFFER_H__
18#define __ROGUE_INTERFACES_STREAM_BUFFER_H__
19#include "rogue/Directives.h"
20
21#include <stdint.h>
22
23#include <memory>
24
26
27namespace rogue {
28namespace interfaces {
29namespace stream {
30
31class Pool;
32class Frame;
33
42class Buffer {
43 // Pointer to entity which allocated this buffer
44 std::shared_ptr<rogue::interfaces::stream::Pool> source_;
45
46 // Pointer to frame containing this buffer
47 std::weak_ptr<rogue::interfaces::stream::Frame> frame_;
48
49 // Pointer to raw data buffer. Raw pointer is used here!
50 uint8_t* data_;
51
52 // Meta data used to track this buffer by source
53 uint32_t meta_;
54
55 // Alloc size of buffer, alloc may be greater than raw size due to buffer allocator
56 uint32_t allocSize_;
57
58 // Raw size of buffer, size as requested, alloc may be greater
59 uint32_t rawSize_;
60
61 // Header room of buffer
62 uint32_t headRoom_;
63
64 // Tail room of buffer, used to keep payload from using up tail space
65 uint32_t tailRoom_;
66
67 // Data count including header
68 uint32_t payload_;
69
70 // Interface specific flags
71 uint32_t flags_;
72
73 // Error state
74 uint32_t error_;
75
76 public:
78 typedef uint8_t* iterator;
79
99 static std::shared_ptr<rogue::interfaces::stream::Buffer> create(
100 std::shared_ptr<rogue::interfaces::stream::Pool> source,
101 void* data,
102 uint32_t meta,
103 uint32_t size,
104 uint32_t alloc);
105
123 Buffer(std::shared_ptr<rogue::interfaces::stream::Pool> source,
124 void* data,
125 uint32_t meta,
126 uint32_t size,
127 uint32_t alloc);
128
130 ~Buffer();
131
140 void setFrame(std::shared_ptr<rogue::interfaces::stream::Frame> frame);
141
149 uint32_t getMeta();
150
158 void setMeta(uint32_t meta);
159
165 void adjustHeader(int32_t value);
166
168 void zeroHeader();
169
175 void adjustTail(int32_t value);
176
178 void zeroTail();
179
187 uint8_t* begin();
188
196 uint8_t* end();
197
203 uint8_t* endPayload();
204
212 uint32_t getSize();
213
219 uint32_t getAvailable();
220
226 uint32_t getPayload();
227
233 void setPayload(uint32_t size);
234
242 void minPayload(uint32_t size);
243
249 void adjustPayload(int32_t value);
250
256 void setPayloadFull();
257
259 void setPayloadEmpty();
260
266 void debug(uint32_t idx);
267};
268
270typedef std::shared_ptr<rogue::interfaces::stream::Buffer> BufferPtr;
271} // namespace stream
272} // namespace interfaces
273} // namespace rogue
274
275#endif
Stream frame buffer container.
Definition Buffer.h:42
void adjustHeader(int32_t value)
Adjusts header reservation size.
Definition Buffer.cpp:79
void adjustPayload(int32_t value)
Adjusts payload size by signed delta.
Definition Buffer.cpp:229
uint8_t * iterator
Iterator alias for byte-wise buffer access.
Definition Buffer.h:78
void debug(uint32_t idx)
Emits debug information for this buffer.
Definition Buffer.cpp:256
~Buffer()
Destroys the buffer wrapper and returns ownership to the pool path.
Definition Buffer.cpp:59
void setFrame(std::shared_ptr< rogue::interfaces::stream::Frame > frame)
Associates this buffer with its owning frame.
Definition Buffer.cpp:64
uint32_t getMeta()
Returns metadata associated with this buffer.
Definition Buffer.cpp:69
uint32_t getPayload()
Returns current payload size.
Definition Buffer.cpp:202
void minPayload(uint32_t size)
Ensures payload size is at least size.
Definition Buffer.cpp:224
void zeroHeader()
Clears header reservation.
Definition Buffer.cpp:105
uint8_t * endPayload()
Returns iterator to end of current payload.
Definition Buffer.cpp:163
void setPayload(uint32_t size)
Sets payload size.
Definition Buffer.cpp:207
uint8_t * end()
Returns iterator to end of usable buffer region.
Definition Buffer.cpp:155
static std::shared_ptr< rogue::interfaces::stream::Buffer > create(std::shared_ptr< rogue::interfaces::stream::Pool > source, void *data, uint32_t meta, uint32_t size, uint32_t alloc)
Creates a buffer backed by memory owned by a stream Pool.
Definition Buffer.cpp:35
uint8_t * begin()
Returns iterator to start of buffer payload region.
Definition Buffer.cpp:147
uint32_t getSize()
Returns payload-capable buffer size.
Definition Buffer.cpp:173
void adjustTail(int32_t value)
Adjusts tail reservation size.
Definition Buffer.cpp:113
void setMeta(uint32_t meta)
Sets metadata associated with this buffer.
Definition Buffer.cpp:74
void setPayloadEmpty()
Clears payload (sets payload size to zero).
Definition Buffer.cpp:248
void setPayloadFull()
Sets payload size to maximum available buffer space.
Definition Buffer.cpp:240
void zeroTail()
Clears tail reservation.
Definition Buffer.cpp:136
uint32_t getAvailable()
Returns remaining available payload space.
Definition Buffer.cpp:182
Container for one stream frame payload and metadata.
Definition Frame.h:56
Frame and buffer allocator for stream endpoints.
Definition Pool.h:71
std::shared_ptr< rogue::interfaces::stream::Buffer > BufferPtr
Shared pointer alias for Buffer.
Definition Buffer.h:270