data: added HierarchyCache for storing member relationships

This change introduces the HierarchyCache that caches the member relationships of nodes in memory for faster graph
retrieval. Storing these relationships allows for retrieving nodes and edges as lists from the SqliteStorage at once
which results in a 10 fold speed improvement.
This commit is contained in:
Eberhard Graether
2015-09-24 12:43:49 +02:00
parent 5c06dedf7c
commit 97e49d9b3f
7 changed files with 339 additions and 158 deletions
+57
View File
@@ -0,0 +1,57 @@
#ifndef HIERARCHY_CACHE_H
#define HIERARCHY_CACHE_H
#include <map>
#include <memory>
#include <vector>
#include "utility/types.h"
class HierarchyCache
{
public:
void clear();
void createConnection(Id edgeId, Id fromId, Id toId, bool fromVisible);
Id getLastVisibleParentNodeId(Id nodeId) const;
void addAllChildIdsForNodeId(Id nodeId, std::vector<Id>* nodeIds, std::vector<Id>* edgeIds) const;
private:
class HierarchyNode
{
public:
HierarchyNode(Id nodeId);
Id getNodeId() const;
Id getEdgeId() const;
void setEdgeId(Id edgeId);
HierarchyNode* getParent() const;
void setParent(HierarchyNode* parent);
void addChild(HierarchyNode* child);
const std::vector<HierarchyNode*>& getChildren() const;
void addChildIdsRecursive(std::vector<Id>* nodeIds, std::vector<Id>* edgeIds) const;
bool isVisible() const;
void setIsVisible(bool isVisible);
private:
const Id m_nodeId;
Id m_edgeId;
HierarchyNode* m_parent;
std::vector<HierarchyNode*> m_children;
bool m_isVisible;
};
HierarchyNode* getNode(Id nodeId) const;
HierarchyNode* createNode(Id nodeId);
std::map<Id, std::shared_ptr<HierarchyNode>> m_nodes;
};
#endif // HIERARCHY_CACHE_H