src: converted NodeType to a class
NodeType internally still uses the Type enum
This commit is contained in:
@@ -89,7 +89,7 @@ Edge::EdgeType Edge::getType() const
|
||||
return m_type;
|
||||
}
|
||||
|
||||
bool Edge::isType(EdgeTypeMask mask) const
|
||||
bool Edge::isType(TypeMask mask) const
|
||||
{
|
||||
return (m_type & mask) > 0;
|
||||
}
|
||||
|
||||
@@ -14,8 +14,8 @@ class Edge
|
||||
: public Token
|
||||
{
|
||||
public:
|
||||
typedef int EdgeTypeMask;
|
||||
enum EdgeType : EdgeTypeMask
|
||||
typedef int TypeMask;
|
||||
enum EdgeType : TypeMask
|
||||
{
|
||||
EDGE_UNDEFINED = 0x0,
|
||||
EDGE_MEMBER = 0x1,
|
||||
@@ -43,7 +43,7 @@ public:
|
||||
virtual ~Edge();
|
||||
|
||||
EdgeType getType() const;
|
||||
bool isType(EdgeTypeMask mask) const;
|
||||
bool isType(TypeMask mask) const;
|
||||
|
||||
Node* getFrom() const;
|
||||
Node* getTo() const;
|
||||
|
||||
@@ -41,7 +41,7 @@ void Graph::forEachToken(std::function<void(Token*)> func) const
|
||||
forEachEdge(func);
|
||||
}
|
||||
|
||||
Node* Graph::createNode(Id id, Node::NodeType type, NameHierarchy nameHierarchy, bool defined)
|
||||
Node* Graph::createNode(Id id, NodeType type, NameHierarchy nameHierarchy, bool defined)
|
||||
{
|
||||
Node* n = getNodeById(id);
|
||||
if (n)
|
||||
|
||||
@@ -27,7 +27,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, NameHierarchy nameHierarchy, bool defined);
|
||||
Node* createNode(Id id, NodeType type, NameHierarchy nameHierarchy, bool defined);
|
||||
Edge* createEdge(Id id, Edge::EdgeType type, Node* from, Node* to);
|
||||
|
||||
size_t getNodeCount() const;
|
||||
|
||||
+9
-162
@@ -11,143 +11,6 @@
|
||||
#include "data/graph/token_component/TokenComponentStatic.h"
|
||||
#include "data/graph/token_component/TokenComponentFilePath.h"
|
||||
|
||||
const Node::NodeTypeMask Node::NODE_NOT_VISIBLE =
|
||||
NODE_NAMESPACE | NODE_PACKAGE;
|
||||
|
||||
const Node::NodeTypeMask Node::NODE_USEABLE_TYPE =
|
||||
NODE_NON_INDEXED | NODE_BUILTIN_TYPE | NODE_STRUCT | NODE_CLASS | NODE_ENUM | NODE_UNION | NODE_INTERFACE |
|
||||
NODE_TYPEDEF;
|
||||
|
||||
const Node::NodeTypeMask Node::NODE_INHERITABLE_TYPE =
|
||||
NODE_NON_INDEXED | NODE_BUILTIN_TYPE | NODE_TYPE | NODE_STRUCT | NODE_CLASS | NODE_INTERFACE;
|
||||
|
||||
const Node::NodeTypeMask Node::NODE_MEMBER_TYPE =
|
||||
NODE_METHOD | NODE_FIELD | NODE_CLASS | NODE_INTERFACE | NODE_STRUCT | NODE_UNION | NODE_TYPEDEF | NODE_ENUM;
|
||||
|
||||
const Node::NodeTypeMask Node::NODE_COLLAPSIBLE_TYPE =
|
||||
NODE_NON_INDEXED | NODE_TYPE | NODE_BUILTIN_TYPE | NODE_CLASS | NODE_STRUCT | NODE_ENUM | NODE_UNION |
|
||||
NODE_INTERFACE;
|
||||
|
||||
std::string Node::getUnderscoredTypeString(NodeType type)
|
||||
{
|
||||
return utility::replace(utility::replace(getReadableTypeString(type), "-", "_"), " ", "_");
|
||||
}
|
||||
|
||||
std::string Node::getReadableTypeString(NodeType type)
|
||||
{
|
||||
switch (type)
|
||||
{
|
||||
case NODE_NON_INDEXED:
|
||||
return "non-indexed";
|
||||
case NODE_BUILTIN_TYPE:
|
||||
return "built-in type";
|
||||
case NODE_TYPE:
|
||||
return "type";
|
||||
case NODE_NAMESPACE:
|
||||
return "namespace";
|
||||
case NODE_PACKAGE:
|
||||
return "package";
|
||||
case NODE_STRUCT:
|
||||
return "struct";
|
||||
case NODE_CLASS:
|
||||
return "class";
|
||||
case NODE_INTERFACE:
|
||||
return "interface";
|
||||
case NODE_GLOBAL_VARIABLE:
|
||||
return "global variable";
|
||||
case NODE_FIELD:
|
||||
return "field";
|
||||
case NODE_FUNCTION:
|
||||
return "function";
|
||||
case NODE_METHOD:
|
||||
return "method";
|
||||
case NODE_ENUM:
|
||||
return "enum";
|
||||
case NODE_ENUM_CONSTANT:
|
||||
return "enum constant";
|
||||
case NODE_TYPEDEF:
|
||||
return "typedef";
|
||||
case NODE_TEMPLATE_PARAMETER_TYPE:
|
||||
return "template parameter type";
|
||||
case NODE_TYPE_PARAMETER:
|
||||
return "type parameter";
|
||||
case NODE_FILE:
|
||||
return "file";
|
||||
case NODE_MACRO:
|
||||
return "macro";
|
||||
case NODE_UNION:
|
||||
return "union";
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
Node::NodeType Node::getTypeForReadableTypeString(const std::string str)
|
||||
{
|
||||
for (Node::NodeTypeMask mask = 1; mask <= NODE_MAX_VALUE; mask *= 2)
|
||||
{
|
||||
Node::NodeType type = intToType(mask);
|
||||
if (getReadableTypeString(type) == str)
|
||||
{
|
||||
return type;
|
||||
}
|
||||
}
|
||||
|
||||
return NODE_NON_INDEXED;
|
||||
}
|
||||
|
||||
int Node::typeToInt(NodeType type)
|
||||
{
|
||||
return type;
|
||||
}
|
||||
|
||||
Node::NodeType Node::intToType(int value)
|
||||
{
|
||||
switch (value)
|
||||
{
|
||||
case NODE_TYPE:
|
||||
return NODE_TYPE;
|
||||
case NODE_BUILTIN_TYPE:
|
||||
return NODE_BUILTIN_TYPE;
|
||||
case NODE_NAMESPACE:
|
||||
return NODE_NAMESPACE;
|
||||
case NODE_PACKAGE:
|
||||
return NODE_PACKAGE;
|
||||
case NODE_STRUCT:
|
||||
return NODE_STRUCT;
|
||||
case NODE_CLASS:
|
||||
return NODE_CLASS;
|
||||
case NODE_INTERFACE:
|
||||
return NODE_INTERFACE;
|
||||
case NODE_GLOBAL_VARIABLE:
|
||||
return NODE_GLOBAL_VARIABLE;
|
||||
case NODE_FIELD:
|
||||
return NODE_FIELD;
|
||||
case NODE_FUNCTION:
|
||||
return NODE_FUNCTION;
|
||||
case NODE_METHOD:
|
||||
return NODE_METHOD;
|
||||
case NODE_ENUM:
|
||||
return NODE_ENUM;
|
||||
case NODE_ENUM_CONSTANT:
|
||||
return NODE_ENUM_CONSTANT;
|
||||
case NODE_TYPEDEF:
|
||||
return NODE_TYPEDEF;
|
||||
case NODE_TEMPLATE_PARAMETER_TYPE:
|
||||
return NODE_TEMPLATE_PARAMETER_TYPE;
|
||||
case NODE_TYPE_PARAMETER:
|
||||
return NODE_TYPE_PARAMETER;
|
||||
case NODE_FILE:
|
||||
return NODE_FILE;
|
||||
case NODE_MACRO:
|
||||
return NODE_MACRO;
|
||||
case NODE_UNION:
|
||||
return NODE_UNION;
|
||||
}
|
||||
|
||||
return NODE_NON_INDEXED;
|
||||
}
|
||||
|
||||
Node::Node(Id id, NodeType type, NameHierarchy nameHierarchy, bool defined)
|
||||
: Token(id)
|
||||
, m_type(type)
|
||||
@@ -174,26 +37,26 @@ Node::~Node()
|
||||
{
|
||||
}
|
||||
|
||||
Node::NodeType Node::getType() const
|
||||
NodeType Node::getType() const
|
||||
{
|
||||
return m_type;
|
||||
}
|
||||
|
||||
void Node::setType(NodeType type)
|
||||
{
|
||||
if (!isType(type | NODE_NON_INDEXED))
|
||||
if (!isType(type.getType() | NodeType::NODE_NON_INDEXED))
|
||||
{
|
||||
LOG_WARNING(
|
||||
"Cannot change NodeType after it was already set from " + getReadableTypeString() + " to " + getReadableTypeString(type)
|
||||
"Cannot change NodeType after it was already set from " + getReadableTypeString() + " to " + type.getReadableTypeString()
|
||||
);
|
||||
return;
|
||||
}
|
||||
m_type = type;
|
||||
}
|
||||
|
||||
bool Node::isType(NodeTypeMask mask) const
|
||||
bool Node::isType(NodeType::TypeMask mask) const
|
||||
{
|
||||
return (m_type & mask) > 0;
|
||||
return (m_type.getType() & mask) > 0;
|
||||
}
|
||||
|
||||
std::string Node::getName() const
|
||||
@@ -317,12 +180,12 @@ Edge* Node::findEdge(std::function<bool(Edge*)> func) const
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Edge* Node::findEdgeOfType(Edge::EdgeTypeMask mask) const
|
||||
Edge* Node::findEdgeOfType(Edge::TypeMask mask) const
|
||||
{
|
||||
return findEdgeOfType(mask, [](Edge* e){ return true; });
|
||||
}
|
||||
|
||||
Edge* Node::findEdgeOfType(Edge::EdgeTypeMask mask, std::function<bool(Edge*)> func) const
|
||||
Edge* Node::findEdgeOfType(Edge::TypeMask mask, std::function<bool(Edge*)> func) const
|
||||
{
|
||||
auto it = find_if(m_edges.begin(), m_edges.end(),
|
||||
[mask, func](std::pair<Id, Edge*> p)
|
||||
@@ -374,7 +237,7 @@ void Node::forEachEdge(std::function<void(Edge*)> func) const
|
||||
);
|
||||
}
|
||||
|
||||
void Node::forEachEdgeOfType(Edge::EdgeTypeMask mask, std::function<void(Edge*)> func) const
|
||||
void Node::forEachEdgeOfType(Edge::TypeMask mask, std::function<void(Edge*)> func) const
|
||||
{
|
||||
for_each(m_edges.begin(), m_edges.end(),
|
||||
[mask, func](std::pair<Id, Edge*> p)
|
||||
@@ -432,10 +295,6 @@ void Node::addComponentAbstraction(std::shared_ptr<TokenComponentAbstraction> co
|
||||
// LOG_ERROR("TokenComponentAbstraction has been set before!");
|
||||
return;
|
||||
}
|
||||
else if (!isType(NODE_METHOD))
|
||||
{
|
||||
LOG_ERROR("TokenComponentAbstraction can't be set on node of type: " + getReadableTypeString());
|
||||
}
|
||||
else
|
||||
{
|
||||
addComponent(component);
|
||||
@@ -449,10 +308,6 @@ void Node::addComponentConst(std::shared_ptr<TokenComponentConst> component)
|
||||
// LOG_ERROR("TokenComponentConst has been set before!");
|
||||
return;
|
||||
}
|
||||
else if (!isType(NODE_METHOD))
|
||||
{
|
||||
LOG_ERROR("TokenComponentConst can't be set on node of type: " + getReadableTypeString());
|
||||
}
|
||||
else
|
||||
{
|
||||
addComponent(component);
|
||||
@@ -466,10 +321,6 @@ void Node::addComponentStatic(std::shared_ptr<TokenComponentStatic> component)
|
||||
// LOG_ERROR("TokenComponentStatic has been set before!");
|
||||
return;
|
||||
}
|
||||
else if (!isType(NODE_GLOBAL_VARIABLE | NODE_FIELD | NODE_FUNCTION | NODE_METHOD))
|
||||
{
|
||||
LOG_ERROR("TokenComponentStatic can't be set on node of type: " + getReadableTypeString());
|
||||
}
|
||||
else
|
||||
{
|
||||
addComponent(component);
|
||||
@@ -483,10 +334,6 @@ void Node::addComponentFilePath(std::shared_ptr<TokenComponentFilePath> componen
|
||||
// LOG_ERROR("TokenComponentFilePath has been set before!");
|
||||
return;
|
||||
}
|
||||
else if (!isType(NODE_FILE))
|
||||
{
|
||||
LOG_ERROR("TokenComponentFilePath can't be set on node of type: " + getReadableTypeString());
|
||||
}
|
||||
else
|
||||
{
|
||||
addComponent(component);
|
||||
@@ -508,7 +355,7 @@ void Node::addComponentAccess(std::shared_ptr<TokenComponentAccess> component)
|
||||
|
||||
std::string Node::getReadableTypeString() const
|
||||
{
|
||||
return getReadableTypeString(m_type);
|
||||
return m_type.getReadableTypeString();
|
||||
}
|
||||
|
||||
std::string Node::getAsString() const
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
#include "data/graph/Edge.h"
|
||||
#include "data/graph/Token.h"
|
||||
#include "data/name/NameHierarchy.h"
|
||||
#include "data/NodeType.h"
|
||||
|
||||
class TokenComponentAbstraction;
|
||||
class TokenComponentAccess;
|
||||
@@ -21,56 +22,13 @@ class Node
|
||||
: public Token
|
||||
{
|
||||
public:
|
||||
typedef int NodeTypeMask;
|
||||
enum NodeType : NodeTypeMask
|
||||
{ // make sure that the value of 0x0 is not used here because it doesn't work for bitmasking.
|
||||
NODE_NON_INDEXED = 0x1,
|
||||
NODE_TYPE = 0x2,
|
||||
NODE_BUILTIN_TYPE = 0x4,
|
||||
|
||||
NODE_NAMESPACE = 0x8,
|
||||
NODE_PACKAGE = 0x10,
|
||||
NODE_STRUCT = 0x20,
|
||||
NODE_CLASS = 0x40,
|
||||
NODE_INTERFACE = 0x80,
|
||||
NODE_GLOBAL_VARIABLE = 0x100,
|
||||
NODE_FIELD = 0x200,
|
||||
NODE_FUNCTION = 0x400,
|
||||
NODE_METHOD = 0x800,
|
||||
|
||||
NODE_ENUM = 0x1000,
|
||||
NODE_ENUM_CONSTANT = 0x2000,
|
||||
NODE_TYPEDEF = 0x4000,
|
||||
NODE_TEMPLATE_PARAMETER_TYPE = 0x8000,
|
||||
NODE_TYPE_PARAMETER = 0x10000,
|
||||
|
||||
NODE_FILE = 0x20000,
|
||||
NODE_MACRO = 0x40000,
|
||||
NODE_UNION = 0x80000,
|
||||
|
||||
NODE_MAX_VALUE = NODE_UNION
|
||||
};
|
||||
|
||||
static std::string getUnderscoredTypeString(NodeType type);
|
||||
static std::string getReadableTypeString(NodeType type);
|
||||
static Node::NodeType getTypeForReadableTypeString(const std::string str);
|
||||
|
||||
static int typeToInt(NodeType type);
|
||||
static NodeType intToType(int value);
|
||||
|
||||
static const NodeTypeMask NODE_NOT_VISIBLE;
|
||||
static const NodeTypeMask NODE_USEABLE_TYPE;
|
||||
static const NodeTypeMask NODE_INHERITABLE_TYPE;
|
||||
static const NodeTypeMask NODE_MEMBER_TYPE;
|
||||
static const NodeTypeMask NODE_COLLAPSIBLE_TYPE;
|
||||
|
||||
Node(Id id, NodeType type, NameHierarchy nameHierarchy, bool defined);
|
||||
Node(const Node& other);
|
||||
virtual ~Node();
|
||||
|
||||
NodeType getType() const;
|
||||
void setType(NodeType type);
|
||||
bool isType(NodeTypeMask mask) const;
|
||||
bool isType(NodeType::TypeMask mask) const;
|
||||
|
||||
std::string getName() const;
|
||||
std::string getFullName() const;
|
||||
@@ -98,12 +56,12 @@ public:
|
||||
Edge* getMemberEdge() const;
|
||||
|
||||
Edge* findEdge(std::function<bool(Edge*)> func) const;
|
||||
Edge* findEdgeOfType(Edge::EdgeTypeMask mask) const;
|
||||
Edge* findEdgeOfType(Edge::EdgeTypeMask mask, std::function<bool(Edge*)> func) const;
|
||||
Edge* findEdgeOfType(Edge::TypeMask mask) const;
|
||||
Edge* findEdgeOfType(Edge::TypeMask mask, std::function<bool(Edge*)> func) const;
|
||||
Node* findChildNode(std::function<bool(Node*)> func) const;
|
||||
|
||||
void forEachEdge(std::function<void(Edge*)> func) const;
|
||||
void forEachEdgeOfType(Edge::EdgeTypeMask mask, std::function<void(Edge*)> func) const;
|
||||
void forEachEdgeOfType(Edge::TypeMask mask, std::function<void(Edge*)> func) const;
|
||||
void forEachChildNode(std::function<void(Node*)> func) const;
|
||||
void forEachNodeRecursive(std::function<void(const Node*)> func) const;
|
||||
|
||||
@@ -116,7 +74,6 @@ public:
|
||||
void addComponentConst(std::shared_ptr<TokenComponentConst> component);
|
||||
void addComponentStatic(std::shared_ptr<TokenComponentStatic> component);
|
||||
void addComponentFilePath(std::shared_ptr<TokenComponentFilePath> component);
|
||||
void addComponentSignature(std::shared_ptr<TokenComponentSignature> component);
|
||||
void addComponentAccess(std::shared_ptr<TokenComponentAccess> component);
|
||||
|
||||
// Logging.
|
||||
|
||||
Reference in New Issue
Block a user