Some progress on CcnxPit. Partially working
diff --git a/utils/trie.h b/utils/trie.h
index 1b2056e..50288af 100644
--- a/utils/trie.h
+++ b/utils/trie.h
@@ -71,24 +71,23 @@
// forward declarations
//
template<typename FullKey,
- typename Payload,
typename PayloadTraits,
typename PolicyHook >
class trie;
-template<typename FullKey, typename Payload, typename PayloadTraits, typename PolicyHook>
+template<typename FullKey, typename PayloadTraits, typename PolicyHook>
inline std::ostream&
operator << (std::ostream &os,
- const trie<FullKey, Payload, PayloadTraits, PolicyHook> &trie_node);
+ const trie<FullKey, PayloadTraits, PolicyHook> &trie_node);
-template<typename FullKey, typename Payload, typename PayloadTraits, typename PolicyHook>
+template<typename FullKey, typename PayloadTraits, typename PolicyHook>
bool
-operator== (const trie<FullKey, Payload, PayloadTraits, PolicyHook> &a,
- const trie<FullKey, Payload, PayloadTraits, PolicyHook> &b);
+operator== (const trie<FullKey, PayloadTraits, PolicyHook> &a,
+ const trie<FullKey, PayloadTraits, PolicyHook> &b);
-template<typename FullKey, typename Payload, typename PayloadTraits, typename PolicyHook >
+template<typename FullKey, typename PayloadTraits, typename PolicyHook >
std::size_t
-hash_value (const trie<FullKey, Payload, PayloadTraits, PolicyHook> &trie_node);
+hash_value (const trie<FullKey, PayloadTraits, PolicyHook> &trie_node);
///////////////////////////////////////////////////
// actual definition
@@ -97,7 +96,7 @@
class trie_iterator;
template<typename FullKey,
- typename Payload, typename PayloadTraits,
+ typename PayloadTraits,
typename PolicyHook >
class trie
{
@@ -109,6 +108,8 @@
typedef trie_iterator<trie> recursive_iterator;
typedef trie_iterator<const trie> const_recursive_iterator;
+
+ typedef PayloadTraits payload_traits;
inline
trie (const Key &key, size_t bucketSize = 10, size_t bucketIncrement = 10)
@@ -155,11 +156,11 @@
// actual entry
friend bool
- operator== <> (const trie<FullKey, Payload, PayloadTraits, PolicyHook> &a,
- const trie<FullKey, Payload, PayloadTraits, PolicyHook> &b);
+ operator== <> (const trie<FullKey, PayloadTraits, PolicyHook> &a,
+ const trie<FullKey, PayloadTraits, PolicyHook> &b);
friend std::size_t
- hash_value <> (const trie<FullKey, Payload, PayloadTraits, PolicyHook> &trie_node);
+ hash_value <> (const trie<FullKey, PayloadTraits, PolicyHook> &trie_node);
inline std::pair<iterator, bool>
insert (const FullKey &key,
@@ -231,11 +232,11 @@
return this;
}
- inline boost::tuple<const iterator, bool, const iterator>
- find (const FullKey &key) const
- {
- return const_cast<trie*> (this)->find (key);
- }
+ // inline boost::tuple<const iterator, bool, const iterator>
+ // find (const FullKey &key) const
+ // {
+ // return const_cast<trie*> (this)->find (key);
+ // }
/**
* @brief Perform the longest prefix match
@@ -280,7 +281,7 @@
if (payload_ != PayloadTraits::empty_payload)
return this;
- typedef trie<FullKey, Payload, PayloadTraits, PolicyHook> trie;
+ typedef trie<FullKey, PayloadTraits, PolicyHook> trie;
for (typename trie::unordered_set::iterator subnode = children_.begin ();
subnode != children_.end ();
subnode++ )
@@ -300,13 +301,13 @@
* @returns end() or a valid iterator pointing to the trie leaf (order is not defined, enumeration )
*/
template<class Predicate>
- inline iterator
+ inline const iterator
find_if (Predicate pred)
{
if (payload_ != PayloadTraits::empty_payload && pred (payload_))
return this;
- typedef trie<FullKey, Payload, PayloadTraits, PolicyHook> trie;
+ typedef trie<FullKey, PayloadTraits, PolicyHook> trie;
for (typename trie::unordered_set::iterator subnode = children_.begin ();
subnode != children_.end ();
subnode++ )
@@ -414,12 +415,12 @@
-template<typename FullKey, typename Payload, typename PayloadTraits, typename PolicyHook>
+template<typename FullKey, typename PayloadTraits, typename PolicyHook>
inline std::ostream&
-operator << (std::ostream &os, const trie<FullKey, Payload, PayloadTraits, PolicyHook> &trie_node)
+operator << (std::ostream &os, const trie<FullKey, PayloadTraits, PolicyHook> &trie_node)
{
os << "# " << trie_node.key_ << ((trie_node.payload_ != 0)?"*":"") << std::endl;
- typedef trie<FullKey, Payload, PayloadTraits, PolicyHook> trie;
+ typedef trie<FullKey, PayloadTraits, PolicyHook> trie;
for (typename trie::unordered_set::const_iterator subnode = trie_node.children_.begin ();
subnode != trie_node.children_.end ();
@@ -436,9 +437,9 @@
return os;
}
-template<typename FullKey, typename Payload, typename PayloadTraits, typename PolicyHook>
+template<typename FullKey, typename PayloadTraits, typename PolicyHook>
inline void
-trie<FullKey, Payload, PayloadTraits, PolicyHook>
+trie<FullKey, PayloadTraits, PolicyHook>
::PrintStat (std::ostream &os) const
{
os << "# " << key_ << ((payload_ != 0)?"*":"") << ": " << children_.size() << " children" << std::endl;
@@ -450,7 +451,7 @@
}
os << "\n";
- typedef trie<FullKey, Payload, PayloadTraits, PolicyHook> trie;
+ typedef trie<FullKey, PayloadTraits, PolicyHook> trie;
for (typename trie::unordered_set::const_iterator subnode = children_.begin ();
subnode != children_.end ();
subnode++ )
@@ -461,17 +462,17 @@
}
-template<typename FullKey, typename Payload, typename PayloadTraits, typename PolicyHook>
+template<typename FullKey, typename PayloadTraits, typename PolicyHook>
inline bool
-operator == (const trie<FullKey, Payload, PayloadTraits, PolicyHook> &a,
- const trie<FullKey, Payload, PayloadTraits, PolicyHook> &b)
+operator == (const trie<FullKey, PayloadTraits, PolicyHook> &a,
+ const trie<FullKey, PayloadTraits, PolicyHook> &b)
{
return a.key_ == b.key_;
}
-template<typename FullKey, typename Payload, typename PayloadTraits, typename PolicyHook>
+template<typename FullKey, typename PayloadTraits, typename PolicyHook>
inline std::size_t
-hash_value (const trie<FullKey, Payload, PayloadTraits, PolicyHook> &trie_node)
+hash_value (const trie<FullKey, PayloadTraits, PolicyHook> &trie_node)
{
return boost::hash_value (trie_node.key_);
}