Lines Matching refs:chunk
33 static bool chunk_is_empty(const struct buf_chunk *chunk)
35 return chunk->r_offset >= chunk->w_offset;
38 static bool chunk_is_full(const struct buf_chunk *chunk)
40 return chunk->w_offset >= chunk->dlen;
43 static size_t chunk_len(const struct buf_chunk *chunk)
45 return chunk->w_offset - chunk->r_offset;
48 static size_t chunk_space(const struct buf_chunk *chunk)
50 return chunk->dlen - chunk->w_offset;
53 static void chunk_reset(struct buf_chunk *chunk)
55 chunk->next = NULL;
56 chunk->r_offset = chunk->w_offset = 0;
59 static size_t chunk_append(struct buf_chunk *chunk,
62 unsigned char *p = &chunk->x.data[chunk->w_offset];
63 size_t n = chunk->dlen - chunk->w_offset;
64 DEBUGASSERT(chunk->dlen >= chunk->w_offset);
68 chunk->w_offset += n;
73 static size_t chunk_read(struct buf_chunk *chunk,
76 unsigned char *p = &chunk->x.data[chunk->r_offset];
77 size_t n = chunk->w_offset - chunk->r_offset;
78 DEBUGASSERT(chunk->w_offset >= chunk->r_offset);
84 chunk->r_offset = chunk->w_offset = 0;
89 chunk->r_offset += len;
94 static ssize_t chunk_slurpn(struct buf_chunk *chunk, size_t max_len,
98 unsigned char *p = &chunk->x.data[chunk->w_offset];
99 size_t n = chunk->dlen - chunk->w_offset; /* free amount */
102 DEBUGASSERT(chunk->dlen >= chunk->w_offset);
112 chunk->w_offset += nread;
117 static void chunk_peek(const struct buf_chunk *chunk,
120 DEBUGASSERT(chunk->w_offset >= chunk->r_offset);
121 *pbuf = &chunk->x.data[chunk->r_offset];
122 *plen = chunk->w_offset - chunk->r_offset;
125 static void chunk_peek_at(const struct buf_chunk *chunk, size_t offset,
128 offset += chunk->r_offset;
129 DEBUGASSERT(chunk->w_offset >= offset);
130 *pbuf = &chunk->x.data[offset];
131 *plen = chunk->w_offset - offset;
134 static size_t chunk_skip(struct buf_chunk *chunk, size_t amount)
136 size_t n = chunk->w_offset - chunk->r_offset;
137 DEBUGASSERT(chunk->w_offset >= chunk->r_offset);
140 chunk->r_offset += n;
141 if(chunk->r_offset == chunk->w_offset)
142 chunk->r_offset = chunk->w_offset = 0;
149 struct buf_chunk *chunk;
151 chunk = *anchor;
152 *anchor = chunk->next;
153 free(chunk);
172 struct buf_chunk *chunk = NULL;
175 chunk = pool->spare;
176 pool->spare = chunk->next;
178 chunk_reset(chunk);
179 *pchunk = chunk;
183 chunk = calloc(1, sizeof(*chunk) + pool->chunk_size);
184 if(!chunk) {
188 chunk->dlen = pool->chunk_size;
189 *pchunk = chunk;
194 struct buf_chunk *chunk)
197 free(chunk);
200 chunk_reset(chunk);
201 chunk->next = pool->spare;
202 pool->spare = chunk;
252 struct buf_chunk *chunk;
254 chunk = q->head;
255 q->head = chunk->next;
256 chunk->next = q->spare;
257 q->spare = chunk;
264 const struct buf_chunk *chunk = q->head;
266 while(chunk) {
267 len += chunk_len(chunk);
268 chunk = chunk->next;
279 struct buf_chunk *chunk = q->spare;
280 while(chunk) {
281 space += chunk->dlen;
282 chunk = chunk->next;
310 struct buf_chunk *chunk = NULL;
313 chunk = q->spare;
314 q->spare = chunk->next;
315 chunk_reset(chunk);
316 return chunk;
323 if(bufcp_take(q->pool, &chunk))
326 return chunk;
329 chunk = calloc(1, sizeof(*chunk) + q->chunk_size);
330 if(!chunk)
332 chunk->dlen = q->chunk_size;
334 return chunk;
340 struct buf_chunk *chunk;
343 chunk = q->head;
344 q->head = chunk->next;
345 if(q->tail == chunk)
348 bufcp_put(q->pool, chunk);
356 free(chunk);
360 chunk->next = q->spare;
361 q->spare = chunk;
368 struct buf_chunk *chunk;
372 chunk = get_spare(q);
373 if(chunk) {
376 q->tail->next = chunk;
377 q->tail = chunk;
381 q->head = q->tail = chunk;
384 return chunk;