src: converted NodeType to a class

NodeType internally still uses the Type enum
This commit is contained in:
mlangkabel
2017-11-23 17:05:15 +01:00
parent c512992e2c
commit 90e17c5868
52 changed files with 779 additions and 656 deletions
+1 -1
View File
@@ -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;
}
+3 -3
View File
@@ -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;
+1 -1
View File
@@ -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)
+1 -1
View File
@@ -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
View File
@@ -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
+5 -48
View File
@@ -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.