Open
Graph Drawing
Framework

 v. 2023.09 (Elderberry)
 

LinearQuadtreeBuilder.h
Go to the documentation of this file.
1 
32 #pragma once
33 
36 
37 namespace ogdf {
38 namespace fast_multipole_embedder {
39 
42 public:
45  : firstInner(0)
46  , firstLeaf(0)
47  , lastInner(0)
48  , lastLeaf(0)
49  , numInnerNodes(0)
50  , numLeaves(0)
51  , tree(treeRef)
53  n = tree.numberOfPoints();
54  }
55 
57  void build();
58 
61 
64 
66  void prepareTree();
67 
70 
73 
75  void buildHierarchy();
76 
81  } else {
82  firstInner = curr;
83  }
84  restoreChainLastNode = curr;
85  numInnerNodes++;
86  }
87 
89  if (tree.isLeaf(curr)) {
90  return;
91  } else {
92  restoreChain(tree.child(curr, 0));
93  tree.setFirstPoint(curr, tree.firstPoint(tree.child(curr, 0)));
95  for (uint32_t i = 1; i < tree.numberOfChilds(curr); i++) {
96  restoreChain(tree.child(curr, i));
97  }
98 
99  uint32_t lastPoint = tree.firstPoint(tree.child(curr, tree.numberOfChilds(curr) - 1))
100  + tree.numberOfPoints(tree.child(curr, tree.numberOfChilds(curr) - 1));
101  tree.setNumberOfPoints(curr, lastPoint - tree.firstPoint(curr));
102  }
103  }
104 
105  inline void restoreChain() {
107  numInnerNodes = 0;
108  if (!tree.isLeaf(tree.root())) {
110  }
111  if (restoreChainLastNode) {
113  }
114  }
115 
118  // 64 bit version
119 #if 0
120  // FIXME: a < 0 is always true (PointID is unsigned int)
121  if (a < 0) return 64;
122 #endif
123  if (b >= tree.numberOfPoints()) {
124  return 64;
125  }
126  uint32_t res = (32 - ((mostSignificantBit(tree.mortonNr(a) ^ tree.mortonNr(b))) / 2));
127  return res;
128  }
129 
132 
135  uint32_t numInnerNodes;
136  uint32_t numLeaves;
137 
141 };
142 
143 }
144 }
ogdf
The namespace for all OGDF objects.
Definition: AugmentationModule.h:36
ogdf::fast_multipole_embedder::LinearQuadtreeBuilder::n
LinearQuadtree::PointID n
Definition: LinearQuadtreeBuilder.h:140
ogdf::fast_multipole_embedder::LinearQuadtree::NodeID
unsigned int NodeID
Definition: LinearQuadtree.h:52
ogdf::fast_multipole_embedder::LinearQuadtree::setNumberOfPoints
void setNumberOfPoints(NodeID nodeID, uint32_t numPoints)
sets the number of nodes containted in node nodeID
Definition: LinearQuadtree.h:418
ogdf::fast_multipole_embedder::LinearQuadtreeBuilder::restoreChain
void restoreChain(LinearQuadtree::NodeID curr)
Definition: LinearQuadtreeBuilder.h:88
LinearQuadtree.h
Declaration of class LinearQuadtree.
ogdf::fast_multipole_embedder::LinearQuadtreeBuilder::prepareNodeAndLeaf
void prepareNodeAndLeaf(LinearQuadtree::PointID leafPos, LinearQuadtree::PointID nextLeafPos)
prepares the node and leaf layer at position leafPos where nextLeafPos is the next position
ogdf::begin
HypergraphRegistry< HypernodeElement >::iterator begin(const HypergraphRegistry< HypernodeElement > &self)
ogdf::fast_multipole_embedder::LinearQuadtreeBuilder
the builder for the LinearQuadtree
Definition: LinearQuadtreeBuilder.h:41
ogdf::fast_multipole_embedder::LinearQuadtreeBuilder::restoreChain
void restoreChain()
Definition: LinearQuadtreeBuilder.h:105
ogdf::fast_multipole_embedder::LinearQuadtree::numberOfPoints
uint32_t numberOfPoints(NodeID nodeID) const
returns the number of points contained in the subtree of node nodeID
Definition: LinearQuadtree.h:415
ogdf::fast_multipole_embedder::LinearQuadtreeBuilder::prepareTree
void prepareTree()
prepares the node and leaf layer for the complete tree from 0 to n (excluding n)
FastUtils.h
Definition of utility functions for FME layout.
ogdf::fast_multipole_embedder::LinearQuadtree::setFirstPoint
void setFirstPoint(NodeID nodeID, PointID firstPoint)
Definition: LinearQuadtree.h:382
ogdf::fast_multipole_embedder::LinearQuadtree::firstPoint
PointID firstPoint(NodeID nodeID) const
Definition: LinearQuadtree.h:380
ogdf::fast_multipole_embedder::LinearQuadtree::child
NodeID child(NodeID nodeID, uint32_t i) const
returns the i th child index of node nodeID
Definition: LinearQuadtree.h:403
ogdf::fast_multipole_embedder::LinearQuadtreeBuilder::restorePushBackChain
void restorePushBackChain(LinearQuadtree::NodeID curr)
used by restore chain
Definition: LinearQuadtreeBuilder.h:78
ogdf::fast_multipole_embedder::LinearQuadtreeBuilder::build
void build()
the main build call
ogdf::fast_multipole_embedder::LinearQuadtreeBuilder::firstLeaf
LinearQuadtree::NodeID firstLeaf
Definition: LinearQuadtreeBuilder.h:131
ogdf::fast_multipole_embedder::LinearQuadtreeBuilder::lastInner
LinearQuadtree::NodeID lastInner
Definition: LinearQuadtreeBuilder.h:133
ogdf::fast_multipole_embedder::LinearQuadtreeBuilder::CAL
uint32_t CAL(LinearQuadtree::PointID a, LinearQuadtree::PointID b)
returns the level of the first common ancestor of a and b
Definition: LinearQuadtreeBuilder.h:117
ogdf::fast_multipole_embedder::LinearQuadtree::setNextNode
void setNextNode(NodeID nodeID, NodeID next)
Definition: LinearQuadtree.h:376
ogdf::fast_multipole_embedder::LinearQuadtreeBuilder::numInnerNodes
uint32_t numInnerNodes
Definition: LinearQuadtreeBuilder.h:135
ogdf::fast_multipole_embedder::LinearQuadtree
Definition: LinearQuadtree.h:47
ogdf::fast_multipole_embedder::LinearQuadtree::PointID
unsigned int PointID
Definition: LinearQuadtree.h:53
ogdf::fast_multipole_embedder::LinearQuadtreeBuilder::mergeWithNext
void mergeWithNext(LinearQuadtree::NodeID curr)
merges the node curr with curr's next node by appending the next nodes children to curr except the fi...
ogdf::fast_multipole_embedder::mostSignificantBit
uint32_t mostSignificantBit(T n)
returns the index of the most signficant bit set. 0 = most signif, bitlength-1 = least signif
Definition: FastUtils.h:160
ogdf::fast_multipole_embedder::LinearQuadtreeBuilder::tree
LinearQuadtree & tree
Definition: LinearQuadtreeBuilder.h:138
ogdf::fast_multipole_embedder::LinearQuadtree::isLeaf
bool isLeaf(NodeID nodeID) const
returns true if the given node index is a leaf
Definition: LinearQuadtree.h:409
ogdf::fast_multipole_embedder::LinearQuadtreeBuilder::lastLeaf
LinearQuadtree::NodeID lastLeaf
Definition: LinearQuadtreeBuilder.h:134
ogdf::end
HypergraphRegistry< HypernodeElement >::iterator end(const HypergraphRegistry< HypernodeElement > &self)
ogdf::fast_multipole_embedder::LinearQuadtree::root
NodeID root() const
returns the index of the root
Definition: LinearQuadtree.h:423
ogdf::fast_multipole_embedder::LinearQuadtree::mortonNr
MortonNR mortonNr(PointID point) const
Definition: LinearQuadtree.h:390
ogdf::fast_multipole_embedder::LinearQuadtreeBuilder::restoreChainLastNode
LinearQuadtree::NodeID restoreChainLastNode
Definition: LinearQuadtreeBuilder.h:139
ogdf::fast_multipole_embedder::LinearQuadtreeBuilder::LinearQuadtreeBuilder
LinearQuadtreeBuilder(LinearQuadtree &treeRef)
constructor
Definition: LinearQuadtreeBuilder.h:44
ogdf::fast_multipole_embedder::LinearQuadtreeBuilder::firstInner
LinearQuadtree::NodeID firstInner
Definition: LinearQuadtreeBuilder.h:130
ogdf::fast_multipole_embedder::LinearQuadtreeBuilder::numLeaves
uint32_t numLeaves
Definition: LinearQuadtreeBuilder.h:136
ogdf::fast_multipole_embedder::LinearQuadtreeBuilder::buildHierarchy
void buildHierarchy()
the main function for the new link-only recursive builder
ogdf::fast_multipole_embedder::LinearQuadtree::numberOfChilds
uint32_t numberOfChilds(NodeID nodeID) const
returns the number of children of node nodeID. for an inner node this is 1..4 and can be accessed by ...
Definition: LinearQuadtree.h:395