Lines Matching refs:rob
68 int ngtcp2_rob_init(ngtcp2_rob *rob, size_t chunk, const ngtcp2_mem *mem) {
72 ngtcp2_ksl_init(&rob->gapksl, ngtcp2_ksl_range_compar, sizeof(ngtcp2_range),
80 rv = ngtcp2_ksl_insert(&rob->gapksl, NULL, &g->range, g);
85 ngtcp2_ksl_init(&rob->dataksl, ngtcp2_ksl_range_compar, sizeof(ngtcp2_range),
88 rob->chunk = chunk;
89 rob->mem = mem;
96 ngtcp2_ksl_free(&rob->gapksl);
100 void ngtcp2_rob_free(ngtcp2_rob *rob) {
103 if (rob == NULL) {
107 for (it = ngtcp2_ksl_begin(&rob->dataksl); !ngtcp2_ksl_it_end(&it);
109 ngtcp2_rob_data_del(ngtcp2_ksl_it_get(&it), rob->mem);
112 for (it = ngtcp2_ksl_begin(&rob->gapksl); !ngtcp2_ksl_it_end(&it);
114 ngtcp2_rob_gap_del(ngtcp2_ksl_it_get(&it), rob->mem);
117 ngtcp2_ksl_free(&rob->dataksl);
118 ngtcp2_ksl_free(&rob->gapksl);
121 static int rob_write_data(ngtcp2_rob *rob, uint64_t offset, const uint8_t *data,
129 for (it = ngtcp2_ksl_lower_bound_compar(&rob->dataksl, &range,
139 rv = ngtcp2_rob_data_new(&d, (offset / rob->chunk) * rob->chunk,
140 rob->chunk, rob->mem);
145 rv = ngtcp2_ksl_insert(&rob->dataksl, &it, &d->range, d);
147 ngtcp2_rob_data_del(d, rob->mem);
152 n = (size_t)ngtcp2_min((uint64_t)len, d->range.begin + rob->chunk - offset);
162 int ngtcp2_rob_push(ngtcp2_rob *rob, uint64_t offset, const uint8_t *data,
169 it = ngtcp2_ksl_lower_bound_compar(&rob->gapksl, &q,
180 ngtcp2_ksl_remove_hint(&rob->gapksl, &it, &it, &g->range);
181 ngtcp2_rob_gap_del(g, rob->mem);
182 rv = rob_write_data(rob, m.begin, data + (m.begin - offset),
192 ngtcp2_ksl_update_key(&rob->gapksl, &g->range, &l);
197 rv = ngtcp2_rob_gap_new(&ng, r.begin, r.end, rob->mem);
201 rv = ngtcp2_ksl_insert(&rob->gapksl, &it, &ng->range, ng);
203 ngtcp2_rob_gap_del(ng, rob->mem);
208 ngtcp2_ksl_update_key(&rob->gapksl, &g->range, &r);
211 rv = rob_write_data(rob, m.begin, data + (m.begin - offset),
221 int ngtcp2_rob_remove_prefix(ngtcp2_rob *rob, uint64_t offset) {
226 it = ngtcp2_ksl_begin(&rob->gapksl);
235 ngtcp2_ksl_update_key(&rob->gapksl, &g->range, &r);
239 ngtcp2_ksl_remove_hint(&rob->gapksl, &it, &it, &g->range);
240 ngtcp2_rob_gap_del(g, rob->mem);
243 it = ngtcp2_ksl_begin(&rob->dataksl);
247 if (offset < d->range.begin + rob->chunk) {
250 ngtcp2_ksl_remove_hint(&rob->dataksl, &it, &it, &d->range);
251 ngtcp2_rob_data_del(d, rob->mem);
257 size_t ngtcp2_rob_data_at(ngtcp2_rob *rob, const uint8_t **pdest,
263 it = ngtcp2_ksl_begin(&rob->gapksl);
274 it = ngtcp2_ksl_begin(&rob->dataksl);
279 assert(offset < d->range.begin + rob->chunk);
283 return (size_t)(ngtcp2_min(g->range.begin, d->range.begin + rob->chunk) -
287 void ngtcp2_rob_pop(ngtcp2_rob *rob, uint64_t offset, size_t len) {
291 it = ngtcp2_ksl_begin(&rob->dataksl);
296 if (offset + len < d->range.begin + rob->chunk) {
300 ngtcp2_ksl_remove_hint(&rob->dataksl, NULL, &it, &d->range);
301 ngtcp2_rob_data_del(d, rob->mem);
304 uint64_t ngtcp2_rob_first_gap_offset(ngtcp2_rob *rob) {
305 ngtcp2_ksl_it it = ngtcp2_ksl_begin(&rob->gapksl);
317 int ngtcp2_rob_data_buffered(ngtcp2_rob *rob) {
318 return ngtcp2_ksl_len(&rob->dataksl) != 0;