37 lines
702 B
C++
37 lines
702 B
C++
#pragma once
|
|
|
|
#include <vector>
|
|
#include <map>
|
|
#include <deque>
|
|
#include <cstdint>
|
|
#include <cstddef>
|
|
|
|
struct RecvSequenceBuffer {
|
|
struct RSBEntry {
|
|
std::vector<uint8_t> data;
|
|
};
|
|
|
|
// sequence_id -> entry
|
|
std::map<uint16_t, RSBEntry> entries;
|
|
|
|
uint16_t next_seq_id {0};
|
|
|
|
// list of seq_ids to ack, this is seperate bc rsbentries are deleted once processed
|
|
std::deque<uint16_t> ack_seq_ids;
|
|
|
|
void erase(uint16_t seq);
|
|
|
|
// inflight chunks
|
|
size_t size(void) const;
|
|
|
|
void add(uint16_t seq_id, std::vector<uint8_t>&& data);
|
|
|
|
bool canPop(void) const;
|
|
|
|
std::vector<uint8_t> pop(void);
|
|
|
|
// for acking, might be bad since its front
|
|
std::vector<uint16_t> frontSeqIDs(size_t count = 5) const;
|
|
};
|
|
|