return list_is_singular(&btrn->parent->children);
}
-struct btr_buffer_reference *btr_next_br(struct btr_node *btrn)
-{
- if (list_empty(&btrn->input_queue))
- return NULL;
- return list_first_entry(&btrn->input_queue, struct btr_buffer_reference, node);
-}
-
-
static inline size_t br_available_bytes(struct btr_buffer_reference *br)
{
return br->btrb->size - br->consumed;
return br_available_bytes(br);
}
-void btr_increase_used_bytes(struct btr_buffer_reference *br, size_t consumed)
+size_t btr_next_buffer(struct btr_node *btrn, char **bufp)
+{
+ struct btr_buffer_reference *br;
+
+ if (list_empty(&btrn->input_queue)) {
+ *bufp = NULL;
+ return 0;
+ }
+ br = list_first_entry(&btrn->input_queue, struct btr_buffer_reference, node);
+ return btr_get_buffer_by_reference(br, bufp);
+}
+
+void btr_consume(struct btr_node *btrn, size_t numbytes)
{
- br->consumed += consumed;
+ struct btr_buffer_reference *br;
+
+ assert(!list_empty(&btrn->input_queue));
+ br = list_first_entry(&btrn->input_queue, struct btr_buffer_reference, node);
+ assert(br->consumed + numbytes <= br->btrb->size);
+ br->consumed += numbytes;
if (br->consumed == br->btrb->size)
btr_drop_buffer_reference(br);
}
{
struct btr_node *ch;
+ if (!btrn)
+ return;
+ PARA_NOTICE_LOG("deleting %s\n", btrn->name);
FOR_EACH_CHILD(ch, btrn)
ch->parent = NULL;
flush_input_queue(btrn);