X-Git-Url: http://git.tuebingen.mpg.de/?p=paraslash.git;a=blobdiff_plain;f=buffer_tree.c;h=1a6b6e60d3f977d2d99f600d7a872a1b95250312;hp=2c02c69466f19111241aa835dd2f919cf710ecc0;hb=764e787bc065694b2e9b05159a92104d585f59eb;hpb=ef634463b527880f074dd9d5a5733e24cc22d389 diff --git a/buffer_tree.c b/buffer_tree.c index 2c02c694..1a6b6e60 100644 --- a/buffer_tree.c +++ b/buffer_tree.c @@ -137,6 +137,17 @@ void btr_pushdown(struct btr_node *btrn) btr_pushdown_br(br, btrn); } +int btr_pushdown_one(struct btr_node *btrn) +{ + struct btr_buffer_reference *br; + + if (list_empty(&btrn->input_queue)) + return 0; + br = list_first_entry(&btrn->input_queue, struct btr_buffer_reference, node); + btr_pushdown_br(br, btrn); + return 1; +} + /* Return true if this node has no children. */ bool btr_no_children(struct btr_node *btrn) { @@ -311,7 +322,7 @@ void *btr_context(struct btr_node *btrn) * * \return The number of buffers that have been available (zero, one or two). */ -int btr_merge(struct btr_node *btrn) +static int merge_input(struct btr_node *btrn) { struct btr_buffer_reference *brs[2], *br; char *bufs[2], *buf; @@ -352,14 +363,39 @@ int btr_merge(struct btr_node *btrn) return 2; } -void btr_merge_to(struct btr_node *btrn, size_t dest_size) +void btr_merge(struct btr_node *btrn, size_t dest_size) { for (;;) { char *buf; size_t len = btr_next_buffer(btrn, &buf); if (len >= dest_size) return; - if (btr_merge(btrn) < 2) + if (merge_input(btrn) < 2) return; } } + +bool btr_eof(struct btr_node *btrn) +{ + char *buf; + size_t len = btr_next_buffer(btrn, &buf); + + return (len == 0 && btr_no_parent(btrn)); +} + +void log_tree_recursively(struct btr_node *btrn, int loglevel, int depth) +{ + struct btr_node *ch; + const char spaces[] = " ", *space = spaces + 16 - depth; + + if (depth > 16) + return; + para_log(loglevel, "%s%s\n", space, btrn->name); + FOR_EACH_CHILD(ch, btrn) + log_tree_recursively(ch, loglevel, depth + 1); +} + +void btr_log_tree(struct btr_node *btrn, int loglevel) +{ + return log_tree_recursively(btrn, loglevel, 0); +}