data: saving NameHierarchy directly to Node without TokenComponentName

This commit is contained in:
Eberhard Graether
2015-09-23 12:45:58 +02:00
parent b07bc7ed19
commit 391082160c
13 changed files with 69 additions and 219 deletions
-2
View File
@@ -113,8 +113,6 @@ add_files(
data/graph/token_component/TokenComponentConst.h
data/graph/token_component/TokenComponentFilePath.cpp
data/graph/token_component/TokenComponentFilePath.h
data/graph/token_component/TokenComponentName.cpp
data/graph/token_component/TokenComponentName.h
data/graph/token_component/TokenComponentStatic.cpp
data/graph/token_component/TokenComponentStatic.h
+1 -2
View File
@@ -9,7 +9,6 @@
#include "utility/utilityString.h"
#include "data/graph/token_component/TokenComponentAggregation.h"
#include "data/graph/token_component/TokenComponentName.h"
#include "data/graph/Graph.h"
#include "data/location/TokenLocation.h"
#include "data/location/TokenLocationFile.h"
@@ -1442,7 +1441,7 @@ Node* Storage::addNodeToGraph(const Id nodeId, Graph* graph) const
node = graph->createNode(
storageNode.id,
Node::intToType(storageNode.type),
std::make_shared<TokenComponentNameCached>(m_tokenIndex.getNameHierarchyForTokenId(nodeId))
m_tokenIndex.getNameHierarchyForTokenId(nodeId)
);
}
+2 -2
View File
@@ -40,7 +40,7 @@ void Graph::forEachToken(std::function<void(Token*)> func) const
forEachEdge(func);
}
Node* Graph::createNode(Id id, Node::NodeType type, std::shared_ptr<TokenComponentName> nameComponent)
Node* Graph::createNode(Id id, Node::NodeType type, NameHierarchy nameHierarchy)
{
Node* n = getNodeById(id);
if (n)
@@ -48,7 +48,7 @@ Node* Graph::createNode(Id id, Node::NodeType type, std::shared_ptr<TokenCompone
return n;
}
std::shared_ptr<Node> node = std::make_shared<Node>(id, type, nameComponent);
std::shared_ptr<Node> node = std::make_shared<Node>(id, type, nameHierarchy);
m_nodes.emplace(node->getId(), node);
return node.get();
}
+1 -1
View File
@@ -20,7 +20,7 @@ public:
void forEachEdge(std::function<void(Edge*)> func) const;
void forEachToken(std::function<void(Token*)> func) const;
Node* createNode(Id id, Node::NodeType type, std::shared_ptr<TokenComponentName> nameComponent);
Node* createNode(Id id, Node::NodeType type, NameHierarchy nameHierarchy);
Edge* createEdge(Id id, Edge::EdgeType type, Node* from, Node* to);
size_t getNodeCount() const;
+5 -16
View File
@@ -6,7 +6,6 @@
#include "data/graph/token_component/TokenComponentAbstraction.h"
#include "data/graph/token_component/TokenComponentConst.h"
#include "data/graph/token_component/TokenComponentName.h"
#include "data/graph/token_component/TokenComponentStatic.h"
#include "data/graph/token_component/TokenComponentFilePath.h"
@@ -97,17 +96,17 @@ Node::NodeType Node::intToType(int value)
return NODE_UNDEFINED;
}
Node::Node(Id id, NodeType type, std::shared_ptr<TokenComponentName> nameComponent)
Node::Node(Id id, NodeType type, NameHierarchy nameHierarchy)
: Token(id)
, m_type(type)
, m_nameComponent(nameComponent)
, m_nameHierarchy(nameHierarchy)
{
}
Node::Node(const Node& other)
: Token(other)
, m_type(other.m_type)
, m_nameComponent(other.m_nameComponent->copyComponentName())
, m_nameHierarchy(other.m_nameHierarchy)
{
}
@@ -139,22 +138,12 @@ bool Node::isType(NodeTypeMask mask) const
std::string Node::getName() const
{
return m_nameComponent->getName();
return m_nameHierarchy.getName();
}
std::string Node::getFullName() const
{
return m_nameComponent->getFullName();
}
const TokenComponentName* Node::getTokenComponentName() const
{
if (m_nameComponent)
{
return m_nameComponent.get();
}
return nullptr;
return m_nameHierarchy.getFullName();
}
const std::vector<Edge*>& Node::getEdges() const
+3 -6
View File
@@ -8,12 +8,11 @@
#include "data/graph/Edge.h"
#include "data/graph/Token.h"
#include "data/name/NameHierarchy.h"
class TokenComponentAbstraction;
class TokenComponentConst;
class TokenComponentName;
class TokenComponentStatic;
class TokenComponentSignature;
class TokenComponentFilePath;
class Node
@@ -50,7 +49,7 @@ public:
static const NodeTypeMask NODE_NOT_VISIBLE;
Node(Id id, NodeType type, std::shared_ptr<TokenComponentName> nameComponent);
Node(Id id, NodeType type, NameHierarchy nameHierarchy);
Node(const Node& other);
virtual ~Node();
@@ -60,7 +59,6 @@ public:
std::string getName() const;
std::string getFullName() const;
const TokenComponentName* getTokenComponentName() const;
const std::vector<Edge*>& getEdges() const;
@@ -90,7 +88,6 @@ public:
void addComponentAbstraction(std::shared_ptr<TokenComponentAbstraction> component);
void addComponentConst(std::shared_ptr<TokenComponentConst> component);
void addComponentStatic(std::shared_ptr<TokenComponentStatic> component);
void addComponentSignature(std::shared_ptr<TokenComponentSignature> component);
void addComponentFilePath(std::shared_ptr<TokenComponentFilePath> component);
// Logging.
@@ -103,7 +100,7 @@ private:
std::vector<Edge*> m_edges;
NodeType m_type;
std::shared_ptr<TokenComponentName> m_nameComponent;
NameHierarchy m_nameHierarchy;
};
std::ostream& operator<<(std::ostream& ostream, const Node& node);
@@ -1,85 +0,0 @@
#include "data/graph/token_component/TokenComponentName.h"
#include "utility/utilityString.h"
#include "data/search/SearchIndex.h"
TokenComponentName::TokenComponentName()
{
}
TokenComponentName::~TokenComponentName()
{
}
std::shared_ptr<TokenComponentName> TokenComponentName::copyComponentName() const
{
return std::dynamic_pointer_cast<TokenComponentName>(copy());
}
TokenComponentNameReferenced::TokenComponentNameReferenced(const SearchNode* searchNode)
: m_searchNode(searchNode)
{
}
TokenComponentNameReferenced::~TokenComponentNameReferenced()
{
}
std::shared_ptr<TokenComponent> TokenComponentNameReferenced::copy() const
{
return std::make_shared<TokenComponentNameCached>(m_searchNode->getNameHierarchy());
}
std::string TokenComponentNameReferenced::getName() const
{
return m_searchNode->getName();
}
std::string TokenComponentNameReferenced::getFullName() const
{
return m_searchNode->getFullName();
}
const SearchNode* TokenComponentNameReferenced::getSearchNode() const
{
return m_searchNode;
}
TokenComponentNameCached::TokenComponentNameCached(const std::vector<std::string>& nameHierarchy)
: m_nameHierarchy(nameHierarchy)
{
}
TokenComponentNameCached::TokenComponentNameCached(const NameHierarchy& nameHierarchy)
{
for (size_t i = 0; i < nameHierarchy.size(); i++)
{
m_nameHierarchy.push_back(nameHierarchy[i]->getFullName());
}
}
TokenComponentNameCached::~TokenComponentNameCached()
{
}
std::shared_ptr<TokenComponent> TokenComponentNameCached::copy() const
{
return std::make_shared<TokenComponentNameCached>(m_nameHierarchy);
}
std::string TokenComponentNameCached::getName() const
{
return m_nameHierarchy.back();
}
std::string TokenComponentNameCached::getFullName() const
{
return utility::join(m_nameHierarchy, "::");
}
const SearchNode* TokenComponentNameCached::getSearchNode() const
{
return nullptr;
}
@@ -1,64 +0,0 @@
#ifndef TOKEN_COMPONENT_NAME_H
#define TOKEN_COMPONENT_NAME_H
#include <string>
#include "data/graph/token_component/TokenComponent.h"
#include "data/name/NameHierarchy.h"
#include "data/search/SearchNode.h"
class TokenComponentName
: public TokenComponent
{
public:
TokenComponentName();
virtual ~TokenComponentName();
std::shared_ptr<TokenComponentName> copyComponentName() const;
virtual std::string getName() const = 0;
virtual std::string getFullName() const = 0;
virtual const SearchNode* getSearchNode() const = 0;
};
class TokenComponentNameReferenced
: public TokenComponentName
{
public:
TokenComponentNameReferenced(const SearchNode* searchNode);
virtual ~TokenComponentNameReferenced();
virtual std::shared_ptr<TokenComponent> copy() const;
virtual std::string getName() const;
virtual std::string getFullName() const;
virtual const SearchNode* getSearchNode() const;
private:
const SearchNode* m_searchNode;
};
class TokenComponentNameCached
: public TokenComponentName
{
public:
TokenComponentNameCached(const std::vector<std::string>& nameHierarchy);
TokenComponentNameCached(const NameHierarchy& nameHierarchy);
virtual ~TokenComponentNameCached();
virtual std::shared_ptr<TokenComponent> copy() const;
virtual std::string getName() const;
virtual std::string getFullName() const;
virtual const SearchNode* getSearchNode() const;
private:
std::vector<std::string> m_nameHierarchy; // TODO: use const NameHierarchy here
};
#endif // TOKEN_COMPONENT_NAME_H
+1 -1
View File
@@ -1,6 +1,6 @@
#include "data/name/NameElement.h"
NameElement::NameElement(std::string name)
NameElement::NameElement(const std::string& name)
: m_name(name)
{
}
+1 -1
View File
@@ -6,7 +6,7 @@
class NameElement
{
public:
NameElement(std::string name);
NameElement(const std::string& name);
~NameElement();
std::string getFullName() const;
+15
View File
@@ -4,6 +4,11 @@ NameHierarchy::NameHierarchy()
{
}
NameHierarchy::NameHierarchy(const std::string& name)
{
push(std::make_shared<NameElement>(name));
}
NameHierarchy::~NameHierarchy()
{
}
@@ -46,3 +51,13 @@ std::string NameHierarchy::getFullName() const
}
return name;
}
std::string NameHierarchy::getName() const
{
if (m_elements.size())
{
return m_elements.back()->getFullName();
}
return "";
}
+2
View File
@@ -11,6 +11,7 @@ class NameHierarchy
{
public:
NameHierarchy();
NameHierarchy(const std::string& name);
~NameHierarchy();
void push(std::shared_ptr<NameElement> element);
@@ -20,6 +21,7 @@ public:
size_t size() const;
std::string getFullName() const;
std::string getName() const;
private:
std::vector<std::shared_ptr<NameElement>> m_elements;