Go to the documentation of this file.
59 #ifndef __UTIL_STREAMING_BUFFER_H__
60 #define __UTIL_STREAMING_BUFFER_H__
64 #define STREAMING_BUFFER_REGION_GAP_DEFAULT 262144
70 void *(*Calloc)(
size_t n,
size_t size);
71 void *(*Realloc)(
void *ptr,
size_t orig_size,
size_t size);
72 void (*
Free)(
void *ptr,
size_t size);
75 #define STREAMING_BUFFER_CONFIG_INITIALIZER \
77 2048, 8, STREAMING_BUFFER_REGION_GAP_DEFAULT, NULL, NULL, NULL, \
80 #define STREAMING_BUFFER_REGION_INIT \
82 NULL, 0, 0, 0ULL, NULL, \
117 uint32_t buf_size_max;
127 static inline uint64_t StreamingBufferGetConsecutiveDataRightEdge(
const StreamingBuffer *sb)
132 static inline uint64_t StreamingBufferGetOffset(
const StreamingBuffer *sb)
138 #define STREAMING_BUFFER_INITIALIZER \
140 STREAMING_BUFFER_REGION_INIT, \
148 #define STREAMING_BUFFER_INITIALIZER { STREAMING_BUFFER_REGION_INIT, { NULL }, NULL, 0, 1, 1, 0 };
164 StreamingBufferSegment *seg,
const uint8_t *data, uint32_t data_len)
WARN_UNUSED;
166 const uint8_t *data, uint32_t data_len)
WARN_UNUSED;
168 StreamingBufferSegment *seg,
const uint8_t *data, uint32_t data_len,
172 const StreamingBufferSegment *seg,
173 const uint8_t **data, uint32_t *data_len);
177 const uint8_t **data, uint32_t *data_len);
181 const uint8_t **data, uint32_t *data_len,
185 const StreamingBufferSegment *seg,
186 const uint8_t *rawdata, uint32_t rawdata_len);
188 const uint8_t *rawdata, uint32_t rawdata_len);
191 const uint8_t **data, uint32_t *data_len,
195 const uint8_t **data, uint32_t *data_len,
199 const StreamingBufferSegment *seg);
int StreamingBufferSegmentIsBeforeWindow(const StreamingBuffer *sb, const StreamingBufferSegment *seg)
RB_PROTOTYPE(SBB, StreamingBufferBlock, rb, SBBCompare)
StreamingBufferBlock * SBB_RB_FIND_INCLUSIVE(struct SBB *head, StreamingBufferBlock *elm)
int SBBCompare(struct StreamingBufferBlock *a, struct StreamingBufferBlock *b)
int StreamingBufferAppendNoTrack(StreamingBuffer *sb, const StreamingBufferConfig *cfg, const uint8_t *data, uint32_t data_len) WARN_UNUSED
add data w/o tracking a segment
StreamingBufferBlock * head
struct StreamingBufferRegion_ * next
int StreamingBufferGetDataAtOffset(const StreamingBuffer *sb, const uint8_t **data, uint32_t *data_len, uint64_t offset)
struct StreamingBufferBlock __attribute__((__packed__)) StreamingBufferBlock
block of continues data
void StreamingBufferFree(StreamingBuffer *sb, const StreamingBufferConfig *cfg)
StreamingBuffer * StreamingBufferInit(const StreamingBufferConfig *cfg)
void StreamingBufferSBBGetData(const StreamingBuffer *sb, const StreamingBufferBlock *sbb, const uint8_t **data, uint32_t *data_len)
get the data for one SBB
void StreamingBufferSBBGetDataAtOffset(const StreamingBuffer *sb, const StreamingBufferBlock *sbb, const uint8_t **data, uint32_t *data_len, uint64_t offset)
get the data for one SBB
void StreamingBufferRegisterTests(void)
void StreamingBufferSlideToOffset(StreamingBuffer *sb, const StreamingBufferConfig *cfg, uint64_t offset)
slide to absolute offset
int StreamingBufferSegmentCompareRawData(const StreamingBuffer *sb, const StreamingBufferSegment *seg, const uint8_t *rawdata, uint32_t rawdata_len)
RB_ENTRY(StreamingBufferBlock) rb
int StreamingBufferInsertAt(StreamingBuffer *sb, const StreamingBufferConfig *cfg, StreamingBufferSegment *seg, const uint8_t *data, uint32_t data_len, uint64_t offset) WARN_UNUSED
struct StreamingBuffer_ StreamingBuffer
struct StreamingBufferRegion_ StreamingBufferRegion
int StreamingBufferGetData(const StreamingBuffer *sb, const uint8_t **data, uint32_t *data_len, uint64_t *stream_offset)
int StreamingBufferAppend(StreamingBuffer *sb, const StreamingBufferConfig *cfg, StreamingBufferSegment *seg, const uint8_t *data, uint32_t data_len) WARN_UNUSED
struct StreamingBufferConfig_ StreamingBufferConfig
RB_HEAD(SBB, StreamingBufferBlock)
int StreamingBufferCompareRawData(const StreamingBuffer *sb, const uint8_t *rawdata, uint32_t rawdata_len)
void(* Free)(void *ptr, size_t size)
void StreamingBufferSegmentGetData(const StreamingBuffer *sb, const StreamingBufferSegment *seg, const uint8_t **data, uint32_t *data_len)
void StreamingBufferClear(StreamingBuffer *sb, const StreamingBufferConfig *cfg)
StreamingBufferRegion region