logic: Only request unconnected child nodes when expanding node

* increases graph performance by ~30%
This commit is contained in:
Eberhard Graether
2017-06-01 14:48:03 +02:00
parent 8660ab5b14
commit aaca8618e2
13 changed files with 336 additions and 219 deletions
+13 -14
View File
@@ -13,20 +13,19 @@ class HierarchyCache
public:
void clear();
void createConnection(Id edgeId, Id fromId, Id toId, bool sourceVisible, bool sourceIndexed, bool targetIndexed);
void createConnection(Id edgeId, Id fromId, Id toId, bool sourceVisible, bool targetImplicit);
Id getLastVisibleParentNodeId(Id nodeId) const;
size_t getIndexOfLastVisibleParentNode(Id nodeId) const;
void addAllChildIdsForNodeId(Id nodeId, std::set<Id>* nodeIds, std::set<Id>* edgeIds) const;
void addAllVisibleParentsAndChildIdsForNodeId(Id nodeId, std::set<Id>* nodeIds, std::set<Id>* edgeIds) const;
void addAllVisibleParentsRecursive(Id nodeId, std::set<Id>* nodeIds, std::set<Id>* edgeIds) const;
void addAllVisibleParentIdsForNodeId(Id nodeId, std::set<Id>* nodeIds, std::set<Id>* edgeIds) const;
void addFirstChildIdsForNodeId(Id nodeId, std::vector<Id>* nodeIds) const;
void addFirstVisibleChildIdsForNodeId(Id nodeId, std::vector<Id>* nodeIds) const;
void addAllChildIdsForNodeId(Id nodeId, std::set<Id>* nodeIds, std::set<Id>* edgeIds) const;
void addFirstNonImplicitChildIdsForNodeId(Id nodeId, std::vector<Id>* nodeIds, std::vector<Id>* edgeIds) const;
size_t getFirstNonImplicitChildIdsCountForNodeId(Id nodeId) const;
bool isChildOfVisibleNodeOrInvisible(Id nodeId) const;
bool isIndexed(Id nodeId) const;
bool nodeHasChildren(Id nodeId) const;
@@ -45,18 +44,18 @@ private:
void setParent(HierarchyNode* parent);
void addChild(HierarchyNode* child);
const std::vector<HierarchyNode*>& getChildren() const;
void addChildIds(std::vector<Id>* nodeIds) const;
void addChildIds(std::set<Id>* nodeIds, std::set<Id>* edgeIds) const;
size_t getChildrenCount() const;
size_t getNonImplicitChildrenCount() const;
void addNonImplicitChildIds(std::vector<Id>* nodeIds, std::vector<Id>* edgeIds) const;
void addChildIdsRecursive(std::set<Id>* nodeIds, std::set<Id>* edgeIds) const;
void addVisibleNodeIdsRecursive(std::vector<Id>* nodeIds) const;
bool isVisible() const;
void setIsVisible(bool isVisible);
bool isIndexed() const;
void setIsIndexed(bool isIndexed);
bool isImplicit() const;
void setIsImplicit(bool isImplicit);
private:
const Id m_nodeId;
@@ -66,7 +65,7 @@ private:
std::vector<HierarchyNode*> m_children;
bool m_isVisible;
bool m_isIndexed;
bool m_isImplicit;
};
HierarchyNode* getNode(Id nodeId) const;