Beispiel #1
0
//--------------------------------------------------------------------
// 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);
      }
    }
  }
}
Beispiel #2
0
void linex_node_handler::initBuf() {
    //memset(buf, '\0', LINEX_NODE_SIZE);
    setLeaf(1);
    setFilledSize(0);
    setKVLastPos(LX_BLK_HDR_SIZE);
    prefix_len = 0;
}
Beispiel #3
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;
        }
    }
}
Beispiel #4
0
void QUmlConnectorObject::unsetLeaf()
{
    Q_D(QModelingObject);
    setLeaf(false);
    d->modifiedResettableProperties.removeAll(QStringLiteral("isLeaf"));
}