Added a lame implementation of the iterator symbol
[fridhskrift.git] / symbol.cpp
blobe326c7aa38ce4d6a679674f1c43aa300a4022c75
1 #include <fridh/symbol_tree_node.hpp>
2 #include <boost/foreach.hpp>
4 namespace fridh
6 symbol_tree_node::symbol_tree_node():
7 parent(0)
11 symbol_tree_node::symbol_tree_node(symbol::type type):
12 type(type),
13 parent(0)
15 switch(type)
17 case variable::variable:
18 variable_pointer = new variable;
19 break;
21 case variable::function:
22 function_pointer = new function;
23 break;
25 case variable::class_symbol:
26 class_pointer = new class_type;
27 break;
31 symbol_tree_node::~symbol_tree_node()
33 BOOST_FOREACH(symbol_tree_node * i, children)
34 delete i;
36 switch(type)
38 case variable::variable:
39 delete variable_pointer;
40 break;
42 case variable::function:
43 delete function_pointer;
44 break;
46 case variable::class_symbol:
47 delete class_pointer;
48 break;
50 case variable::module:
51 delete module_pointer;
52 break;
56 bool symbol_tree_node::exists(std::string const & name)
58 node_children::iterator iterator = children.find(name);
59 return iterator != children.end();
62 bool symbol_tree_node::find_entity(std::string const & name, symbol_tree_node * & output)
64 node_children::iterator iterator = children.find(name);
65 if(iterator == children.end())
67 if(parent == 0)
68 return false;
69 return parent->find_entity(name, output);
72 output = &iterator->second;
73 return true;