#include "para.h"
#include "list.h"
#include "string.h"
-//#include "buffer_tree.h"
+#include "buffer_tree.h"
struct btr_buffer {
#define FOR_EACH_BUFFER_REF_SAFE(_br, _tmp, _btrn) \
list_for_each_entry_safe((_br), (_tmp), &(_btrn)->input_queue, node)
-INIT_STDERR_LOGGING(0);
-
struct btr_node *btr_new_node(char *name, struct btr_node *parent)
{
struct btr_node *btrn = para_malloc(sizeof(*btrn));
/*
* Deallocate the reference, release the resources if refcount drops to zero.
*/
-void btr_drop_buffer_reference(struct btr_buffer_reference *br)
+static void btr_drop_buffer_reference(struct btr_buffer_reference *br)
{
struct btr_buffer *btrb = br->btrb;
add_btrb_to_children(btrb, btrn);
}
-void btr_pushdown_br(struct btr_buffer_reference *br, struct btr_node *btrn)
+static void btr_pushdown_br(struct btr_buffer_reference *br, struct btr_node *btrn)
{
add_btrb_to_children(br->btrb, btrn);
btr_drop_buffer_reference(br);
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 size;
}
-int main(void)
+/**
+ * Return the size of the largest input queue.
+ *
+ * Iterates over all children of the given node.
+ */
+size_t btr_bytes_pending(struct btr_node *btrn)
{
- return 1;
+ size_t max_size = 0;
+ struct btr_node *ch;
+
+ FOR_EACH_CHILD(ch, btrn) {
+ size_t size = btr_get_input_queue_size(ch);
+ max_size = PARA_MAX(max_size, size);
+ }
+ return max_size;
}