//-------------------------------------------------------------------- // change a block in the tree void mgOctNode::setLeafData( mgOctree* tree, int size, int x, int y, int z, int leafSize, void* leafData) { // figure which child this block goes into int halfSize = size >> 1; int cell = (x%size < halfSize) ? 0 : 4; cell += (y%size < halfSize) ? 0 : 2; cell += (z%size < halfSize) ? 0 : 1; // if at target size if (halfSize == leafSize) { // if this is not a leaf, free the node if (!isLeaf(cell)) tree->freeNode(m_children[cell]); else tree->freeLeaf(m_children[cell]); // set the leaf node setLeaf(cell, leafData); } else { mgOctNode* child = NULL; // if this is a leaf cell if (isLeaf(cell)) { // make a new node, with all leaves initialized at old data void* oldLeafData = m_children[cell]; child = tree->newNode(); setNode(cell, child); tree->splitNode(oldLeafData, (void**) child->m_children); child->m_leaf = 0xFF; // all children are leaves } else child = m_children[cell]; // recurse to child child->setLeafData(tree, halfSize, x, y, z, leafSize, leafData); // if all nodes of child are leaves, see if we can combine them if (m_leaf == 0xFF) { if (tree->canCombine((void**) child->m_children)) { void* newLeafData = tree->combineChildren((void**) child->m_children); tree->freeNode(child); setLeaf(cell, newLeafData); } } } }
void linex_node_handler::initBuf() { //memset(buf, '\0', LINEX_NODE_SIZE); setLeaf(1); setFilledSize(0); setKVLastPos(LX_BLK_HDR_SIZE); prefix_len = 0; }
static void TrieNodeInit(TrieNode * node) { if (node != 0) { int i = 0; node->depth = 0; node->maxDepth = 0; setLeaf(node); node->key = getDefaultTrieKey(); node->value = getDefaultTrieValue(); node->parent = 0; node->next = 0; node->prev = 0; for (i = 0; i < CHILD_COUNT; i++) { node->child[i] = 0; } } }
void QUmlConnectorObject::unsetLeaf() { Q_D(QModelingObject); setLeaf(false); d->modifiedResettableProperties.removeAll(QStringLiteral("isLeaf")); }