static void rotate_right(size_t pidx, bnode_t *lbnode, bnode_t *rbnode, bnode_t *parent, const piojo_btree_t *tree) { size_t i; /* Prepend parent entry to right bnode. */ for (i = rbnode->ecnt; i > 0; --i){ copy_bentry(i - 1, rbnode, i, rbnode, tree); } copy_bentry(pidx, parent, 0, rbnode, tree); ++rbnode->ecnt; /* Prepend last child from left bnode to right bnode. */ if (! rbnode->leaf_p){ for (i = rbnode->ecnt; i > 0; --i){ move_child(rbnode->children[i - 1], i, rbnode); } move_child(lbnode->children[lbnode->ecnt], 0, rbnode); } /* Move last entry from left bnode to parent bnode. */ copy_bentry(lbnode->ecnt - 1, lbnode, pidx, parent, tree); --lbnode->ecnt; }
static void rotate_left(size_t pidx, bnode_t *lbnode, bnode_t *rbnode, bnode_t *parent, const piojo_btree_t *tree) { size_t i; /* Append parent entry to left bnode. */ copy_bentry(pidx, parent, lbnode->ecnt, lbnode, tree); /* Append first child from right bnode to left bnode. */ --rbnode->ecnt; if (! lbnode->leaf_p){ move_child(rbnode->children[0], lbnode->ecnt + 1, lbnode); for (i = 0; i <= rbnode->ecnt; ++i){ move_child(rbnode->children[i + 1], i, rbnode); } } /* Move first entry from right bnode to parent bnode. */ copy_bentry(0, rbnode, pidx, parent, tree); for (i = 0; i < rbnode->ecnt; ++i){ copy_bentry(i + 1, rbnode, i, rbnode, tree); } ++lbnode->ecnt; }
void Node::add_child_below_node(Node *p_node, Node *p_child, bool p_legible_unique_name) { add_child(p_child, p_legible_unique_name); if (is_a_parent_of(p_node)) { move_child(p_child, p_node->get_position_in_parent() + 1); } else { WARN_PRINTS("Cannot move under node " + p_node->get_name() + " as " + p_child->get_name() + " does not share a parent") } }
void BoxContainer::add_spacer(bool p_begin) { Control *c = memnew( Control ); if (vertical) c->set_v_size_flags(SIZE_EXPAND_FILL); else c->set_h_size_flags(SIZE_EXPAND_FILL); add_child(c); if (p_begin) move_child(c,0); }
void GraphEdit::_graph_node_raised(Node *p_gn) { GraphNode *gn = p_gn->cast_to<GraphNode>(); ERR_FAIL_COND(!gn); gn->raise(); if (gn->is_comment()) { move_child(gn, 0); } int first_not_comment = 0; for (int i = 0; i < get_child_count(); i++) { GraphNode *gn = get_child(i)->cast_to<GraphNode>(); if (gn && !gn->is_comment()) { first_not_comment = i; break; } } move_child(connections_layer, first_not_comment); top_layer->raise(); emit_signal("node_selected", p_gn); }
static void merge_bnodes(piojo_btree_t *tree, size_t pidx, bnode_t *lbnode, bnode_t *rbnode, bnode_t *parent) { size_t i, ccnt = lbnode->ecnt + 1; /* Append parent entry to left bnode. */ copy_bentry(pidx, parent, lbnode->ecnt, lbnode, tree); ++lbnode->ecnt; /* Append right bnode to left bnode. */ for (i = 0; i < rbnode->ecnt; ++i, ++lbnode->ecnt){ copy_bentry(i, rbnode, lbnode->ecnt, lbnode, tree); } if (! rbnode->leaf_p){ for (i = 0; i <= rbnode->ecnt; ++i, ++ccnt){ move_child(rbnode->children[i], ccnt, lbnode); } } /* Shrink parent bnode. */ --parent->ecnt; for (i = pidx; i < parent->ecnt; ++i){ copy_bentry(i + 1, parent, i, parent, tree); } for (i = pidx + 1; i <= parent->ecnt; ++i){ move_child(parent->children[i + 1], i, parent); } PIOJO_ASSERT(parent->children[pidx] == lbnode); /* Make left bnode the new root when the root is empty. */ if (tree->root == parent && parent->ecnt == 0){ free_bnode(tree->root, tree); tree->root = lbnode; } /* Free right bnode. */ free_bnode(rbnode, tree); }
static void split_root(piojo_btree_t *tree) { bnode_t *newroot; PIOJO_ASSERT(tree->root->ecnt == tree->cmax - 1); newroot = alloc_bnode(tree); newroot->leaf_p = FALSE; move_child(tree->root, 0, newroot); split_bnode(tree, 0, tree->root, newroot); tree->root = newroot; }
static void split_bnode(piojo_btree_t *tree, size_t pidx, bnode_t *bnode, bnode_t *parent) { size_t i, j, mid = bnode->ecnt / 2; bnode_t *rbnode; PIOJO_ASSERT(parent->ecnt < tree->cmax - 1); /* Copy children/entries greater than median to right bnode. */ rbnode = alloc_bnode(tree); for (i = mid + 1; i < bnode->ecnt; ++i, ++rbnode->ecnt){ copy_bentry(i, bnode, rbnode->ecnt, rbnode, tree); } if (! bnode->leaf_p){ for (j = 0, i = mid + 1; i <= bnode->ecnt; ++i, ++j){ move_child(bnode->children[i], j, rbnode); } } rbnode->leaf_p = bnode->leaf_p; /* Expand parent bnode. */ for (i = parent->ecnt; i > pidx; --i){ copy_bentry(i - 1, parent, i, parent, tree); } for (i = parent->ecnt + 1; i > pidx + 1; --i){ move_child(parent->children[i - 1], i, parent); } /* Move median to parent bnode and update children. */ copy_bentry(mid, bnode, pidx, parent, tree); PIOJO_ASSERT(parent->children[pidx] == bnode); move_child(rbnode, pidx + 1, parent); ++parent->ecnt; bnode->ecnt = mid; }