Go to the documentation of this file.
59 #ifndef __UTIL_STREAMING_BUFFER_H__
60 #define __UTIL_STREAMING_BUFFER_H__
67 void *(*Calloc)(
size_t n,
size_t size);
68 void *(*Realloc)(
void *ptr,
size_t orig_size,
size_t size);
69 void (*
Free)(
void *ptr,
size_t size);
72 #define STREAMING_BUFFER_CONFIG_INITIALIZER \
74 0, 0, NULL, NULL, NULL, \
105 uint32_t buf_size_max;
110 #define STREAMING_BUFFER_INITIALIZER(cfg) \
122 #define STREAMING_BUFFER_INITIALIZER(cfg) { (cfg), 0, NULL, 0, 0, { NULL }, NULL, 0, 0 };
138 const uint8_t *data, uint32_t data_len)
WARN_UNUSED;
140 const uint8_t *data, uint32_t data_len)
WARN_UNUSED;
142 const uint8_t *data, uint32_t data_len)
WARN_UNUSED;
144 const uint8_t *data, uint32_t data_len,
148 const StreamingBufferSegment *seg,
149 const uint8_t **data, uint32_t *data_len);
153 const uint8_t **data, uint32_t *data_len);
157 const uint8_t **data, uint32_t *data_len,
161 const StreamingBufferSegment *seg,
162 const uint8_t *rawdata, uint32_t rawdata_len);
164 const uint8_t *rawdata, uint32_t rawdata_len);
167 const uint8_t **data, uint32_t *data_len,
171 const uint8_t **data, uint32_t *data_len,
175 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 StreamingBufferAppend(StreamingBuffer *sb, StreamingBufferSegment *seg, const uint8_t *data, uint32_t data_len) WARN_UNUSED
void StreamingBufferFree(StreamingBuffer *sb)
StreamingBufferBlock * head
int StreamingBufferInsertAt(StreamingBuffer *sb, StreamingBufferSegment *seg, const uint8_t *data, uint32_t data_len, uint64_t offset) WARN_UNUSED
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
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)
int StreamingBufferSegmentCompareRawData(const StreamingBuffer *sb, const StreamingBufferSegment *seg, const uint8_t *rawdata, uint32_t rawdata_len)
void StreamingBufferSlideToOffset(StreamingBuffer *sb, uint64_t offset)
slide to absolute offset
RB_ENTRY(StreamingBufferBlock) rb
struct StreamingBuffer_ StreamingBuffer
const StreamingBufferConfig * cfg
int StreamingBufferGetData(const StreamingBuffer *sb, const uint8_t **data, uint32_t *data_len, uint64_t *stream_offset)
struct StreamingBufferConfig_ StreamingBufferConfig
RB_HEAD(SBB, StreamingBufferBlock)
int StreamingBufferCompareRawData(const StreamingBuffer *sb, const uint8_t *rawdata, uint32_t rawdata_len)
StreamingBufferSegment * StreamingBufferAppendRaw(StreamingBuffer *sb, const uint8_t *data, uint32_t data_len) WARN_UNUSED
void(* Free)(void *ptr, size_t size)
void StreamingBufferSlide(StreamingBuffer *sb, uint32_t slide)
int StreamingBufferAppendNoTrack(StreamingBuffer *sb, const uint8_t *data, uint32_t data_len) WARN_UNUSED
add data w/o tracking a segment
void StreamingBufferSegmentGetData(const StreamingBuffer *sb, const StreamingBufferSegment *seg, const uint8_t **data, uint32_t *data_len)
void StreamingBufferClear(StreamingBuffer *sb)