Separating interface and implementation of FIB. Right now everything is
kind of broken.
diff --git a/utils/trie.h b/utils/trie.h
index 47e62e5..86ca01f 100644
--- a/utils/trie.h
+++ b/utils/trie.h
@@ -29,6 +29,7 @@
#include <boost/functional/hash.hpp>
#include <boost/interprocess/smart_ptr/unique_ptr.hpp>
#include <boost/tuple/tuple.hpp>
+#include <boost/foreach.hpp>
namespace ndnSIM
{
@@ -43,11 +44,11 @@
typedef Payload* pointer_type;
typedef const Payload* const_pointer_type;
- static const Payload* empty_payload;
+ static Payload* empty_payload;
};
template<typename Payload>
-const Payload*
+Payload*
pointer_payload_traits<Payload>::empty_payload = 0;
template<typename Payload>
@@ -57,11 +58,11 @@
typedef ns3::Ptr<Payload> pointer_type;
typedef ns3::Ptr<const Payload> const_pointer_type;
- static const ns3::Ptr<const Payload> empty_payload;
+ static ns3::Ptr<Payload> empty_payload;
};
template<typename Payload>
-const ns3::Ptr<const Payload>
+ns3::Ptr<Payload>
smart_pointer_payload_traits<Payload>::empty_payload = 0;
@@ -109,6 +110,12 @@
inline
~trie ();
+
+ void
+ clear ()
+ {
+ children_.clear_and_dispose (trie_delete_disposer ());
+ }
// actual entry
friend bool
@@ -120,7 +127,7 @@
inline std::pair<iterator, bool>
insert (const FullKey &key,
- typename PayloadTraits::const_pointer_type payload);
+ typename PayloadTraits::pointer_type payload);
/**
* @brief Removes payload (if it exists) and if there are no children, prunes parents trie
@@ -134,6 +141,12 @@
inline void
prune ();
+ 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
* @param key the key for which to perform the longest prefix match
@@ -175,8 +188,14 @@
return payload_;
}
+ typename PayloadTraits::pointer_type
+ payload ()
+ {
+ return payload_;
+ }
+
void
- set_payload (typename PayloadTraits::const_pointer_type payload)
+ set_payload (typename PayloadTraits::pointer_type payload)
{
payload_ = payload;
}
@@ -237,7 +256,7 @@
buckets_array buckets_;
unordered_set children_;
- typename PayloadTraits::const_pointer_type payload_;
+ typename PayloadTraits::pointer_type payload_;
trie *parent_; // to make cleaning effective
};
@@ -267,7 +286,7 @@
inline
std::pair<typename trie<FullKey, Payload, PayloadTraits, PolicyHook>::iterator, bool>
trie<FullKey, Payload, PayloadTraits, PolicyHook>
-::insert (const FullKey &key, typename PayloadTraits::const_pointer_type payload)
+::insert (const FullKey &key, typename PayloadTraits::pointer_type payload)
{
trie *trieNode = this;