Small changes in in FIB re-implementations with tries, rescanned python bindings
diff --git a/model/ccnx-fib-impl.cc b/model/ccnx-fib-impl.cc
index ba970fd..9f9394e 100644
--- a/model/ccnx-fib-impl.cc
+++ b/model/ccnx-fib-impl.cc
@@ -91,12 +91,12 @@
CcnxFib::iterator
CcnxFibImpl::Add (const Ptr<const CcnxNameComponents> &prefix, Ptr<CcnxFace> face, int32_t metric)
{
- NS_LOG_FUNCTION (this);
- // NS_LOG_FUNCTION(this->GetObject<Node> ()->GetId () << boost::cref(*prefix) << boost::cref(*face) << metric);
+ NS_LOG_FUNCTION (this->GetObject<Node> ()->GetId () << boost::cref(*prefix) << boost::cref(*face) << metric);
// will add entry if doesn't exists, or just return an iterator to the existing entry
- Ptr<CcnxFibEntry> newEntry = Create<CcnxFibEntry> (prefix);
+ Ptr<CcnxFibEntryImpl> newEntry = Create<CcnxFibEntryImpl> (prefix);
std::pair< super::iterator, bool > result = super::insert (*prefix, newEntry);
+ newEntry->SetTrie (result.first);
NS_ASSERT_MSG (face != NULL, "Trying to modify NULL face");
diff --git a/model/ccnx-fib-impl.h b/model/ccnx-fib-impl.h
index 5ef9610..071c07d 100644
--- a/model/ccnx-fib-impl.h
+++ b/model/ccnx-fib-impl.h
@@ -29,11 +29,39 @@
namespace ns3 {
+class CcnxFibEntryImpl : public CcnxFibEntry
+{
+public:
+ typedef ndnSIM::trie_with_policy<
+ CcnxNameComponents,
+ ndnSIM::smart_pointer_payload_traits<CcnxFibEntryImpl>,
+ ndnSIM::empty_policy_traits
+ > trie;
+
+ CcnxFibEntryImpl (const Ptr<const CcnxNameComponents> &prefix)
+ : CcnxFibEntry (prefix)
+ , item_ (0)
+ {
+ }
+
+ void
+ SetTrie (trie::iterator item)
+ {
+ item_ = item;
+ }
+
+ trie::iterator to_iterator () { return item_; }
+ trie::const_iterator to_iterator () const { return item_; }
+
+private:
+ trie::iterator item_;
+};
+
struct CcnxFibEntryContainer
{
typedef ndnSIM::trie_with_policy<
CcnxNameComponents,
- ndnSIM::smart_pointer_payload_traits<CcnxFibEntry>,
+ ndnSIM::smart_pointer_payload_traits<CcnxFibEntryImpl>,
ndnSIM::empty_policy_traits
> type;
};
@@ -140,14 +168,9 @@
*/
template<typename Modifier>
bool
- modify (CcnxFib::iterator position, Modifier mod)
+ modify (CcnxFib::iterator item, Modifier mod)
{
- mod (*position);
-
- return true;
- // somehow we need to obtain trie iterator from the payload...
- // super::getPolicy ().
- // return super::modify (position, mod);
+ return super::modify (StaticCast<CcnxFibEntryImpl> (item)->to_iterator (), mod);
}
protected:
@@ -162,7 +185,6 @@
*/
void
Remove (super::parent_trie &item, Ptr<CcnxFace> face);
-
private:
Ptr<Node> m_node;