#pragma once #include #include #include namespace Moses2 { template class Node { public: Node() { } Node(const ValueClass& value) : m_value(value) { } ~Node(); void setKey(const KeyClass& key); void setValue(const ValueClass& value) { m_value = value; } Node* findSub(const KeyClass& key); const Node* findSub(const KeyClass& key) const; Node *addSubnode(const KeyClass& cKey) { Node *node = findSub(cKey); if (node) { return node; } else { node = new Node(); subNodes[cKey] = node; return node; } } std::vector getSubnodes(); const ValueClass &getValue() const { return m_value; } private: boost::unordered_map subNodes; ValueClass m_value; }; template Node::~Node() { typename boost::unordered_map::iterator iter; for (iter = subNodes.begin(); iter != subNodes.end(); ++iter) { Node *node = iter->second; delete node; } } template const Node* Node::findSub( const KeyClass& cKey) const { typename boost::unordered_map::const_iterator iter; iter = subNodes.find(cKey); if (iter != subNodes.end()) { Node *node = iter->second; return node; } return NULL; } template Node* Node::findSub( const KeyClass& cKey) { typename boost::unordered_map::iterator iter; iter = subNodes.find(cKey); if (iter != subNodes.end()) { Node *node = iter->second; return node; } return NULL; } }