Some progress on CcnxPit. Partially working
diff --git a/bindings/modulegen__gcc_ILP32.py b/bindings/modulegen__gcc_ILP32.py
index a828ce4..0e3b584 100644
--- a/bindings/modulegen__gcc_ILP32.py
+++ b/bindings/modulegen__gcc_ILP32.py
@@ -64,10 +64,6 @@
module.add_enum('Type', ['INTEREST', 'CONTENT_OBJECT'], outer_class=root_module['ns3::CcnxHeaderHelper'])
## ccnx-interest-header.h (module 'ndnSIM'): ns3::CcnxInterestHeaderException [class]
module.add_class('CcnxInterestHeaderException')
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry [struct]
- module.add_class('CcnxPitEntry')
- ## ccnx-pit.h (module 'ndnSIM'): ns3::CcnxPitEntryContainer [struct]
- module.add_class('CcnxPitEntryContainer')
## ccnx-pit-entry-incoming-face.h (module 'ndnSIM'): ns3::CcnxPitEntryIncomingFace [struct]
module.add_class('CcnxPitEntryIncomingFace')
## ccnx-pit-entry-outgoing-face.h (module 'ndnSIM'): ns3::CcnxPitEntryOutgoingFace [struct]
@@ -206,6 +202,8 @@
module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CcnxInterestHeader', 'ns3::Header', 'ns3::DefaultDeleter<ns3::CcnxInterestHeader>'], parent=root_module['ns3::Header'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxNameComponents, ns3::empty, ns3::DefaultDeleter<ns3::CcnxNameComponents> > [class]
module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::CcnxNameComponents', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CcnxNameComponents>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxPitEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPitEntry> > [class]
+ module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::CcnxPitEntry', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CcnxPitEntry>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
@@ -280,6 +278,8 @@
module.add_class('CcnxFibEntry', parent=root_module['ns3::SimpleRefCount< ns3::CcnxFibEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxFibEntry> >'])
## ccnx-fib-entry.h (module 'ndnSIM'): ns3::CcnxFibEntry::NoFaces [class]
module.add_class('NoFaces', outer_class=root_module['ns3::CcnxFibEntry'])
+ ## ccnx-forwarding-strategy.h (module 'ndnSIM'): ns3::CcnxForwardingStrategy [class]
+ module.add_class('CcnxForwardingStrategy', parent=root_module['ns3::Object'])
## ccnx-interest-header.h (module 'ndnSIM'): ns3::CcnxInterestHeader [class]
module.add_class('CcnxInterestHeader', parent=root_module['ns3::SimpleRefCount< ns3::CcnxInterestHeader, ns3::Header, ns3::DefaultDeleter<ns3::CcnxInterestHeader> >'])
## ccnx-interest-header.h (module 'ndnSIM'): ns3::CcnxInterestHeader [enumeration]
@@ -292,6 +292,10 @@
module.add_class('CcnxNameComponentsValue', parent=root_module['ns3::AttributeValue'])
## ccnx-net-device-face.h (module 'ndnSIM'): ns3::CcnxNetDeviceFace [class]
module.add_class('CcnxNetDeviceFace', parent=root_module['ns3::CcnxFace'])
+ ## ccnx-pit.h (module 'ndnSIM'): ns3::CcnxPit [class]
+ module.add_class('CcnxPit', parent=root_module['ns3::Object'])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry [struct]
+ module.add_class('CcnxPitEntry', parent=root_module['ns3::SimpleRefCount< ns3::CcnxPitEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPitEntry> >'])
## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
## event-impl.h (module 'core'): ns3::EventImpl [class]
@@ -362,12 +366,12 @@
module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
## ccnx-app-face.h (module 'ndnSIM'): ns3::CcnxAppFace [class]
module.add_class('CcnxAppFace', parent=root_module['ns3::CcnxFace'])
- module.add_container('std::set< unsigned int >', 'unsigned int', container_type='set')
- module.add_container('std::set< ns3::CcnxPitEntryIncomingFace >', 'ns3::CcnxPitEntryIncomingFace', container_type='set')
module.add_container('std::map< std::string, std::string >', ('std::string', 'std::string'), container_type='map')
module.add_container('std::list< ns3::TopologyReader::Link >', 'ns3::TopologyReader::Link', container_type='list')
module.add_container('std::list< boost::reference_wrapper< std::string const > >', 'boost::reference_wrapper< std::basic_string< char, std::char_traits< char >, std::allocator< char > > const >', container_type='list')
module.add_container('std::list< std::string >', 'std::string', container_type='list')
+ module.add_container('std::set< unsigned int >', 'unsigned int', container_type='set')
+ module.add_container('std::set< ns3::CcnxPitEntryIncomingFace >', 'ns3::CcnxPitEntryIncomingFace', container_type='set')
typehandlers.add_type_alias('ns3::Vector3DChecker', 'ns3::VectorChecker')
typehandlers.add_type_alias('ns3::Vector3DChecker*', 'ns3::VectorChecker*')
typehandlers.add_type_alias('ns3::Vector3DChecker&', 'ns3::VectorChecker&')
@@ -421,8 +425,6 @@
register_Ns3CcnxGlobalRoutingHelper_methods(root_module, root_module['ns3::CcnxGlobalRoutingHelper'])
register_Ns3CcnxHeaderHelper_methods(root_module, root_module['ns3::CcnxHeaderHelper'])
register_Ns3CcnxInterestHeaderException_methods(root_module, root_module['ns3::CcnxInterestHeaderException'])
- register_Ns3CcnxPitEntry_methods(root_module, root_module['ns3::CcnxPitEntry'])
- register_Ns3CcnxPitEntryContainer_methods(root_module, root_module['ns3::CcnxPitEntryContainer'])
register_Ns3CcnxPitEntryIncomingFace_methods(root_module, root_module['ns3::CcnxPitEntryIncomingFace'])
register_Ns3CcnxPitEntryOutgoingFace_methods(root_module, root_module['ns3::CcnxPitEntryOutgoingFace'])
register_Ns3CcnxPitEntryOutgoingFaceContainer_methods(root_module, root_module['ns3::CcnxPitEntryOutgoingFaceContainer'])
@@ -488,6 +490,7 @@
register_Ns3SimpleRefCount__Ns3CcnxFibEntry_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxFibEntry__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CcnxFibEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxFibEntry> >'])
register_Ns3SimpleRefCount__Ns3CcnxInterestHeader_Ns3Header_Ns3DefaultDeleter__lt__ns3CcnxInterestHeader__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CcnxInterestHeader, ns3::Header, ns3::DefaultDeleter<ns3::CcnxInterestHeader> >'])
register_Ns3SimpleRefCount__Ns3CcnxNameComponents_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxNameComponents__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CcnxNameComponents, ns3::empty, ns3::DefaultDeleter<ns3::CcnxNameComponents> >'])
+ register_Ns3SimpleRefCount__Ns3CcnxPitEntry_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxPitEntry__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CcnxPitEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPitEntry> >'])
register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
@@ -521,11 +524,14 @@
register_Ns3CcnxFib_methods(root_module, root_module['ns3::CcnxFib'])
register_Ns3CcnxFibEntry_methods(root_module, root_module['ns3::CcnxFibEntry'])
register_Ns3CcnxFibEntryNoFaces_methods(root_module, root_module['ns3::CcnxFibEntry::NoFaces'])
+ register_Ns3CcnxForwardingStrategy_methods(root_module, root_module['ns3::CcnxForwardingStrategy'])
register_Ns3CcnxInterestHeader_methods(root_module, root_module['ns3::CcnxInterestHeader'])
register_Ns3CcnxNameComponents_methods(root_module, root_module['ns3::CcnxNameComponents'])
register_Ns3CcnxNameComponentsChecker_methods(root_module, root_module['ns3::CcnxNameComponentsChecker'])
register_Ns3CcnxNameComponentsValue_methods(root_module, root_module['ns3::CcnxNameComponentsValue'])
register_Ns3CcnxNetDeviceFace_methods(root_module, root_module['ns3::CcnxNetDeviceFace'])
+ register_Ns3CcnxPit_methods(root_module, root_module['ns3::CcnxPit'])
+ register_Ns3CcnxPitEntry_methods(root_module, root_module['ns3::CcnxPitEntry'])
register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
register_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
@@ -1221,106 +1227,6 @@
cls.add_constructor([param('ns3::CcnxInterestHeaderException const &', 'arg0')])
return
-def register_Ns3CcnxPitEntry_methods(root_module, cls):
- cls.add_output_stream_operator()
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::CcnxPitEntry(ns3::CcnxPitEntry const & arg0) [copy constructor]
- cls.add_constructor([param('ns3::CcnxPitEntry const &', 'arg0')])
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::CcnxPitEntry(ns3::Ptr<ns3::CcnxNameComponents> prefix, ns3::Time const & offsetTime, ns3::Ptr<ns3::CcnxFibEntry> fibEntry) [constructor]
- cls.add_constructor([param('ns3::Ptr< ns3::CcnxNameComponents >', 'prefix'), param('ns3::Time const &', 'offsetTime'), param('ns3::Ptr< ns3::CcnxFibEntry >', 'fibEntry')])
- ## ccnx-pit-entry.h (module 'ndnSIM'): std::_Rb_tree_const_iterator<ns3::CcnxPitEntryIncomingFace> ns3::CcnxPitEntry::AddIncoming(ns3::Ptr<ns3::CcnxFace> face) [member function]
- cls.add_method('AddIncoming',
- 'std::_Rb_tree_const_iterator< ns3::CcnxPitEntryIncomingFace >',
- [param('ns3::Ptr< ns3::CcnxFace >', 'face')])
- ## ccnx-pit-entry.h (module 'ndnSIM'): boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<ns3::CcnxPitEntryOutgoingFace, std::allocator<ns3::CcnxPitEntryOutgoingFace> > > > > ns3::CcnxPitEntry::AddOutgoing(ns3::Ptr<ns3::CcnxFace> face) [member function]
- cls.add_method('AddOutgoing',
- 'boost::multi_index::detail::bidir_node_iterator< boost::multi_index::detail::ordered_index_node< boost::multi_index::detail::ordered_index_node< boost::multi_index::detail::index_node_base< ns3::CcnxPitEntryOutgoingFace, std::allocator< ns3::CcnxPitEntryOutgoingFace > > > > >',
- [param('ns3::Ptr< ns3::CcnxFace >', 'face')])
- ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::AddSeenNonce(uint32_t nonce) [member function]
- cls.add_method('AddSeenNonce',
- 'void',
- [param('uint32_t', 'nonce')])
- ## ccnx-pit-entry.h (module 'ndnSIM'): bool ns3::CcnxPitEntry::AreAllOutgoingInVain() const [member function]
- cls.add_method('AreAllOutgoingInVain',
- 'bool',
- [],
- is_const=True)
- ## ccnx-pit-entry.h (module 'ndnSIM'): bool ns3::CcnxPitEntry::AreTherePromisingOutgoingFacesExcept(ns3::Ptr<ns3::CcnxFace> face) const [member function]
- cls.add_method('AreTherePromisingOutgoingFacesExcept',
- 'bool',
- [param('ns3::Ptr< ns3::CcnxFace >', 'face')],
- is_const=True)
- ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::ClearIncoming() [member function]
- cls.add_method('ClearIncoming',
- 'void',
- [])
- ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::ClearOutgoing() [member function]
- cls.add_method('ClearOutgoing',
- 'void',
- [])
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::Time const & ns3::CcnxPitEntry::GetExpireTime() const [member function]
- cls.add_method('GetExpireTime',
- 'ns3::Time const &',
- [],
- is_const=True)
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxNameComponents const & ns3::CcnxPitEntry::GetPrefix() const [member function]
- cls.add_method('GetPrefix',
- 'ns3::CcnxNameComponents const &',
- [],
- is_const=True)
- ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::IncreaseAllowedRetxCount() [member function]
- cls.add_method('IncreaseAllowedRetxCount',
- 'void',
- [])
- ## ccnx-pit-entry.h (module 'ndnSIM'): bool ns3::CcnxPitEntry::IsNonceSeen(uint32_t nonce) const [member function]
- cls.add_method('IsNonceSeen',
- 'bool',
- [param('uint32_t', 'nonce')],
- is_const=True)
- ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::RemoveAllReferencesToFace(ns3::Ptr<ns3::CcnxFace> face) [member function]
- cls.add_method('RemoveAllReferencesToFace',
- 'void',
- [param('ns3::Ptr< ns3::CcnxFace >', 'face')])
- ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::RemoveIncoming(ns3::Ptr<ns3::CcnxFace> face) [member function]
- cls.add_method('RemoveIncoming',
- 'void',
- [param('ns3::Ptr< ns3::CcnxFace >', 'face')])
- ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::SetExpireTime(ns3::Time const & expireTime) [member function]
- cls.add_method('SetExpireTime',
- 'void',
- [param('ns3::Time const &', 'expireTime')])
- ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::SetWaitingInVain(boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<ns3::CcnxPitEntryOutgoingFace, std::allocator<ns3::CcnxPitEntryOutgoingFace> > > > > face) [member function]
- cls.add_method('SetWaitingInVain',
- 'void',
- [param('boost::multi_index::detail::bidir_node_iterator< boost::multi_index::detail::ordered_index_node< boost::multi_index::detail::ordered_index_node< boost::multi_index::detail::index_node_base< ns3::CcnxPitEntryOutgoingFace, std::allocator< ns3::CcnxPitEntryOutgoingFace > > > > >', 'face')])
- ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::UpdateLifetime(ns3::Time const & offsetTime) [member function]
- cls.add_method('UpdateLifetime',
- 'void',
- [param('ns3::Time const &', 'offsetTime')])
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_expireTime [variable]
- cls.add_instance_attribute('m_expireTime', 'ns3::Time', is_const=False)
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_fibEntry [variable]
- cls.add_instance_attribute('m_fibEntry', 'ns3::Ptr< ns3::CcnxFibEntry >', is_const=False)
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_incoming [variable]
- cls.add_instance_attribute('m_incoming', 'std::set< ns3::CcnxPitEntryIncomingFace >', is_const=False)
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_lastRetransmission [variable]
- cls.add_instance_attribute('m_lastRetransmission', 'ns3::Time', is_const=False)
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_maxRetxCount [variable]
- cls.add_instance_attribute('m_maxRetxCount', 'uint32_t', is_const=False)
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_outgoing [variable]
- cls.add_instance_attribute('m_outgoing', 'boost::multi_index::multi_index_container< ns3::CcnxPitEntryOutgoingFace, boost::multi_index::indexed_by< boost::multi_index::ordered_unique< boost::multi_index::tag< ns3::__ccnx_private::i_face, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na >, boost::multi_index::member< ns3::CcnxPitEntryOutgoingFace, ns3::Ptr< ns3::CcnxFace >, & ( ns3::CcnxPitEntryOutgoingFace::m_face ) >, mpl_::na >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< ns3::__ccnx_private::i_retx, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na >, boost::multi_index::member< ns3::CcnxPitEntryOutgoingFace, unsigned int, & ( ns3::CcnxPitEntryOutgoingFace::m_retxCount ) >, mpl_::na >, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na >, std::allocator< ns3::CcnxPitEntryOutgoingFace > >', is_const=False)
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_prefix [variable]
- cls.add_instance_attribute('m_prefix', 'ns3::Ptr< ns3::CcnxNameComponents >', is_const=False)
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_seenNonces [variable]
- cls.add_instance_attribute('m_seenNonces', 'std::set< unsigned int >', is_const=False)
- return
-
-def register_Ns3CcnxPitEntryContainer_methods(root_module, cls):
- ## ccnx-pit.h (module 'ndnSIM'): ns3::CcnxPitEntryContainer::CcnxPitEntryContainer() [constructor]
- cls.add_constructor([])
- ## ccnx-pit.h (module 'ndnSIM'): ns3::CcnxPitEntryContainer::CcnxPitEntryContainer(ns3::CcnxPitEntryContainer const & arg0) [copy constructor]
- cls.add_constructor([param('ns3::CcnxPitEntryContainer const &', 'arg0')])
- return
-
def register_Ns3CcnxPitEntryIncomingFace_methods(root_module, cls):
cls.add_binary_comparison_operator('==')
cls.add_binary_comparison_operator('<')
@@ -3061,6 +2967,10 @@
'ns3::Ptr< ns3::CcnxFib >',
[],
is_const=True, template_parameters=['ns3::CcnxFib'])
+ cls.add_method('GetObject',
+ 'ns3::Ptr< ns3::CcnxPit >',
+ [],
+ is_const=True, template_parameters=['ns3::CcnxPit'])
## object.h (module 'core'): static ns3::TypeId ns3::Object::GetTypeId() [member function]
cls.add_method('GetTypeId',
'ns3::TypeId',
@@ -3243,6 +3153,18 @@
is_static=True)
return
+def register_Ns3SimpleRefCount__Ns3CcnxPitEntry_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxPitEntry__gt___methods(root_module, cls):
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxPitEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPitEntry> >::SimpleRefCount() [constructor]
+ cls.add_constructor([])
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxPitEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPitEntry> >::SimpleRefCount(ns3::SimpleRefCount<ns3::CcnxPitEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPitEntry> > const & o) [copy constructor]
+ cls.add_constructor([param('ns3::SimpleRefCount< ns3::CcnxPitEntry, ns3::empty, ns3::DefaultDeleter< ns3::CcnxPitEntry > > const &', 'o')])
+ ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::CcnxPitEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPitEntry> >::Cleanup() [member function]
+ cls.add_method('Cleanup',
+ 'void',
+ [],
+ is_static=True)
+ return
+
def register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, cls):
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >::SimpleRefCount() [constructor]
cls.add_constructor([])
@@ -4013,6 +3935,11 @@
'ns3::CcnxNameComponents const &',
[],
is_const=True)
+ ## ccnx-content-object-header.h (module 'ndnSIM'): ns3::Ptr<ns3::CcnxNameComponents const> ns3::CcnxContentObjectHeader::GetNamePtr() const [member function]
+ cls.add_method('GetNamePtr',
+ 'ns3::Ptr< ns3::CcnxNameComponents const >',
+ [],
+ is_const=True)
## ccnx-content-object-header.h (module 'ndnSIM'): uint32_t ns3::CcnxContentObjectHeader::GetSerializedSize() const [member function]
cls.add_method('GetSerializedSize',
'uint32_t',
@@ -4392,15 +4319,15 @@
'void',
[],
is_pure_virtual=True, is_virtual=True)
- ## ccnx-fib.h (module 'ndnSIM'): ns3::Ptr<ns3::CcnxFibEntry> ns3::CcnxFib::LongestPrefixMatch(ns3::CcnxInterestHeader const & interest) const [member function]
+ ## ccnx-fib.h (module 'ndnSIM'): ns3::Ptr<ns3::CcnxFibEntry> ns3::CcnxFib::LongestPrefixMatch(ns3::CcnxInterestHeader const & interest) [member function]
cls.add_method('LongestPrefixMatch',
'ns3::Ptr< ns3::CcnxFibEntry >',
[param('ns3::CcnxInterestHeader const &', 'interest')],
- is_pure_virtual=True, is_const=True, is_virtual=True)
- ## ccnx-fib.h (module 'ndnSIM'): ns3::Ptr<const ns3::CcnxFibEntry> ns3::CcnxFib::Next(ns3::Ptr<const ns3::CcnxFibEntry> item) [member function]
+ is_pure_virtual=True, is_virtual=True)
+ ## ccnx-fib.h (module 'ndnSIM'): ns3::Ptr<const ns3::CcnxFibEntry> ns3::CcnxFib::Next(ns3::Ptr<const ns3::CcnxFibEntry> arg0) [member function]
cls.add_method('Next',
'ns3::Ptr< ns3::CcnxFibEntry const >',
- [param('ns3::Ptr< ns3::CcnxFibEntry const >', 'item')],
+ [param('ns3::Ptr< ns3::CcnxFibEntry const >', 'arg0')],
is_pure_virtual=True, is_virtual=True)
## ccnx-fib.h (module 'ndnSIM'): void ns3::CcnxFib::Print(std::ostream & os) const [member function]
cls.add_method('Print',
@@ -4470,6 +4397,38 @@
cls.add_constructor([param('ns3::CcnxFibEntry::NoFaces const &', 'arg0')])
return
+def register_Ns3CcnxForwardingStrategy_methods(root_module, cls):
+ ## ccnx-forwarding-strategy.h (module 'ndnSIM'): ns3::CcnxForwardingStrategy::CcnxForwardingStrategy(ns3::CcnxForwardingStrategy const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::CcnxForwardingStrategy const &', 'arg0')])
+ ## ccnx-forwarding-strategy.h (module 'ndnSIM'): ns3::CcnxForwardingStrategy::CcnxForwardingStrategy() [constructor]
+ cls.add_constructor([])
+ ## ccnx-forwarding-strategy.h (module 'ndnSIM'): static ns3::TypeId ns3::CcnxForwardingStrategy::GetTypeId() [member function]
+ cls.add_method('GetTypeId',
+ 'ns3::TypeId',
+ [],
+ is_static=True)
+ ## ccnx-forwarding-strategy.h (module 'ndnSIM'): bool ns3::CcnxForwardingStrategy::PropagateInterest(ns3::Ptr<ns3::CcnxPitEntry> pitEntry, ns3::Ptr<ns3::CcnxFace> const & incomingFace, ns3::Ptr<ns3::CcnxInterestHeader> & header, ns3::Ptr<const ns3::Packet> const & packet) [member function]
+ cls.add_method('PropagateInterest',
+ 'bool',
+ [param('ns3::Ptr< ns3::CcnxPitEntry >', 'pitEntry'), param('ns3::Ptr< ns3::CcnxFace > const &', 'incomingFace'), param('ns3::Ptr< ns3::CcnxInterestHeader > &', 'header'), param('ns3::Ptr< ns3::Packet const > const &', 'packet')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ccnx-forwarding-strategy.h (module 'ndnSIM'): void ns3::CcnxForwardingStrategy::DoDispose() [member function]
+ cls.add_method('DoDispose',
+ 'void',
+ [],
+ visibility='protected', is_virtual=True)
+ ## ccnx-forwarding-strategy.h (module 'ndnSIM'): void ns3::CcnxForwardingStrategy::NotifyNewAggregate() [member function]
+ cls.add_method('NotifyNewAggregate',
+ 'void',
+ [],
+ visibility='protected', is_virtual=True)
+ ## ccnx-forwarding-strategy.h (module 'ndnSIM'): bool ns3::CcnxForwardingStrategy::PropagateInterestViaGreen(ns3::Ptr<ns3::CcnxPitEntry> pitEntry, ns3::Ptr<ns3::CcnxFace> const & incomingFace, ns3::Ptr<ns3::CcnxInterestHeader> & header, ns3::Ptr<const ns3::Packet> const & packet) [member function]
+ cls.add_method('PropagateInterestViaGreen',
+ 'bool',
+ [param('ns3::Ptr< ns3::CcnxPitEntry >', 'pitEntry'), param('ns3::Ptr< ns3::CcnxFace > const &', 'incomingFace'), param('ns3::Ptr< ns3::CcnxInterestHeader > &', 'header'), param('ns3::Ptr< ns3::Packet const > const &', 'packet')],
+ visibility='protected')
+ return
+
def register_Ns3CcnxInterestHeader_methods(root_module, cls):
## ccnx-interest-header.h (module 'ndnSIM'): ns3::CcnxInterestHeader::CcnxInterestHeader(ns3::CcnxInterestHeader const & arg0) [copy constructor]
cls.add_constructor([param('ns3::CcnxInterestHeader const &', 'arg0')])
@@ -4515,6 +4474,11 @@
'ns3::CcnxNameComponents const &',
[],
is_const=True)
+ ## ccnx-interest-header.h (module 'ndnSIM'): ns3::Ptr<ns3::CcnxNameComponents const> ns3::CcnxInterestHeader::GetNamePtr() const [member function]
+ cls.add_method('GetNamePtr',
+ 'ns3::Ptr< ns3::CcnxNameComponents const >',
+ [],
+ is_const=True)
## ccnx-interest-header.h (module 'ndnSIM'): uint32_t ns3::CcnxInterestHeader::GetNonce() const [member function]
cls.add_method('GetNonce',
'uint32_t',
@@ -4727,6 +4691,162 @@
visibility='protected', is_virtual=True)
return
+def register_Ns3CcnxPit_methods(root_module, cls):
+ cls.add_output_stream_operator()
+ ## ccnx-pit.h (module 'ndnSIM'): ns3::CcnxPit::CcnxPit(ns3::CcnxPit const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::CcnxPit const &', 'arg0')])
+ ## ccnx-pit.h (module 'ndnSIM'): ns3::CcnxPit::CcnxPit() [constructor]
+ cls.add_constructor([])
+ ## ccnx-pit.h (module 'ndnSIM'): ns3::Ptr<ns3::CcnxPitEntry> ns3::CcnxPit::Begin() [member function]
+ cls.add_method('Begin',
+ 'ns3::Ptr< ns3::CcnxPitEntry >',
+ [],
+ is_pure_virtual=True, is_virtual=True)
+ ## ccnx-pit.h (module 'ndnSIM'): ns3::Ptr<ns3::CcnxPitEntry> ns3::CcnxPit::Create(ns3::Ptr<const ns3::CcnxInterestHeader> header) [member function]
+ cls.add_method('Create',
+ 'ns3::Ptr< ns3::CcnxPitEntry >',
+ [param('ns3::Ptr< ns3::CcnxInterestHeader const >', 'header')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ccnx-pit.h (module 'ndnSIM'): ns3::Ptr<ns3::CcnxPitEntry> ns3::CcnxPit::End() [member function]
+ cls.add_method('End',
+ 'ns3::Ptr< ns3::CcnxPitEntry >',
+ [],
+ is_pure_virtual=True, is_virtual=True)
+ ## ccnx-pit.h (module 'ndnSIM'): static ns3::Ptr<ns3::CcnxFib> ns3::CcnxPit::GetCcnxPit(ns3::Ptr<ns3::Object> node) [member function]
+ cls.add_method('GetCcnxPit',
+ 'ns3::Ptr< ns3::CcnxPit >',
+ [param('ns3::Ptr< ns3::Object >', 'node')],
+ is_static=True)
+ ## ccnx-pit.h (module 'ndnSIM'): static ns3::TypeId ns3::CcnxPit::GetTypeId() [member function]
+ cls.add_method('GetTypeId',
+ 'ns3::TypeId',
+ [],
+ is_static=True)
+ ## ccnx-pit.h (module 'ndnSIM'): ns3::Ptr<ns3::CcnxPitEntry> ns3::CcnxPit::Lookup(ns3::CcnxContentObjectHeader const & header) [member function]
+ cls.add_method('Lookup',
+ 'ns3::Ptr< ns3::CcnxPitEntry >',
+ [param('ns3::CcnxContentObjectHeader const &', 'header')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ccnx-pit.h (module 'ndnSIM'): ns3::Ptr<ns3::CcnxPitEntry> ns3::CcnxPit::Lookup(ns3::CcnxInterestHeader const & header) [member function]
+ cls.add_method('Lookup',
+ 'ns3::Ptr< ns3::CcnxPitEntry >',
+ [param('ns3::CcnxInterestHeader const &', 'header')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ccnx-pit.h (module 'ndnSIM'): void ns3::CcnxPit::MarkErased(ns3::Ptr<ns3::CcnxPitEntry> entry) [member function]
+ cls.add_method('MarkErased',
+ 'void',
+ [param('ns3::Ptr< ns3::CcnxPitEntry >', 'entry')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ccnx-pit.h (module 'ndnSIM'): ns3::Ptr<ns3::CcnxPitEntry> ns3::CcnxPit::Next(ns3::Ptr<ns3::CcnxPitEntry> arg0) [member function]
+ cls.add_method('Next',
+ 'ns3::Ptr< ns3::CcnxPitEntry >',
+ [param('ns3::Ptr< ns3::CcnxPitEntry >', 'arg0')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ccnx-pit.h (module 'ndnSIM'): void ns3::CcnxPit::Print(std::ostream & os) const [member function]
+ cls.add_method('Print',
+ 'void',
+ [param('std::ostream &', 'os')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ccnx-pit.h (module 'ndnSIM'): void ns3::CcnxPit::DoCleanExpired() [member function]
+ cls.add_method('DoCleanExpired',
+ 'void',
+ [],
+ is_pure_virtual=True, visibility='protected', is_virtual=True)
+ return
+
+def register_Ns3CcnxPitEntry_methods(root_module, cls):
+ cls.add_output_stream_operator()
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::CcnxPitEntry(ns3::CcnxPitEntry const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::CcnxPitEntry const &', 'arg0')])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::CcnxPitEntry(ns3::Ptr<const ns3::CcnxInterestHeader> header, ns3::Ptr<ns3::CcnxFibEntry> fibEntry) [constructor]
+ cls.add_constructor([param('ns3::Ptr< ns3::CcnxInterestHeader const >', 'header'), param('ns3::Ptr< ns3::CcnxFibEntry >', 'fibEntry')])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): std::_Rb_tree_const_iterator<ns3::CcnxPitEntryIncomingFace> ns3::CcnxPitEntry::AddIncoming(ns3::Ptr<ns3::CcnxFace> face) [member function]
+ cls.add_method('AddIncoming',
+ 'std::_Rb_tree_const_iterator< ns3::CcnxPitEntryIncomingFace >',
+ [param('ns3::Ptr< ns3::CcnxFace >', 'face')])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<ns3::CcnxPitEntryOutgoingFace, std::allocator<ns3::CcnxPitEntryOutgoingFace> > > > > ns3::CcnxPitEntry::AddOutgoing(ns3::Ptr<ns3::CcnxFace> face) [member function]
+ cls.add_method('AddOutgoing',
+ 'boost::multi_index::detail::bidir_node_iterator< boost::multi_index::detail::ordered_index_node< boost::multi_index::detail::ordered_index_node< boost::multi_index::detail::index_node_base< ns3::CcnxPitEntryOutgoingFace, std::allocator< ns3::CcnxPitEntryOutgoingFace > > > > >',
+ [param('ns3::Ptr< ns3::CcnxFace >', 'face')])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::AddSeenNonce(uint32_t nonce) [member function]
+ cls.add_method('AddSeenNonce',
+ 'void',
+ [param('uint32_t', 'nonce')])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): bool ns3::CcnxPitEntry::AreAllOutgoingInVain() const [member function]
+ cls.add_method('AreAllOutgoingInVain',
+ 'bool',
+ [],
+ is_const=True)
+ ## ccnx-pit-entry.h (module 'ndnSIM'): bool ns3::CcnxPitEntry::AreTherePromisingOutgoingFacesExcept(ns3::Ptr<ns3::CcnxFace> face) const [member function]
+ cls.add_method('AreTherePromisingOutgoingFacesExcept',
+ 'bool',
+ [param('ns3::Ptr< ns3::CcnxFace >', 'face')],
+ is_const=True)
+ ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::ClearIncoming() [member function]
+ cls.add_method('ClearIncoming',
+ 'void',
+ [])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::ClearOutgoing() [member function]
+ cls.add_method('ClearOutgoing',
+ 'void',
+ [])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::Time const & ns3::CcnxPitEntry::GetExpireTime() const [member function]
+ cls.add_method('GetExpireTime',
+ 'ns3::Time const &',
+ [],
+ is_const=True)
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxNameComponents const & ns3::CcnxPitEntry::GetPrefix() const [member function]
+ cls.add_method('GetPrefix',
+ 'ns3::CcnxNameComponents const &',
+ [],
+ is_const=True)
+ ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::IncreaseAllowedRetxCount() [member function]
+ cls.add_method('IncreaseAllowedRetxCount',
+ 'void',
+ [])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): bool ns3::CcnxPitEntry::IsNonceSeen(uint32_t nonce) const [member function]
+ cls.add_method('IsNonceSeen',
+ 'bool',
+ [param('uint32_t', 'nonce')],
+ is_const=True)
+ ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::RemoveAllReferencesToFace(ns3::Ptr<ns3::CcnxFace> face) [member function]
+ cls.add_method('RemoveAllReferencesToFace',
+ 'void',
+ [param('ns3::Ptr< ns3::CcnxFace >', 'face')])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::RemoveIncoming(ns3::Ptr<ns3::CcnxFace> face) [member function]
+ cls.add_method('RemoveIncoming',
+ 'void',
+ [param('ns3::Ptr< ns3::CcnxFace >', 'face')])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::SetExpireTime(ns3::Time const & expireTime) [member function]
+ cls.add_method('SetExpireTime',
+ 'void',
+ [param('ns3::Time const &', 'expireTime')])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::SetWaitingInVain(boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<ns3::CcnxPitEntryOutgoingFace, std::allocator<ns3::CcnxPitEntryOutgoingFace> > > > > face) [member function]
+ cls.add_method('SetWaitingInVain',
+ 'void',
+ [param('boost::multi_index::detail::bidir_node_iterator< boost::multi_index::detail::ordered_index_node< boost::multi_index::detail::ordered_index_node< boost::multi_index::detail::index_node_base< ns3::CcnxPitEntryOutgoingFace, std::allocator< ns3::CcnxPitEntryOutgoingFace > > > > >', 'face')])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::UpdateLifetime(ns3::Time const & offsetTime) [member function]
+ cls.add_method('UpdateLifetime',
+ 'void',
+ [param('ns3::Time const &', 'offsetTime')])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_expireTime [variable]
+ cls.add_instance_attribute('m_expireTime', 'ns3::Time', is_const=False)
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_fibEntry [variable]
+ cls.add_instance_attribute('m_fibEntry', 'ns3::Ptr< ns3::CcnxFibEntry >', is_const=False)
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_incoming [variable]
+ cls.add_instance_attribute('m_incoming', 'std::set< ns3::CcnxPitEntryIncomingFace >', is_const=False)
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_lastRetransmission [variable]
+ cls.add_instance_attribute('m_lastRetransmission', 'ns3::Time', is_const=False)
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_maxRetxCount [variable]
+ cls.add_instance_attribute('m_maxRetxCount', 'uint32_t', is_const=False)
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_outgoing [variable]
+ cls.add_instance_attribute('m_outgoing', 'boost::multi_index::multi_index_container< ns3::CcnxPitEntryOutgoingFace, boost::multi_index::indexed_by< boost::multi_index::ordered_unique< boost::multi_index::tag< ns3::__ccnx_private::i_face, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na >, boost::multi_index::member< ns3::CcnxPitEntryOutgoingFace, ns3::Ptr< ns3::CcnxFace >, & ( ns3::CcnxPitEntryOutgoingFace::m_face ) >, mpl_::na >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< ns3::__ccnx_private::i_retx, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na >, boost::multi_index::member< ns3::CcnxPitEntryOutgoingFace, unsigned int, & ( ns3::CcnxPitEntryOutgoingFace::m_retxCount ) >, mpl_::na >, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na >, std::allocator< ns3::CcnxPitEntryOutgoingFace > >', is_const=False)
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_prefix [variable]
+ cls.add_instance_attribute('m_prefix', 'ns3::Ptr< ns3::CcnxNameComponents const >', is_const=False)
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_seenNonces [variable]
+ cls.add_instance_attribute('m_seenNonces', 'std::set< unsigned int >', is_const=False)
+ return
+
def register_Ns3EmptyAttributeValue_methods(root_module, cls):
## attribute.h (module 'core'): ns3::EmptyAttributeValue::EmptyAttributeValue(ns3::EmptyAttributeValue const & arg0) [copy constructor]
cls.add_constructor([param('ns3::EmptyAttributeValue const &', 'arg0')])
diff --git a/bindings/modulegen__gcc_LP64.py b/bindings/modulegen__gcc_LP64.py
index a828ce4..d8a3290 100644
--- a/bindings/modulegen__gcc_LP64.py
+++ b/bindings/modulegen__gcc_LP64.py
@@ -64,10 +64,6 @@
module.add_enum('Type', ['INTEREST', 'CONTENT_OBJECT'], outer_class=root_module['ns3::CcnxHeaderHelper'])
## ccnx-interest-header.h (module 'ndnSIM'): ns3::CcnxInterestHeaderException [class]
module.add_class('CcnxInterestHeaderException')
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry [struct]
- module.add_class('CcnxPitEntry')
- ## ccnx-pit.h (module 'ndnSIM'): ns3::CcnxPitEntryContainer [struct]
- module.add_class('CcnxPitEntryContainer')
## ccnx-pit-entry-incoming-face.h (module 'ndnSIM'): ns3::CcnxPitEntryIncomingFace [struct]
module.add_class('CcnxPitEntryIncomingFace')
## ccnx-pit-entry-outgoing-face.h (module 'ndnSIM'): ns3::CcnxPitEntryOutgoingFace [struct]
@@ -206,6 +202,8 @@
module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::CcnxInterestHeader', 'ns3::Header', 'ns3::DefaultDeleter<ns3::CcnxInterestHeader>'], parent=root_module['ns3::Header'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxNameComponents, ns3::empty, ns3::DefaultDeleter<ns3::CcnxNameComponents> > [class]
module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::CcnxNameComponents', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CcnxNameComponents>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxPitEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPitEntry> > [class]
+ module.add_class('SimpleRefCount', automatic_type_narrowing=True, template_parameters=['ns3::CcnxPitEntry', 'ns3::empty', 'ns3::DefaultDeleter<ns3::CcnxPitEntry>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> > [class]
module.add_class('SimpleRefCount', automatic_type_narrowing=True, import_from_module='ns.core', template_parameters=['ns3::EventImpl', 'ns3::empty', 'ns3::DefaultDeleter<ns3::EventImpl>'], parent=root_module['ns3::empty'], memory_policy=cppclass.ReferenceCountingMethodsPolicy(incref_method='Ref', decref_method='Unref', peekref_method='GetReferenceCount'))
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> > [class]
@@ -280,6 +278,8 @@
module.add_class('CcnxFibEntry', parent=root_module['ns3::SimpleRefCount< ns3::CcnxFibEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxFibEntry> >'])
## ccnx-fib-entry.h (module 'ndnSIM'): ns3::CcnxFibEntry::NoFaces [class]
module.add_class('NoFaces', outer_class=root_module['ns3::CcnxFibEntry'])
+ ## ccnx-forwarding-strategy.h (module 'ndnSIM'): ns3::CcnxForwardingStrategy [class]
+ module.add_class('CcnxForwardingStrategy', parent=root_module['ns3::Object'])
## ccnx-interest-header.h (module 'ndnSIM'): ns3::CcnxInterestHeader [class]
module.add_class('CcnxInterestHeader', parent=root_module['ns3::SimpleRefCount< ns3::CcnxInterestHeader, ns3::Header, ns3::DefaultDeleter<ns3::CcnxInterestHeader> >'])
## ccnx-interest-header.h (module 'ndnSIM'): ns3::CcnxInterestHeader [enumeration]
@@ -292,6 +292,10 @@
module.add_class('CcnxNameComponentsValue', parent=root_module['ns3::AttributeValue'])
## ccnx-net-device-face.h (module 'ndnSIM'): ns3::CcnxNetDeviceFace [class]
module.add_class('CcnxNetDeviceFace', parent=root_module['ns3::CcnxFace'])
+ ## ccnx-pit.h (module 'ndnSIM'): ns3::CcnxPit [class]
+ module.add_class('CcnxPit', parent=root_module['ns3::Object'])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry [struct]
+ module.add_class('CcnxPitEntry', parent=root_module['ns3::SimpleRefCount< ns3::CcnxPitEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPitEntry> >'])
## attribute.h (module 'core'): ns3::EmptyAttributeValue [class]
module.add_class('EmptyAttributeValue', import_from_module='ns.core', parent=root_module['ns3::AttributeValue'])
## event-impl.h (module 'core'): ns3::EventImpl [class]
@@ -362,12 +366,12 @@
module.add_class('AddressValue', import_from_module='ns.network', parent=root_module['ns3::AttributeValue'])
## ccnx-app-face.h (module 'ndnSIM'): ns3::CcnxAppFace [class]
module.add_class('CcnxAppFace', parent=root_module['ns3::CcnxFace'])
- module.add_container('std::set< unsigned int >', 'unsigned int', container_type='set')
- module.add_container('std::set< ns3::CcnxPitEntryIncomingFace >', 'ns3::CcnxPitEntryIncomingFace', container_type='set')
module.add_container('std::map< std::string, std::string >', ('std::string', 'std::string'), container_type='map')
module.add_container('std::list< ns3::TopologyReader::Link >', 'ns3::TopologyReader::Link', container_type='list')
module.add_container('std::list< boost::reference_wrapper< std::string const > >', 'boost::reference_wrapper< std::basic_string< char, std::char_traits< char >, std::allocator< char > > const >', container_type='list')
module.add_container('std::list< std::string >', 'std::string', container_type='list')
+ module.add_container('std::set< unsigned int >', 'unsigned int', container_type='set')
+ module.add_container('std::set< ns3::CcnxPitEntryIncomingFace >', 'ns3::CcnxPitEntryIncomingFace', container_type='set')
typehandlers.add_type_alias('ns3::Vector3DChecker', 'ns3::VectorChecker')
typehandlers.add_type_alias('ns3::Vector3DChecker*', 'ns3::VectorChecker*')
typehandlers.add_type_alias('ns3::Vector3DChecker&', 'ns3::VectorChecker&')
@@ -421,8 +425,6 @@
register_Ns3CcnxGlobalRoutingHelper_methods(root_module, root_module['ns3::CcnxGlobalRoutingHelper'])
register_Ns3CcnxHeaderHelper_methods(root_module, root_module['ns3::CcnxHeaderHelper'])
register_Ns3CcnxInterestHeaderException_methods(root_module, root_module['ns3::CcnxInterestHeaderException'])
- register_Ns3CcnxPitEntry_methods(root_module, root_module['ns3::CcnxPitEntry'])
- register_Ns3CcnxPitEntryContainer_methods(root_module, root_module['ns3::CcnxPitEntryContainer'])
register_Ns3CcnxPitEntryIncomingFace_methods(root_module, root_module['ns3::CcnxPitEntryIncomingFace'])
register_Ns3CcnxPitEntryOutgoingFace_methods(root_module, root_module['ns3::CcnxPitEntryOutgoingFace'])
register_Ns3CcnxPitEntryOutgoingFaceContainer_methods(root_module, root_module['ns3::CcnxPitEntryOutgoingFaceContainer'])
@@ -488,6 +490,7 @@
register_Ns3SimpleRefCount__Ns3CcnxFibEntry_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxFibEntry__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CcnxFibEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxFibEntry> >'])
register_Ns3SimpleRefCount__Ns3CcnxInterestHeader_Ns3Header_Ns3DefaultDeleter__lt__ns3CcnxInterestHeader__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CcnxInterestHeader, ns3::Header, ns3::DefaultDeleter<ns3::CcnxInterestHeader> >'])
register_Ns3SimpleRefCount__Ns3CcnxNameComponents_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxNameComponents__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CcnxNameComponents, ns3::empty, ns3::DefaultDeleter<ns3::CcnxNameComponents> >'])
+ register_Ns3SimpleRefCount__Ns3CcnxPitEntry_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxPitEntry__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::CcnxPitEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPitEntry> >'])
register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >'])
register_Ns3SimpleRefCount__Ns3NixVector_Ns3Empty_Ns3DefaultDeleter__lt__ns3NixVector__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::NixVector, ns3::empty, ns3::DefaultDeleter<ns3::NixVector> >'])
register_Ns3SimpleRefCount__Ns3Packet_Ns3Empty_Ns3DefaultDeleter__lt__ns3Packet__gt___methods(root_module, root_module['ns3::SimpleRefCount< ns3::Packet, ns3::empty, ns3::DefaultDeleter<ns3::Packet> >'])
@@ -521,11 +524,14 @@
register_Ns3CcnxFib_methods(root_module, root_module['ns3::CcnxFib'])
register_Ns3CcnxFibEntry_methods(root_module, root_module['ns3::CcnxFibEntry'])
register_Ns3CcnxFibEntryNoFaces_methods(root_module, root_module['ns3::CcnxFibEntry::NoFaces'])
+ register_Ns3CcnxForwardingStrategy_methods(root_module, root_module['ns3::CcnxForwardingStrategy'])
register_Ns3CcnxInterestHeader_methods(root_module, root_module['ns3::CcnxInterestHeader'])
register_Ns3CcnxNameComponents_methods(root_module, root_module['ns3::CcnxNameComponents'])
register_Ns3CcnxNameComponentsChecker_methods(root_module, root_module['ns3::CcnxNameComponentsChecker'])
register_Ns3CcnxNameComponentsValue_methods(root_module, root_module['ns3::CcnxNameComponentsValue'])
register_Ns3CcnxNetDeviceFace_methods(root_module, root_module['ns3::CcnxNetDeviceFace'])
+ register_Ns3CcnxPit_methods(root_module, root_module['ns3::CcnxPit'])
+ register_Ns3CcnxPitEntry_methods(root_module, root_module['ns3::CcnxPitEntry'])
register_Ns3EmptyAttributeValue_methods(root_module, root_module['ns3::EmptyAttributeValue'])
register_Ns3EventImpl_methods(root_module, root_module['ns3::EventImpl'])
register_Ns3IntegerValue_methods(root_module, root_module['ns3::IntegerValue'])
@@ -1221,106 +1227,6 @@
cls.add_constructor([param('ns3::CcnxInterestHeaderException const &', 'arg0')])
return
-def register_Ns3CcnxPitEntry_methods(root_module, cls):
- cls.add_output_stream_operator()
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::CcnxPitEntry(ns3::CcnxPitEntry const & arg0) [copy constructor]
- cls.add_constructor([param('ns3::CcnxPitEntry const &', 'arg0')])
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::CcnxPitEntry(ns3::Ptr<ns3::CcnxNameComponents> prefix, ns3::Time const & offsetTime, ns3::Ptr<ns3::CcnxFibEntry> fibEntry) [constructor]
- cls.add_constructor([param('ns3::Ptr< ns3::CcnxNameComponents >', 'prefix'), param('ns3::Time const &', 'offsetTime'), param('ns3::Ptr< ns3::CcnxFibEntry >', 'fibEntry')])
- ## ccnx-pit-entry.h (module 'ndnSIM'): std::_Rb_tree_const_iterator<ns3::CcnxPitEntryIncomingFace> ns3::CcnxPitEntry::AddIncoming(ns3::Ptr<ns3::CcnxFace> face) [member function]
- cls.add_method('AddIncoming',
- 'std::_Rb_tree_const_iterator< ns3::CcnxPitEntryIncomingFace >',
- [param('ns3::Ptr< ns3::CcnxFace >', 'face')])
- ## ccnx-pit-entry.h (module 'ndnSIM'): boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<ns3::CcnxPitEntryOutgoingFace, std::allocator<ns3::CcnxPitEntryOutgoingFace> > > > > ns3::CcnxPitEntry::AddOutgoing(ns3::Ptr<ns3::CcnxFace> face) [member function]
- cls.add_method('AddOutgoing',
- 'boost::multi_index::detail::bidir_node_iterator< boost::multi_index::detail::ordered_index_node< boost::multi_index::detail::ordered_index_node< boost::multi_index::detail::index_node_base< ns3::CcnxPitEntryOutgoingFace, std::allocator< ns3::CcnxPitEntryOutgoingFace > > > > >',
- [param('ns3::Ptr< ns3::CcnxFace >', 'face')])
- ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::AddSeenNonce(uint32_t nonce) [member function]
- cls.add_method('AddSeenNonce',
- 'void',
- [param('uint32_t', 'nonce')])
- ## ccnx-pit-entry.h (module 'ndnSIM'): bool ns3::CcnxPitEntry::AreAllOutgoingInVain() const [member function]
- cls.add_method('AreAllOutgoingInVain',
- 'bool',
- [],
- is_const=True)
- ## ccnx-pit-entry.h (module 'ndnSIM'): bool ns3::CcnxPitEntry::AreTherePromisingOutgoingFacesExcept(ns3::Ptr<ns3::CcnxFace> face) const [member function]
- cls.add_method('AreTherePromisingOutgoingFacesExcept',
- 'bool',
- [param('ns3::Ptr< ns3::CcnxFace >', 'face')],
- is_const=True)
- ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::ClearIncoming() [member function]
- cls.add_method('ClearIncoming',
- 'void',
- [])
- ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::ClearOutgoing() [member function]
- cls.add_method('ClearOutgoing',
- 'void',
- [])
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::Time const & ns3::CcnxPitEntry::GetExpireTime() const [member function]
- cls.add_method('GetExpireTime',
- 'ns3::Time const &',
- [],
- is_const=True)
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxNameComponents const & ns3::CcnxPitEntry::GetPrefix() const [member function]
- cls.add_method('GetPrefix',
- 'ns3::CcnxNameComponents const &',
- [],
- is_const=True)
- ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::IncreaseAllowedRetxCount() [member function]
- cls.add_method('IncreaseAllowedRetxCount',
- 'void',
- [])
- ## ccnx-pit-entry.h (module 'ndnSIM'): bool ns3::CcnxPitEntry::IsNonceSeen(uint32_t nonce) const [member function]
- cls.add_method('IsNonceSeen',
- 'bool',
- [param('uint32_t', 'nonce')],
- is_const=True)
- ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::RemoveAllReferencesToFace(ns3::Ptr<ns3::CcnxFace> face) [member function]
- cls.add_method('RemoveAllReferencesToFace',
- 'void',
- [param('ns3::Ptr< ns3::CcnxFace >', 'face')])
- ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::RemoveIncoming(ns3::Ptr<ns3::CcnxFace> face) [member function]
- cls.add_method('RemoveIncoming',
- 'void',
- [param('ns3::Ptr< ns3::CcnxFace >', 'face')])
- ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::SetExpireTime(ns3::Time const & expireTime) [member function]
- cls.add_method('SetExpireTime',
- 'void',
- [param('ns3::Time const &', 'expireTime')])
- ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::SetWaitingInVain(boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<ns3::CcnxPitEntryOutgoingFace, std::allocator<ns3::CcnxPitEntryOutgoingFace> > > > > face) [member function]
- cls.add_method('SetWaitingInVain',
- 'void',
- [param('boost::multi_index::detail::bidir_node_iterator< boost::multi_index::detail::ordered_index_node< boost::multi_index::detail::ordered_index_node< boost::multi_index::detail::index_node_base< ns3::CcnxPitEntryOutgoingFace, std::allocator< ns3::CcnxPitEntryOutgoingFace > > > > >', 'face')])
- ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::UpdateLifetime(ns3::Time const & offsetTime) [member function]
- cls.add_method('UpdateLifetime',
- 'void',
- [param('ns3::Time const &', 'offsetTime')])
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_expireTime [variable]
- cls.add_instance_attribute('m_expireTime', 'ns3::Time', is_const=False)
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_fibEntry [variable]
- cls.add_instance_attribute('m_fibEntry', 'ns3::Ptr< ns3::CcnxFibEntry >', is_const=False)
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_incoming [variable]
- cls.add_instance_attribute('m_incoming', 'std::set< ns3::CcnxPitEntryIncomingFace >', is_const=False)
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_lastRetransmission [variable]
- cls.add_instance_attribute('m_lastRetransmission', 'ns3::Time', is_const=False)
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_maxRetxCount [variable]
- cls.add_instance_attribute('m_maxRetxCount', 'uint32_t', is_const=False)
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_outgoing [variable]
- cls.add_instance_attribute('m_outgoing', 'boost::multi_index::multi_index_container< ns3::CcnxPitEntryOutgoingFace, boost::multi_index::indexed_by< boost::multi_index::ordered_unique< boost::multi_index::tag< ns3::__ccnx_private::i_face, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na >, boost::multi_index::member< ns3::CcnxPitEntryOutgoingFace, ns3::Ptr< ns3::CcnxFace >, & ( ns3::CcnxPitEntryOutgoingFace::m_face ) >, mpl_::na >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< ns3::__ccnx_private::i_retx, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na >, boost::multi_index::member< ns3::CcnxPitEntryOutgoingFace, unsigned int, & ( ns3::CcnxPitEntryOutgoingFace::m_retxCount ) >, mpl_::na >, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na >, std::allocator< ns3::CcnxPitEntryOutgoingFace > >', is_const=False)
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_prefix [variable]
- cls.add_instance_attribute('m_prefix', 'ns3::Ptr< ns3::CcnxNameComponents >', is_const=False)
- ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_seenNonces [variable]
- cls.add_instance_attribute('m_seenNonces', 'std::set< unsigned int >', is_const=False)
- return
-
-def register_Ns3CcnxPitEntryContainer_methods(root_module, cls):
- ## ccnx-pit.h (module 'ndnSIM'): ns3::CcnxPitEntryContainer::CcnxPitEntryContainer() [constructor]
- cls.add_constructor([])
- ## ccnx-pit.h (module 'ndnSIM'): ns3::CcnxPitEntryContainer::CcnxPitEntryContainer(ns3::CcnxPitEntryContainer const & arg0) [copy constructor]
- cls.add_constructor([param('ns3::CcnxPitEntryContainer const &', 'arg0')])
- return
-
def register_Ns3CcnxPitEntryIncomingFace_methods(root_module, cls):
cls.add_binary_comparison_operator('==')
cls.add_binary_comparison_operator('<')
@@ -3243,6 +3149,18 @@
is_static=True)
return
+def register_Ns3SimpleRefCount__Ns3CcnxPitEntry_Ns3Empty_Ns3DefaultDeleter__lt__ns3CcnxPitEntry__gt___methods(root_module, cls):
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxPitEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPitEntry> >::SimpleRefCount() [constructor]
+ cls.add_constructor([])
+ ## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::CcnxPitEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPitEntry> >::SimpleRefCount(ns3::SimpleRefCount<ns3::CcnxPitEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPitEntry> > const & o) [copy constructor]
+ cls.add_constructor([param('ns3::SimpleRefCount< ns3::CcnxPitEntry, ns3::empty, ns3::DefaultDeleter< ns3::CcnxPitEntry > > const &', 'o')])
+ ## simple-ref-count.h (module 'core'): static void ns3::SimpleRefCount<ns3::CcnxPitEntry, ns3::empty, ns3::DefaultDeleter<ns3::CcnxPitEntry> >::Cleanup() [member function]
+ cls.add_method('Cleanup',
+ 'void',
+ [],
+ is_static=True)
+ return
+
def register_Ns3SimpleRefCount__Ns3EventImpl_Ns3Empty_Ns3DefaultDeleter__lt__ns3EventImpl__gt___methods(root_module, cls):
## simple-ref-count.h (module 'core'): ns3::SimpleRefCount<ns3::EventImpl, ns3::empty, ns3::DefaultDeleter<ns3::EventImpl> >::SimpleRefCount() [constructor]
cls.add_constructor([])
@@ -4013,6 +3931,11 @@
'ns3::CcnxNameComponents const &',
[],
is_const=True)
+ ## ccnx-content-object-header.h (module 'ndnSIM'): ns3::Ptr<ns3::CcnxNameComponents const> ns3::CcnxContentObjectHeader::GetNamePtr() const [member function]
+ cls.add_method('GetNamePtr',
+ 'ns3::Ptr< ns3::CcnxNameComponents const >',
+ [],
+ is_const=True)
## ccnx-content-object-header.h (module 'ndnSIM'): uint32_t ns3::CcnxContentObjectHeader::GetSerializedSize() const [member function]
cls.add_method('GetSerializedSize',
'uint32_t',
@@ -4392,15 +4315,15 @@
'void',
[],
is_pure_virtual=True, is_virtual=True)
- ## ccnx-fib.h (module 'ndnSIM'): ns3::Ptr<ns3::CcnxFibEntry> ns3::CcnxFib::LongestPrefixMatch(ns3::CcnxInterestHeader const & interest) const [member function]
+ ## ccnx-fib.h (module 'ndnSIM'): ns3::Ptr<ns3::CcnxFibEntry> ns3::CcnxFib::LongestPrefixMatch(ns3::CcnxInterestHeader const & interest) [member function]
cls.add_method('LongestPrefixMatch',
'ns3::Ptr< ns3::CcnxFibEntry >',
[param('ns3::CcnxInterestHeader const &', 'interest')],
- is_pure_virtual=True, is_const=True, is_virtual=True)
- ## ccnx-fib.h (module 'ndnSIM'): ns3::Ptr<const ns3::CcnxFibEntry> ns3::CcnxFib::Next(ns3::Ptr<const ns3::CcnxFibEntry> item) [member function]
+ is_pure_virtual=True, is_virtual=True)
+ ## ccnx-fib.h (module 'ndnSIM'): ns3::Ptr<const ns3::CcnxFibEntry> ns3::CcnxFib::Next(ns3::Ptr<const ns3::CcnxFibEntry> arg0) [member function]
cls.add_method('Next',
'ns3::Ptr< ns3::CcnxFibEntry const >',
- [param('ns3::Ptr< ns3::CcnxFibEntry const >', 'item')],
+ [param('ns3::Ptr< ns3::CcnxFibEntry const >', 'arg0')],
is_pure_virtual=True, is_virtual=True)
## ccnx-fib.h (module 'ndnSIM'): void ns3::CcnxFib::Print(std::ostream & os) const [member function]
cls.add_method('Print',
@@ -4470,6 +4393,38 @@
cls.add_constructor([param('ns3::CcnxFibEntry::NoFaces const &', 'arg0')])
return
+def register_Ns3CcnxForwardingStrategy_methods(root_module, cls):
+ ## ccnx-forwarding-strategy.h (module 'ndnSIM'): ns3::CcnxForwardingStrategy::CcnxForwardingStrategy(ns3::CcnxForwardingStrategy const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::CcnxForwardingStrategy const &', 'arg0')])
+ ## ccnx-forwarding-strategy.h (module 'ndnSIM'): ns3::CcnxForwardingStrategy::CcnxForwardingStrategy() [constructor]
+ cls.add_constructor([])
+ ## ccnx-forwarding-strategy.h (module 'ndnSIM'): static ns3::TypeId ns3::CcnxForwardingStrategy::GetTypeId() [member function]
+ cls.add_method('GetTypeId',
+ 'ns3::TypeId',
+ [],
+ is_static=True)
+ ## ccnx-forwarding-strategy.h (module 'ndnSIM'): bool ns3::CcnxForwardingStrategy::PropagateInterest(ns3::Ptr<ns3::CcnxPitEntry> pitEntry, ns3::Ptr<ns3::CcnxFace> const & incomingFace, ns3::Ptr<ns3::CcnxInterestHeader> & header, ns3::Ptr<const ns3::Packet> const & packet) [member function]
+ cls.add_method('PropagateInterest',
+ 'bool',
+ [param('ns3::Ptr< ns3::CcnxPitEntry >', 'pitEntry'), param('ns3::Ptr< ns3::CcnxFace > const &', 'incomingFace'), param('ns3::Ptr< ns3::CcnxInterestHeader > &', 'header'), param('ns3::Ptr< ns3::Packet const > const &', 'packet')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ccnx-forwarding-strategy.h (module 'ndnSIM'): void ns3::CcnxForwardingStrategy::DoDispose() [member function]
+ cls.add_method('DoDispose',
+ 'void',
+ [],
+ visibility='protected', is_virtual=True)
+ ## ccnx-forwarding-strategy.h (module 'ndnSIM'): void ns3::CcnxForwardingStrategy::NotifyNewAggregate() [member function]
+ cls.add_method('NotifyNewAggregate',
+ 'void',
+ [],
+ visibility='protected', is_virtual=True)
+ ## ccnx-forwarding-strategy.h (module 'ndnSIM'): bool ns3::CcnxForwardingStrategy::PropagateInterestViaGreen(ns3::Ptr<ns3::CcnxPitEntry> pitEntry, ns3::Ptr<ns3::CcnxFace> const & incomingFace, ns3::Ptr<ns3::CcnxInterestHeader> & header, ns3::Ptr<const ns3::Packet> const & packet) [member function]
+ cls.add_method('PropagateInterestViaGreen',
+ 'bool',
+ [param('ns3::Ptr< ns3::CcnxPitEntry >', 'pitEntry'), param('ns3::Ptr< ns3::CcnxFace > const &', 'incomingFace'), param('ns3::Ptr< ns3::CcnxInterestHeader > &', 'header'), param('ns3::Ptr< ns3::Packet const > const &', 'packet')],
+ visibility='protected')
+ return
+
def register_Ns3CcnxInterestHeader_methods(root_module, cls):
## ccnx-interest-header.h (module 'ndnSIM'): ns3::CcnxInterestHeader::CcnxInterestHeader(ns3::CcnxInterestHeader const & arg0) [copy constructor]
cls.add_constructor([param('ns3::CcnxInterestHeader const &', 'arg0')])
@@ -4515,6 +4470,11 @@
'ns3::CcnxNameComponents const &',
[],
is_const=True)
+ ## ccnx-interest-header.h (module 'ndnSIM'): ns3::Ptr<ns3::CcnxNameComponents const> ns3::CcnxInterestHeader::GetNamePtr() const [member function]
+ cls.add_method('GetNamePtr',
+ 'ns3::Ptr< ns3::CcnxNameComponents const >',
+ [],
+ is_const=True)
## ccnx-interest-header.h (module 'ndnSIM'): uint32_t ns3::CcnxInterestHeader::GetNonce() const [member function]
cls.add_method('GetNonce',
'uint32_t',
@@ -4727,6 +4687,162 @@
visibility='protected', is_virtual=True)
return
+def register_Ns3CcnxPit_methods(root_module, cls):
+ cls.add_output_stream_operator()
+ ## ccnx-pit.h (module 'ndnSIM'): ns3::CcnxPit::CcnxPit(ns3::CcnxPit const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::CcnxPit const &', 'arg0')])
+ ## ccnx-pit.h (module 'ndnSIM'): ns3::CcnxPit::CcnxPit() [constructor]
+ cls.add_constructor([])
+ ## ccnx-pit.h (module 'ndnSIM'): ns3::Ptr<ns3::CcnxPitEntry> ns3::CcnxPit::Begin() [member function]
+ cls.add_method('Begin',
+ 'ns3::Ptr< ns3::CcnxPitEntry >',
+ [],
+ is_pure_virtual=True, is_virtual=True)
+ ## ccnx-pit.h (module 'ndnSIM'): ns3::Ptr<ns3::CcnxPitEntry> ns3::CcnxPit::Create(ns3::Ptr<const ns3::CcnxInterestHeader> header) [member function]
+ cls.add_method('Create',
+ 'ns3::Ptr< ns3::CcnxPitEntry >',
+ [param('ns3::Ptr< ns3::CcnxInterestHeader const >', 'header')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ccnx-pit.h (module 'ndnSIM'): ns3::Ptr<ns3::CcnxPitEntry> ns3::CcnxPit::End() [member function]
+ cls.add_method('End',
+ 'ns3::Ptr< ns3::CcnxPitEntry >',
+ [],
+ is_pure_virtual=True, is_virtual=True)
+ ## ccnx-pit.h (module 'ndnSIM'): static ns3::Ptr<ns3::CcnxFib> ns3::CcnxPit::GetCcnxPit(ns3::Ptr<ns3::Object> node) [member function]
+ cls.add_method('GetCcnxPit',
+ 'ns3::Ptr< ns3::CcnxFib >',
+ [param('ns3::Ptr< ns3::Object >', 'node')],
+ is_static=True)
+ ## ccnx-pit.h (module 'ndnSIM'): static ns3::TypeId ns3::CcnxPit::GetTypeId() [member function]
+ cls.add_method('GetTypeId',
+ 'ns3::TypeId',
+ [],
+ is_static=True)
+ ## ccnx-pit.h (module 'ndnSIM'): ns3::Ptr<ns3::CcnxPitEntry> ns3::CcnxPit::Lookup(ns3::CcnxContentObjectHeader const & header) [member function]
+ cls.add_method('Lookup',
+ 'ns3::Ptr< ns3::CcnxPitEntry >',
+ [param('ns3::CcnxContentObjectHeader const &', 'header')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ccnx-pit.h (module 'ndnSIM'): ns3::Ptr<ns3::CcnxPitEntry> ns3::CcnxPit::Lookup(ns3::CcnxInterestHeader const & header) [member function]
+ cls.add_method('Lookup',
+ 'ns3::Ptr< ns3::CcnxPitEntry >',
+ [param('ns3::CcnxInterestHeader const &', 'header')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ccnx-pit.h (module 'ndnSIM'): void ns3::CcnxPit::MarkErased(ns3::Ptr<ns3::CcnxPitEntry> entry) [member function]
+ cls.add_method('MarkErased',
+ 'void',
+ [param('ns3::Ptr< ns3::CcnxPitEntry >', 'entry')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ccnx-pit.h (module 'ndnSIM'): ns3::Ptr<ns3::CcnxPitEntry> ns3::CcnxPit::Next(ns3::Ptr<ns3::CcnxPitEntry> arg0) [member function]
+ cls.add_method('Next',
+ 'ns3::Ptr< ns3::CcnxPitEntry >',
+ [param('ns3::Ptr< ns3::CcnxPitEntry >', 'arg0')],
+ is_pure_virtual=True, is_virtual=True)
+ ## ccnx-pit.h (module 'ndnSIM'): void ns3::CcnxPit::Print(std::ostream & os) const [member function]
+ cls.add_method('Print',
+ 'void',
+ [param('std::ostream &', 'os')],
+ is_pure_virtual=True, is_const=True, is_virtual=True)
+ ## ccnx-pit.h (module 'ndnSIM'): void ns3::CcnxPit::DoCleanExpired() [member function]
+ cls.add_method('DoCleanExpired',
+ 'void',
+ [],
+ is_pure_virtual=True, visibility='protected', is_virtual=True)
+ return
+
+def register_Ns3CcnxPitEntry_methods(root_module, cls):
+ cls.add_output_stream_operator()
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::CcnxPitEntry(ns3::CcnxPitEntry const & arg0) [copy constructor]
+ cls.add_constructor([param('ns3::CcnxPitEntry const &', 'arg0')])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::CcnxPitEntry(ns3::Ptr<const ns3::CcnxInterestHeader> header, ns3::Ptr<ns3::CcnxFibEntry> fibEntry) [constructor]
+ cls.add_constructor([param('ns3::Ptr< ns3::CcnxInterestHeader const >', 'header'), param('ns3::Ptr< ns3::CcnxFibEntry >', 'fibEntry')])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): std::_Rb_tree_const_iterator<ns3::CcnxPitEntryIncomingFace> ns3::CcnxPitEntry::AddIncoming(ns3::Ptr<ns3::CcnxFace> face) [member function]
+ cls.add_method('AddIncoming',
+ 'std::_Rb_tree_const_iterator< ns3::CcnxPitEntryIncomingFace >',
+ [param('ns3::Ptr< ns3::CcnxFace >', 'face')])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<ns3::CcnxPitEntryOutgoingFace, std::allocator<ns3::CcnxPitEntryOutgoingFace> > > > > ns3::CcnxPitEntry::AddOutgoing(ns3::Ptr<ns3::CcnxFace> face) [member function]
+ cls.add_method('AddOutgoing',
+ 'boost::multi_index::detail::bidir_node_iterator< boost::multi_index::detail::ordered_index_node< boost::multi_index::detail::ordered_index_node< boost::multi_index::detail::index_node_base< ns3::CcnxPitEntryOutgoingFace, std::allocator< ns3::CcnxPitEntryOutgoingFace > > > > >',
+ [param('ns3::Ptr< ns3::CcnxFace >', 'face')])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::AddSeenNonce(uint32_t nonce) [member function]
+ cls.add_method('AddSeenNonce',
+ 'void',
+ [param('uint32_t', 'nonce')])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): bool ns3::CcnxPitEntry::AreAllOutgoingInVain() const [member function]
+ cls.add_method('AreAllOutgoingInVain',
+ 'bool',
+ [],
+ is_const=True)
+ ## ccnx-pit-entry.h (module 'ndnSIM'): bool ns3::CcnxPitEntry::AreTherePromisingOutgoingFacesExcept(ns3::Ptr<ns3::CcnxFace> face) const [member function]
+ cls.add_method('AreTherePromisingOutgoingFacesExcept',
+ 'bool',
+ [param('ns3::Ptr< ns3::CcnxFace >', 'face')],
+ is_const=True)
+ ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::ClearIncoming() [member function]
+ cls.add_method('ClearIncoming',
+ 'void',
+ [])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::ClearOutgoing() [member function]
+ cls.add_method('ClearOutgoing',
+ 'void',
+ [])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::Time const & ns3::CcnxPitEntry::GetExpireTime() const [member function]
+ cls.add_method('GetExpireTime',
+ 'ns3::Time const &',
+ [],
+ is_const=True)
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxNameComponents const & ns3::CcnxPitEntry::GetPrefix() const [member function]
+ cls.add_method('GetPrefix',
+ 'ns3::CcnxNameComponents const &',
+ [],
+ is_const=True)
+ ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::IncreaseAllowedRetxCount() [member function]
+ cls.add_method('IncreaseAllowedRetxCount',
+ 'void',
+ [])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): bool ns3::CcnxPitEntry::IsNonceSeen(uint32_t nonce) const [member function]
+ cls.add_method('IsNonceSeen',
+ 'bool',
+ [param('uint32_t', 'nonce')],
+ is_const=True)
+ ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::RemoveAllReferencesToFace(ns3::Ptr<ns3::CcnxFace> face) [member function]
+ cls.add_method('RemoveAllReferencesToFace',
+ 'void',
+ [param('ns3::Ptr< ns3::CcnxFace >', 'face')])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::RemoveIncoming(ns3::Ptr<ns3::CcnxFace> face) [member function]
+ cls.add_method('RemoveIncoming',
+ 'void',
+ [param('ns3::Ptr< ns3::CcnxFace >', 'face')])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::SetExpireTime(ns3::Time const & expireTime) [member function]
+ cls.add_method('SetExpireTime',
+ 'void',
+ [param('ns3::Time const &', 'expireTime')])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::SetWaitingInVain(boost::multi_index::detail::bidir_node_iterator<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::ordered_index_node<boost::multi_index::detail::index_node_base<ns3::CcnxPitEntryOutgoingFace, std::allocator<ns3::CcnxPitEntryOutgoingFace> > > > > face) [member function]
+ cls.add_method('SetWaitingInVain',
+ 'void',
+ [param('boost::multi_index::detail::bidir_node_iterator< boost::multi_index::detail::ordered_index_node< boost::multi_index::detail::ordered_index_node< boost::multi_index::detail::index_node_base< ns3::CcnxPitEntryOutgoingFace, std::allocator< ns3::CcnxPitEntryOutgoingFace > > > > >', 'face')])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): void ns3::CcnxPitEntry::UpdateLifetime(ns3::Time const & offsetTime) [member function]
+ cls.add_method('UpdateLifetime',
+ 'void',
+ [param('ns3::Time const &', 'offsetTime')])
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_expireTime [variable]
+ cls.add_instance_attribute('m_expireTime', 'ns3::Time', is_const=False)
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_fibEntry [variable]
+ cls.add_instance_attribute('m_fibEntry', 'ns3::Ptr< ns3::CcnxFibEntry >', is_const=False)
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_incoming [variable]
+ cls.add_instance_attribute('m_incoming', 'std::set< ns3::CcnxPitEntryIncomingFace >', is_const=False)
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_lastRetransmission [variable]
+ cls.add_instance_attribute('m_lastRetransmission', 'ns3::Time', is_const=False)
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_maxRetxCount [variable]
+ cls.add_instance_attribute('m_maxRetxCount', 'uint32_t', is_const=False)
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_outgoing [variable]
+ cls.add_instance_attribute('m_outgoing', 'boost::multi_index::multi_index_container< ns3::CcnxPitEntryOutgoingFace, boost::multi_index::indexed_by< boost::multi_index::ordered_unique< boost::multi_index::tag< ns3::__ccnx_private::i_face, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na >, boost::multi_index::member< ns3::CcnxPitEntryOutgoingFace, ns3::Ptr< ns3::CcnxFace >, & ( ns3::CcnxPitEntryOutgoingFace::m_face ) >, mpl_::na >, boost::multi_index::ordered_non_unique< boost::multi_index::tag< ns3::__ccnx_private::i_retx, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na >, boost::multi_index::member< ns3::CcnxPitEntryOutgoingFace, unsigned int, & ( ns3::CcnxPitEntryOutgoingFace::m_retxCount ) >, mpl_::na >, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na, mpl_::na >, std::allocator< ns3::CcnxPitEntryOutgoingFace > >', is_const=False)
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_prefix [variable]
+ cls.add_instance_attribute('m_prefix', 'ns3::Ptr< ns3::CcnxNameComponents const >', is_const=False)
+ ## ccnx-pit-entry.h (module 'ndnSIM'): ns3::CcnxPitEntry::m_seenNonces [variable]
+ cls.add_instance_attribute('m_seenNonces', 'std::set< unsigned int >', is_const=False)
+ return
+
def register_Ns3EmptyAttributeValue_methods(root_module, cls):
## attribute.h (module 'core'): ns3::EmptyAttributeValue::EmptyAttributeValue(ns3::EmptyAttributeValue const & arg0) [copy constructor]
cls.add_constructor([param('ns3::EmptyAttributeValue const &', 'arg0')])
diff --git a/model/ccnx-bestroute-strategy.cc b/model/ccnx-bestroute-strategy.cc
index 3295d31..f455d60 100644
--- a/model/ccnx-bestroute-strategy.cc
+++ b/model/ccnx-bestroute-strategy.cc
@@ -57,7 +57,7 @@
}
bool
-CcnxBestRouteStrategy::PropagateInterest (const CcnxPitEntry &pitEntry,
+CcnxBestRouteStrategy::PropagateInterest (Ptr<CcnxPitEntry> pitEntry,
const Ptr<CcnxFace> &incomingFace,
Ptr<CcnxInterestHeader> &header,
const Ptr<const Packet> &packet)
@@ -73,7 +73,7 @@
int propagatedCount = 0;
- BOOST_FOREACH (const CcnxFibFaceMetric &metricFace, pitEntry.m_fibEntry->m_faces.get<i_metric> ())
+ BOOST_FOREACH (const CcnxFibFaceMetric &metricFace, pitEntry->m_fibEntry->m_faces.get<i_metric> ())
{
if (metricFace.m_status == CcnxFibFaceMetric::NDN_FIB_RED) // all non-read faces are in front
break;
@@ -81,16 +81,16 @@
if (metricFace.m_face == incomingFace)
continue; // same face as incoming, don't forward
- if (pitEntry.m_incoming.find (metricFace.m_face) != pitEntry.m_incoming.end ())
+ if (pitEntry->m_incoming.find (metricFace.m_face) != pitEntry->m_incoming.end ())
continue; // don't forward to face that we received interest from
CcnxPitEntryOutgoingFaceContainer::type::iterator outgoing =
- pitEntry.m_outgoing.find (metricFace.m_face);
+ pitEntry->m_outgoing.find (metricFace.m_face);
- if (outgoing != pitEntry.m_outgoing.end () &&
- outgoing->m_retxCount >= pitEntry.m_maxRetxCount)
+ if (outgoing != pitEntry->m_outgoing.end () &&
+ outgoing->m_retxCount >= pitEntry->m_maxRetxCount)
{
- NS_LOG_ERROR (outgoing->m_retxCount << " >= " << pitEntry.m_maxRetxCount);
+ NS_LOG_ERROR (outgoing->m_retxCount << " >= " << pitEntry->m_maxRetxCount);
continue; // already forwarded before during this retransmission cycle
}
@@ -100,8 +100,7 @@
continue;
}
- m_pit->modify (pitEntry,
- ll::bind(&CcnxPitEntry::AddOutgoing, ll::_1, metricFace.m_face));
+ pitEntry->AddOutgoing (metricFace.m_face);
Ptr<Packet> packetToSend = packet->Copy ();
diff --git a/model/ccnx-bestroute-strategy.h b/model/ccnx-bestroute-strategy.h
index f2d591b..6768da6 100644
--- a/model/ccnx-bestroute-strategy.h
+++ b/model/ccnx-bestroute-strategy.h
@@ -48,7 +48,7 @@
// inherited from CcnxForwardingStrategy
virtual bool
- PropagateInterest (const CcnxPitEntry &pitEntry,
+ PropagateInterest (Ptr<CcnxPitEntry> pitEntry,
const Ptr<CcnxFace> &incomingFace,
Ptr<CcnxInterestHeader> &header,
const Ptr<const Packet> &packet);
diff --git a/model/ccnx-content-object-header.cc b/model/ccnx-content-object-header.cc
index 0dba3cb..f11296c 100644
--- a/model/ccnx-content-object-header.cc
+++ b/model/ccnx-content-object-header.cc
@@ -79,6 +79,12 @@
return *m_name;
}
+Ptr<const CcnxNameComponents>
+CcnxContentObjectHeader::GetNamePtr () const
+{
+ return m_name;
+}
+
#define CCNB CcnxEncodingHelper // just to simplify writing
void
diff --git a/model/ccnx-content-object-header.h b/model/ccnx-content-object-header.h
index 5040dba..c563f70 100644
--- a/model/ccnx-content-object-header.h
+++ b/model/ccnx-content-object-header.h
@@ -243,6 +243,12 @@
GetName () const;
/**
+ * @brief Get smart pointer to the interest name (to avoid extra memory usage)
+ */
+ Ptr<const CcnxNameComponents>
+ GetNamePtr () const;
+
+ /**
* @brief Get editable reference to content object's Signature
*/
inline Signature &
diff --git a/model/ccnx-content-store-impl.h b/model/ccnx-content-store-impl.h
index 9619341..9bdc58e 100644
--- a/model/ccnx-content-store-impl.h
+++ b/model/ccnx-content-store-impl.h
@@ -58,7 +58,7 @@
// NS_LOG_FUNCTION (this << interest->GetName ());
/// @todo Change to search with predicate
- typename Container::iterator node = this->deepest_prefix_match (interest->GetName ());
+ typename Container::const_iterator node = this->deepest_prefix_match (interest->GetName ());
if (node != this->end ())
{
diff --git a/model/ccnx-fib-impl.cc b/model/ccnx-fib-impl.cc
index d7ffb26..e298875 100644
--- a/model/ccnx-fib-impl.cc
+++ b/model/ccnx-fib-impl.cc
@@ -70,9 +70,9 @@
Ptr<CcnxFibEntry>
-CcnxFibImpl::LongestPrefixMatch (const CcnxInterestHeader &interest) const
+CcnxFibImpl::LongestPrefixMatch (const CcnxInterestHeader &interest)
{
- super::iterator item = const_cast<CcnxFibImpl*> (this)->super::longest_prefix_match (interest.GetName ());
+ super::iterator item = super::longest_prefix_match (interest.GetName ());
// @todo use predicate to search with exclude filters
if (item == super::end ())
@@ -94,16 +94,23 @@
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<CcnxFibEntryImpl> newEntry = Create<CcnxFibEntryImpl> (prefix);
- std::pair< super::iterator, bool > result = super::insert (*prefix, newEntry);
- newEntry->SetTrie (result.first);
+ std::pair< super::iterator, bool > result = super::insert (*prefix, 0);
+ if (result.first != super::end ())
+ {
+ if (result.second)
+ {
+ Ptr<CcnxFibEntryImpl> newEntry = Create<CcnxFibEntryImpl> (prefix);
+ newEntry->SetTrie (result.first);
+ result.first->set_payload (newEntry);
+ }
- NS_ASSERT_MSG (face != NULL, "Trying to modify NULL face");
-
- super::modify (result.first,
- ll::bind (&CcnxFibEntry::AddOrUpdateRoutingMetric, ll::_1, face, metric));
+ super::modify (result.first,
+ ll::bind (&CcnxFibEntry::AddOrUpdateRoutingMetric, ll::_1, face, metric));
- return result.first->payload ();
+ return result.first->payload ();
+ }
+ else
+ return 0;
}
void
diff --git a/model/ccnx-fib-impl.h b/model/ccnx-fib-impl.h
index cd42ae0..2768a7d 100644
--- a/model/ccnx-fib-impl.h
+++ b/model/ccnx-fib-impl.h
@@ -89,7 +89,7 @@
CcnxFibImpl ();
virtual Ptr<CcnxFibEntry>
- LongestPrefixMatch (const CcnxInterestHeader &interest) const;
+ LongestPrefixMatch (const CcnxInterestHeader &interest);
virtual Ptr<CcnxFibEntry>
Add (const CcnxNameComponents &prefix, Ptr<CcnxFace> face, int32_t metric);
diff --git a/model/ccnx-fib.h b/model/ccnx-fib.h
index 09caab7..e5bda1e 100644
--- a/model/ccnx-fib.h
+++ b/model/ccnx-fib.h
@@ -62,7 +62,7 @@
* \returns If entry found a valid iterator will be returned, otherwise end ()
*/
virtual Ptr<CcnxFibEntry>
- LongestPrefixMatch (const CcnxInterestHeader &interest) const = 0;
+ LongestPrefixMatch (const CcnxInterestHeader &interest) = 0;
/**
* \brief Add or update FIB entry
diff --git a/model/ccnx-flooding-strategy.cc b/model/ccnx-flooding-strategy.cc
index f16aa78..76c12a2 100644
--- a/model/ccnx-flooding-strategy.cc
+++ b/model/ccnx-flooding-strategy.cc
@@ -64,7 +64,7 @@
}
bool
-CcnxFloodingStrategy::PropagateInterest (const CcnxPitEntry &pitEntry,
+CcnxFloodingStrategy::PropagateInterest (Ptr<CcnxPitEntry> pitEntry,
const Ptr<CcnxFace> &incomingFace,
Ptr<CcnxInterestHeader> &header,
const Ptr<const Packet> &packet)
@@ -83,7 +83,7 @@
int propagatedCount = 0;
- BOOST_FOREACH (const CcnxFibFaceMetric &metricFace, pitEntry.m_fibEntry->m_faces.get<i_metric> ())
+ BOOST_FOREACH (const CcnxFibFaceMetric &metricFace, pitEntry->m_fibEntry->m_faces.get<i_metric> ())
{
NS_LOG_DEBUG ("Trying " << boost::cref(metricFace));
if (metricFace.m_status == CcnxFibFaceMetric::NDN_FIB_RED) // all non-read faces are in the front of the list
@@ -95,22 +95,16 @@
continue; // same face as incoming, don't forward
}
- // if (pitEntry.m_incoming.find (metricFace.m_face) != pitEntry.m_incoming.end ())
- // {
- // NS_LOG_DEBUG ("continue (same as previous incoming)");
- // continue; // don't forward to face that we received interest from
- // }
-
CcnxPitEntryOutgoingFaceContainer::type::iterator outgoing =
- pitEntry.m_outgoing.find (metricFace.m_face);
+ pitEntry->m_outgoing.find (metricFace.m_face);
- if (outgoing != pitEntry.m_outgoing.end () &&
- outgoing->m_retxCount >= pitEntry.m_maxRetxCount)
+ if (outgoing != pitEntry->m_outgoing.end () &&
+ outgoing->m_retxCount >= pitEntry->m_maxRetxCount)
{
NS_LOG_DEBUG ("continue (same as previous outgoing)");
continue; // already forwarded before during this retransmission cycle
}
- NS_LOG_DEBUG ("max retx count: " << pitEntry.m_maxRetxCount);
+ NS_LOG_DEBUG ("max retx count: " << pitEntry->m_maxRetxCount);
bool faceAvailable = metricFace.m_face->IsBelowLimit ();
if (!faceAvailable) // huh...
@@ -118,14 +112,7 @@
continue;
}
- m_pit->modify (pitEntry,
- ll::bind(&CcnxPitEntry::AddOutgoing, ll::_1, metricFace.m_face));
-
- // if (Simulator::GetContext ()==2)
- // {
- // NS_LOG_ERROR ("new outgoing entry for " << boost::cref (*metricFace.m_face));
- // NS_LOG_ERROR ("size: " << pitEntry.m_outgoing.size ());
- // }
+ pitEntry->AddOutgoing (metricFace.m_face);
Ptr<Packet> packetToSend = packet->Copy ();
diff --git a/model/ccnx-flooding-strategy.h b/model/ccnx-flooding-strategy.h
index 750f21c..fa77988 100644
--- a/model/ccnx-flooding-strategy.h
+++ b/model/ccnx-flooding-strategy.h
@@ -47,7 +47,7 @@
// inherited from CcnxForwardingStrategy
virtual bool
- PropagateInterest (const CcnxPitEntry &pitEntry,
+ PropagateInterest (Ptr<CcnxPitEntry> pitEntry,
const Ptr<CcnxFace> &incomingFace,
Ptr<CcnxInterestHeader> &header,
const Ptr<const Packet> &packet);
diff --git a/model/ccnx-forwarding-strategy.cc b/model/ccnx-forwarding-strategy.cc
index 414e200..f518f95 100644
--- a/model/ccnx-forwarding-strategy.cc
+++ b/model/ccnx-forwarding-strategy.cc
@@ -82,7 +82,7 @@
}
bool
-CcnxForwardingStrategy::PropagateInterestViaGreen (const CcnxPitEntry &pitEntry,
+CcnxForwardingStrategy::PropagateInterestViaGreen (Ptr<CcnxPitEntry> pitEntry,
const Ptr<CcnxFace> &incomingFace,
Ptr<CcnxInterestHeader> &header,
const Ptr<const Packet> &packet)
@@ -92,22 +92,22 @@
int propagatedCount = 0;
- BOOST_FOREACH (const CcnxFibFaceMetric &metricFace, pitEntry.m_fibEntry->m_faces.get<i_metric> ())
+ BOOST_FOREACH (const CcnxFibFaceMetric &metricFace, pitEntry->m_fibEntry->m_faces.get<i_metric> ())
{
if (metricFace.m_status == CcnxFibFaceMetric::NDN_FIB_RED ||
metricFace.m_status == CcnxFibFaceMetric::NDN_FIB_YELLOW)
break; //propagate only to green faces
- if (pitEntry.m_incoming.find (metricFace.m_face) != pitEntry.m_incoming.end ())
+ if (pitEntry->m_incoming.find (metricFace.m_face) != pitEntry->m_incoming.end ())
continue; // don't forward to face that we received interest from
CcnxPitEntryOutgoingFaceContainer::type::iterator outgoing =
- pitEntry.m_outgoing.find (metricFace.m_face);
+ pitEntry->m_outgoing.find (metricFace.m_face);
- if (outgoing != pitEntry.m_outgoing.end () &&
- outgoing->m_retxCount >= pitEntry.m_maxRetxCount)
+ if (outgoing != pitEntry->m_outgoing.end () &&
+ outgoing->m_retxCount >= pitEntry->m_maxRetxCount)
{
- NS_LOG_DEBUG ("retxCount: " << outgoing->m_retxCount << ", maxRetxCount: " << pitEntry.m_maxRetxCount);
+ NS_LOG_DEBUG ("retxCount: " << outgoing->m_retxCount << ", maxRetxCount: " << pitEntry->m_maxRetxCount);
continue;
}
@@ -118,8 +118,7 @@
continue;
}
- m_pit->modify (pitEntry,
- ll::bind (&CcnxPitEntry::AddOutgoing, ll::_1, metricFace.m_face));
+ pitEntry->AddOutgoing (metricFace.m_face);
Ptr<Packet> packetToSend = packet->Copy ();
diff --git a/model/ccnx-forwarding-strategy.h b/model/ccnx-forwarding-strategy.h
index 99ed02c..ed28fd4 100644
--- a/model/ccnx-forwarding-strategy.h
+++ b/model/ccnx-forwarding-strategy.h
@@ -61,7 +61,7 @@
* @return true if interest was successfully propagated, false if all options have failed
*/
virtual bool
- PropagateInterest (const CcnxPitEntry &pitEntry,
+ PropagateInterest (Ptr<CcnxPitEntry> pitEntry,
const Ptr<CcnxFace> &incomingFace,
Ptr<CcnxInterestHeader> &header,
const Ptr<const Packet> &packet) = 0;
@@ -80,7 +80,7 @@
* \see PropagateInterest
*/
bool
- PropagateInterestViaGreen (const CcnxPitEntry &pitEntry,
+ PropagateInterestViaGreen (Ptr<CcnxPitEntry> pitEntry,
const Ptr<CcnxFace> &incomingFace,
Ptr<CcnxInterestHeader> &header,
const Ptr<const Packet> &packet);
diff --git a/model/ccnx-interest-header.cc b/model/ccnx-interest-header.cc
index 554cded..2c7e798 100644
--- a/model/ccnx-interest-header.cc
+++ b/model/ccnx-interest-header.cc
@@ -74,6 +74,12 @@
return *m_name;
}
+Ptr<const CcnxNameComponents>
+CcnxInterestHeader::GetNamePtr () const
+{
+ return m_name;
+}
+
void
CcnxInterestHeader::SetMinSuffixComponents (int32_t value)
{
diff --git a/model/ccnx-interest-header.h b/model/ccnx-interest-header.h
index 8b1d5c4..77b8426 100644
--- a/model/ccnx-interest-header.h
+++ b/model/ccnx-interest-header.h
@@ -155,6 +155,12 @@
GetName () const;
/**
+ * @brief Get smart pointer to the interest name (to avoid extra memory usage)
+ */
+ Ptr<const CcnxNameComponents>
+ GetNamePtr () const;
+
+ /**
* \brief Set interest MinSuffixComponents
*
* MinSuffixComponents refer to the number of name components beyond those in the prefix,
diff --git a/model/ccnx-l3-protocol.cc b/model/ccnx-l3-protocol.cc
index 928d015..27012e3 100644
--- a/model/ccnx-l3-protocol.cc
+++ b/model/ccnx-l3-protocol.cc
@@ -175,24 +175,22 @@
face->RegisterProtocolHandler (MakeNullCallback<void,const Ptr<CcnxFace>&,const Ptr<const Packet>&> ());
// just to be on a safe side. Do the process in two steps
- std::list<boost::reference_wrapper<const CcnxPitEntry> > entriesToRemoves;
- NS_ASSERT_MSG (false, "Need to be repaired");
- // BOOST_FOREACH (const CcnxPitEntry &pitEntry, *m_pit)
- // {
- // m_pit->modify (pitEntry,
- // ll::bind (&CcnxPitEntry::RemoveAllReferencesToFace, ll::_1, face));
-
- // // If this face is the only for the associated FIB entry, then FIB entry will be removed soon.
- // // Thus, we have to remove the whole PIT entry
- // if (pitEntry.m_fibEntry->m_faces.size () == 1 &&
- // pitEntry.m_fibEntry->m_faces.begin ()->m_face == face)
- // {
- // entriesToRemoves.push_back (boost::cref (pitEntry));
- // }
- // }
- BOOST_FOREACH (const CcnxPitEntry &removedEntry, entriesToRemoves)
+ std::list< Ptr<CcnxPitEntry> > entriesToRemoves;
+ for (Ptr<CcnxPitEntry> pitEntry = m_pit->Begin (); pitEntry != 0; pitEntry = m_pit->Next (pitEntry))
{
- m_pit->erase (removedEntry);
+ pitEntry->RemoveAllReferencesToFace (face);
+
+ // If this face is the only for the associated FIB entry, then FIB entry will be removed soon.
+ // Thus, we have to remove the whole PIT entry
+ if (pitEntry->m_fibEntry->m_faces.size () == 1 &&
+ pitEntry->m_fibEntry->m_faces.begin ()->m_face == face)
+ {
+ entriesToRemoves.push_back (pitEntry);
+ }
+ }
+ BOOST_FOREACH (Ptr<CcnxPitEntry> removedEntry, entriesToRemoves)
+ {
+ m_pit->MarkErased (removedEntry);
}
CcnxFaceList::iterator face_it = find (m_faces.begin(), m_faces.end(), face);
@@ -322,17 +320,15 @@
// incomingFace->LeakBucketByOnePacket ();
NS_LOG_ERROR ("Nack on " << boost::cref(*incomingFace));
-
- m_pit->modify (pitEntry,
- ll::bind (&CcnxPitEntry::SetWaitingInVain, ll::_1, outFace));
+
+ pitEntry->SetWaitingInVain (outFace);
// If NACK is NACK_GIVEUP_PIT, then neighbor gave up trying to and removed it's PIT entry.
// So, if we had an incoming entry to this neighbor, then we can remove it now
if (header->GetNack () == CcnxInterestHeader::NACK_GIVEUP_PIT)
{
- m_pit->modify (pitEntry,
- ll::bind (&CcnxPitEntry::RemoveIncoming, ll::_1, incomingFace));
+ pitEntry->RemoveIncoming (incomingFace);
}
pitEntry->m_fibEntry->UpdateStatus (incomingFace, CcnxFibFaceMetric::NDN_FIB_YELLOW);
@@ -361,7 +357,7 @@
nonNackInterest->AddHeader (*header);
bool propagated = m_forwardingStrategy->
- PropagateInterest (*pitEntry, incomingFace, header, nonNackInterest);
+ PropagateInterest (pitEntry, incomingFace, header, nonNackInterest);
// // ForwardingStrategy will try its best to forward packet to at least one interface.
// // If no interests was propagated, then there is not other option for forwarding or
@@ -386,7 +382,7 @@
Ptr<CcnxPitEntry> pitEntry = m_pit->Lookup (*header);
if (pitEntry == 0)
{
- pitEntry = m_pit->Create (*header);
+ pitEntry = m_pit->Create (header);
}
if (pitEntry == 0)
@@ -397,8 +393,13 @@
}
bool isNew = pitEntry->m_incoming.size () == 0 && pitEntry->m_outgoing.size () == 0;
- bool isDuplicated = m_pit->CheckIfDuplicate (pitEntry, *header);
-
+ bool isDuplicated = true;
+ if (!pitEntry->IsNonceSeen (header->GetNonce ()))
+ {
+ pitEntry->AddSeenNonce (header->GetNonce ());
+ isDuplicated = false;
+ }
+
NS_LOG_FUNCTION (header->GetName () << header->GetNonce () << boost::cref (*incomingFace) << isDuplicated);
/////////////////////////////////////////////////////////////////////////////////////////
@@ -426,8 +427,7 @@
}
else
{
- m_pit->modify (pitEntry,
- ll::var(inFace) = ll::bind (&CcnxPitEntry::AddIncoming, ll::_1, incomingFace));
+ inFace = pitEntry->AddIncoming (incomingFace);
}
//////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////
@@ -472,9 +472,7 @@
}
// update PIT entry lifetime
- m_pit->modify (pitEntry,
- ll::bind (&CcnxPitEntry::UpdateLifetime, ll::_1,
- header->GetInterestLifetime ()));
+ pitEntry->UpdateLifetime (header->GetInterestLifetime ());
if (outFace != pitEntry->m_outgoing.end ())
{
@@ -506,17 +504,16 @@
/////////////////////////////////////////////////////////////////////
bool propagated = m_forwardingStrategy->
- PropagateInterest (*pitEntry, incomingFace, header, packet);
+ PropagateInterest (pitEntry, incomingFace, header, packet);
if (!propagated && isRetransmitted) //give another chance if retransmitted
{
// increase max number of allowed retransmissions
- m_pit->modify (pitEntry,
- ll::bind (&CcnxPitEntry::IncreaseAllowedRetxCount, ll::_1));
+ pitEntry->IncreaseAllowedRetxCount ();
// try again
propagated = m_forwardingStrategy->
- PropagateInterest (*pitEntry, incomingFace, header, packet);
+ PropagateInterest (pitEntry, incomingFace, header, packet);
}
// ForwardingStrategy will try its best to forward packet to at least one interface.
@@ -552,12 +549,10 @@
if (pitEntry->m_incoming.size () > 0)
{
// All incoming interests are satisfied. Remove them
- m_pit->modify (pitEntry,
- ll::bind (&CcnxPitEntry::ClearIncoming, ll::_1));
+ pitEntry->ClearIncoming ();
// Remove all outgoing faces
- m_pit->modify (pitEntry,
- ll::bind (&CcnxPitEntry::ClearOutgoing, ll::_1));
+ pitEntry->ClearOutgoing ();
// Set pruning timout on PIT entry (instead of deleting the record)
m_pit->MarkErased (pitEntry);
@@ -628,8 +623,7 @@
// Add or update entry in the content store
m_contentStore->Add (header, payload);
- m_pit->modify (pitEntry,
- ll::bind (&CcnxPitEntry::RemoveIncoming, ll::_1, incomingFace));
+ pitEntry->RemoveIncoming (incomingFace);
if (pitEntry->m_incoming.size () == 0)
{
@@ -682,12 +676,10 @@
}
// All incoming interests cannot be satisfied. Remove them
- m_pit->modify (pitEntry,
- ll::bind (&CcnxPitEntry::ClearIncoming, ll::_1));
+ pitEntry->ClearIncoming ();
// Remove also outgoing
- m_pit->modify (pitEntry,
- ll::bind (&CcnxPitEntry::ClearOutgoing, ll::_1));
+ pitEntry->ClearOutgoing ();
// Set pruning timout on PIT entry (instead of deleting the record)
m_pit->MarkErased (pitEntry);
diff --git a/model/ccnx-pit-entry.cc b/model/ccnx-pit-entry.cc
index ad81781..491896e 100644
--- a/model/ccnx-pit-entry.cc
+++ b/model/ccnx-pit-entry.cc
@@ -21,6 +21,7 @@
#include "ccnx-pit-entry.h"
#include "ccnx-name-components.h"
#include "ccnx-fib.h"
+#include "ccnx-interest-header.h"
#include "ns3/simulator.h"
#include "ns3/log.h"
@@ -35,14 +36,14 @@
namespace ns3
{
-CcnxPitEntry::CcnxPitEntry (Ptr<const CcnxNameComponents> prefix,
- const Time &expireTime,
+CcnxPitEntry::CcnxPitEntry (Ptr<const CcnxInterestHeader> header,
Ptr<CcnxFibEntry> fibEntry)
- : m_prefix (prefix)
+ : m_prefix (header->GetNamePtr ())
+ , m_expireTime (Simulator::Now () + header->GetInterestLifetime ())
, m_fibEntry (fibEntry)
- , m_expireTime (Simulator::Now () + expireTime)
, m_maxRetxCount (0)
{
+ // note that if interest lifetime is not set, the behavior is undefined
}
void
diff --git a/model/ccnx-pit-entry.h b/model/ccnx-pit-entry.h
index 62f7e3f..2e38657 100644
--- a/model/ccnx-pit-entry.h
+++ b/model/ccnx-pit-entry.h
@@ -98,7 +98,7 @@
* \param offsetTime Relative time to the current moment, representing PIT entry lifetime
* \param fibEntry A FIB entry associated with the PIT entry
*/
- CcnxPitEntry (Ptr<const CcnxNameComponents> prefix, const Time &offsetTime, Ptr<CcnxFibEntry> fibEntry);
+ CcnxPitEntry (Ptr<const CcnxInterestHeader> header, Ptr<CcnxFibEntry> fibEntry);
/**
* @brief Update lifetime of PIT entry
@@ -227,8 +227,6 @@
void
IncreaseAllowedRetxCount ();
-protected:
-
private:
friend std::ostream& operator<< (std::ostream& os, const CcnxPitEntry &entry);
/**
diff --git a/model/ccnx-pit-impl.cc b/model/ccnx-pit-impl.cc
index 11c91e9..5e353a9 100644
--- a/model/ccnx-pit-impl.cc
+++ b/model/ccnx-pit-impl.cc
@@ -67,12 +67,13 @@
uint32_t
CcnxPitImpl::GetMaxSize () const
{
- return 0;
+ return getPolicy ().get_max_size ();
}
void
CcnxPitImpl::SetMaxSize (uint32_t maxSize)
{
+ getPolicy ().set_max_size (maxSize);
}
void
@@ -87,7 +88,7 @@
void
CcnxPitImpl::DoDispose ()
{
- // clear ();
+ clear ();
}
void
@@ -96,6 +97,7 @@
// NS_LOG_LOGIC ("Cleaning PIT. Total: " << size ());
Time now = Simulator::Now ();
+ NS_LOG_ERROR ("Need to be repaired");
// // uint32_t count = 0;
// while (!empty ())
// {
@@ -111,101 +113,126 @@
}
Ptr<CcnxPitEntry>
-CcnxPitImpl::Lookup (const CcnxContentObjectHeader &header) const
+CcnxPitImpl::Lookup (const CcnxContentObjectHeader &header)
{
- return 0;
- // iterator entry = end ();
+ /// @todo use predicate to search with exclude filters
+ super::iterator item = super::longest_prefix_match (header.GetName ());
- // // do the longest prefix match
- // const CcnxNameComponents &name = header.GetName ();
- // for (size_t componentsCount = name.GetComponents ().size ()+1;
- // componentsCount > 0;
- // componentsCount--)
- // {
- // CcnxNameComponents subPrefix (name.GetSubComponents (componentsCount-1));
-
- // entry = get<i_prefix> ().find (subPrefix);
- // if (entry != end())
- // return entry;
- // }
-
- // return end ();
+ if (item == super::end ())
+ return 0;
+ else
+ return item->payload (); // which could also be 0
}
Ptr<CcnxPitEntry>
CcnxPitImpl::Lookup (const CcnxInterestHeader &header)
{
- return 0;
- // NS_LOG_FUNCTION (header.GetName ());
- // NS_ASSERT_MSG (m_fib != 0, "FIB should be set");
+ NS_LOG_FUNCTION (header.GetName ());
+ NS_ASSERT_MSG (m_fib != 0, "FIB should be set");
- // iterator entry = get<i_prefix> ().find (header.GetName ());
- // if (entry == end ())
- // return end ();
-
- // return entry;
-}
+ super::iterator foundItem, lastItem;
+ bool reachLast;
+ boost::tie (foundItem, reachLast, lastItem) = super::getTrie ().find (header.GetName ());
-bool
-CcnxPitImpl::CheckIfDuplicate (Ptr<CcnxPitEntry> entry, const CcnxInterestHeader &header)
-{
- // if (!entry->IsNonceSeen (header.GetNonce ()))
- // {
- // modify (entry,
- // boost::bind(&CcnxPitEntry::AddSeenNonce, ll::_1, header.GetNonce ()));
- // return false;
- // }
- // else
- // return true;
- return false;
+ if (!reachLast || lastItem == super::end ())
+ return 0;
+ else
+ return lastItem->payload (); // which could also be 0
}
Ptr<CcnxPitEntry>
-CcnxPitImpl::Create (const CcnxInterestHeader &header)
+CcnxPitImpl::Create (Ptr<const CcnxInterestHeader> header)
{
- // NS_ASSERT_MSG (get<i_prefix> ().find (header.GetName ()) == end (),
- // "Entry already exists, Create must not be called!!!");
-
- // if (m_maxSize > 0 &&
- // size () >= m_maxSize)
- // {
- // // remove old record
- // get<i_timestamp> ().erase (get<i_timestamp> ().begin ());
- // }
-
- // Ptr<CcnxFibEntry> fibEntry = m_fib->LongestPrefixMatch (header);
- // // NS_ASSERT_MSG (fibEntry != m_fib->m_fib.end (),
- // // "There should be at least default route set" << " Prefix = "<<header.GetName() << "NodeID == " << m_fib->GetObject<Node>()->GetId() << "\n" << *m_fib);
+ Ptr<CcnxFibEntry> fibEntry = m_fib->LongestPrefixMatch (*header);
+ NS_ASSERT_MSG (fibEntry != 0,
+ "There should be at least default route set" <<
+ " Prefix = "<< header->GetName() << "NodeID == " << m_fib->GetObject<Node>()->GetId() << "\n" << *m_fib);
- // return insert (end (),
- // CcnxPitEntry (ns3::Create<CcnxNameComponents> (header.GetName ()),
- // header.GetInterestLifetime ().IsZero ()?m_PitEntryDefaultLifetime
- // : header.GetInterestLifetime (),
- // fibEntry));
- return 0;
+
+ Ptr<CcnxPitEntryImpl> newEntry = ns3::Create<CcnxPitEntryImpl> (header, fibEntry);
+ std::pair< super::iterator, bool > result = super::insert (header->GetName (), newEntry);
+ if (result.first != super::end ())
+ {
+ if (result.second)
+ {
+ newEntry->SetTrie (result.first);
+ return newEntry;
+ }
+ else
+ {
+ // should we do anything?
+ // update payload? add new payload?
+ return result.first->payload ();
+ }
+ }
+ else
+ return 0;
}
void
CcnxPitImpl::MarkErased (Ptr<CcnxPitEntry> entry)
{
- // modify (entry,
- // ll::bind (&CcnxPitEntry::SetExpireTime, ll::_1,
- // Simulator::Now () + m_PitEntryPruningTimout));
+ // entry->SetExpireTime (Simulator::Now () + m_PitEntryPruningTimout);
+ super::erase (StaticCast<CcnxPitEntryImpl> (entry)->to_iterator ());
}
void
CcnxPitImpl::Print (std::ostream& os) const
{
- os << "Should be implemented soon\n";
- // BOOST_FOREACH (const CcnxPitEntry &entry, pit)
- // {
- // if (entry.m_incoming.size () == 0 && entry.m_outgoing.size () == 0)
- // continue; // these are stale to-be-removed records, so there is no need to print them out
-
- // os << entry << std::endl;
- // }
+ // !!! unordered_set imposes "random" order of item in the same level !!!
+ super::parent_trie::const_recursive_iterator item (super::getTrie ()), end (0);
+ for (; item != end; item++)
+ {
+ if (item->payload () == 0) continue;
+
+ os << item->payload ()->GetPrefix () << "\t" << *item->payload () << "\n";
+ }
}
+Ptr<CcnxPitEntry>
+CcnxPitImpl::Begin ()
+{
+ super::parent_trie::recursive_iterator item (super::getTrie ()), end (0);
+ for (; item != end; item++)
+ {
+ if (item->payload () == 0) continue;
+ break;
+ }
+
+ if (item == end)
+ return End ();
+ else
+ return item->payload ();
+}
+
+Ptr<CcnxPitEntry>
+CcnxPitImpl::End ()
+{
+ return 0;
+}
+
+Ptr<CcnxPitEntry>
+CcnxPitImpl::Next (Ptr<CcnxPitEntry> from)
+{
+ if (from == 0) return 0;
+
+ super::parent_trie::recursive_iterator
+ item (*StaticCast<CcnxPitEntryImpl> (from)->to_iterator ()),
+ end (0);
+
+ for (item++; item != end; item++)
+ {
+ if (item->payload () == 0) continue;
+ break;
+ }
+
+ if (item == end)
+ return End ();
+ else
+ return item->payload ();
+}
+
+
} // namespace ns3
diff --git a/model/ccnx-pit-impl.h b/model/ccnx-pit-impl.h
index 3f5fdfc..499957f 100644
--- a/model/ccnx-pit-impl.h
+++ b/model/ccnx-pit-impl.h
@@ -24,6 +24,7 @@
#include "ccnx-pit.h"
#include "../utils/trie-with-policy.h"
#include "../utils/empty-policy.h"
+#include "../utils/persistent-policy.h"
#include "ns3/ccnx-name-components.h"
namespace ns3 {
@@ -34,11 +35,12 @@
typedef ndnSIM::trie_with_policy<
CcnxNameComponents,
ndnSIM::smart_pointer_payload_traits<CcnxPitEntryImpl>,
- ndnSIM::empty_policy_traits
+ ndnSIM::persistent_policy_traits
> trie;
- CcnxPitEntryImpl (const Ptr<const CcnxNameComponents> &prefix, const Time &offsetTime, Ptr<CcnxFibEntry> fibEntry)
- : CcnxPitEntry (prefix, offsetTime, fibEntry)
+ CcnxPitEntryImpl (Ptr<const CcnxInterestHeader> header,
+ Ptr<CcnxFibEntry> fibEntry)
+ : CcnxPitEntry (header, fibEntry)
, item_ (0)
{
}
@@ -88,16 +90,13 @@
// inherited from CcnxPit
virtual Ptr<CcnxPitEntry>
- Lookup (const CcnxContentObjectHeader &header) const;
+ Lookup (const CcnxContentObjectHeader &header);
virtual Ptr<CcnxPitEntry>
Lookup (const CcnxInterestHeader &header);
- virtual bool
- CheckIfDuplicate (Ptr<CcnxPitEntry> entry, const CcnxInterestHeader &header);
-
virtual Ptr<CcnxPitEntry>
- Create (const CcnxInterestHeader &header);
+ Create (Ptr<const CcnxInterestHeader> header);
virtual void
MarkErased (Ptr<CcnxPitEntry> entry);
@@ -105,15 +104,14 @@
virtual void
Print (std::ostream &os) const;
- // /**
- // * @brief Modify element in container
- // */
- // template<typename Modifier>
- // bool
- // modify (Ptr<CcnxPitEntry> item, Modifier mod)
- // {
- // return super::modify (StaticCast<CcnxPitEntryImpl> (item)->to_iterator (), mod);
- // }
+ virtual Ptr<CcnxPitEntry>
+ Begin ();
+
+ virtual Ptr<CcnxPitEntry>
+ End ();
+
+ virtual Ptr<CcnxPitEntry>
+ Next (Ptr<CcnxPitEntry>);
protected:
// inherited from CcnxPit
diff --git a/model/ccnx-pit.cc b/model/ccnx-pit.cc
index 3733880..a6328fd 100644
--- a/model/ccnx-pit.cc
+++ b/model/ccnx-pit.cc
@@ -54,12 +54,6 @@
StringValue ("100ms"),
MakeTimeAccessor (&CcnxPit::m_PitEntryPruningTimout),
MakeTimeChecker ())
-
- .AddAttribute ("PitEntryDefaultLifetime",
- "Default lifetime of PIT entry (aka default Interest lifetime)",
- StringValue("4s"),
- MakeTimeAccessor (&CcnxPit::m_PitEntryDefaultLifetime),
- MakeTimeChecker ())
;
return tid;
diff --git a/model/ccnx-pit.h b/model/ccnx-pit.h
index b6e4388..0597863 100644
--- a/model/ccnx-pit.h
+++ b/model/ccnx-pit.h
@@ -63,12 +63,17 @@
/**
* \brief Find corresponding PIT entry for the given content name
+ *
+ * Not that this call should be repeated enough times until it return 0.
+ * This way all records with shorter or equal prefix as in content object will be found
+ * and satisfied.
+ *
* \param prefix Prefix for which to lookup the entry
- * \returns iterator to Pit entry. If record not found,
- * return end() iterator
+ * \returns smart pointer to PIT entry. If record not found,
+ * returns 0
*/
virtual Ptr<CcnxPitEntry>
- Lookup (const CcnxContentObjectHeader &header) const = 0;
+ Lookup (const CcnxContentObjectHeader &header) = 0;
/**
* \brief Find a PIT entry for the given content interest
@@ -80,14 +85,6 @@
Lookup (const CcnxInterestHeader &header) = 0;
/**
- * @brief Check if the Interest carries an existent nonce.
- * If not, nonce will be added to the list of known nonces
- * @returns true if interest is duplicate (carries an existent nonce), false otherwise
- */
- virtual bool
- CheckIfDuplicate (Ptr<CcnxPitEntry> entry, const CcnxInterestHeader &header) = 0;
-
- /**
* @brief Creates a PIT entry for the given interest
* @param header parsed interest header
* @returns iterator to Pit entry. If record could not be created (e.g., limit reached),
@@ -96,7 +93,7 @@
* Note. This call assumes that the entry does not exist (i.e., there was a Lookup call before)
*/
virtual Ptr<CcnxPitEntry>
- Create (const CcnxInterestHeader &header) = 0;
+ Create (Ptr<const CcnxInterestHeader> header) = 0;
/**
* @brief Mark PIT entry deleted
@@ -116,19 +113,37 @@
virtual void
Print (std::ostream &os) const = 0;
- template<class A,class M>
- void
- modify (A, M)
- {
- ;
- }
+ // template<class A,class M>
+ // void
+ // modify (A, M)
+ // {
+ // ;
+ // }
- template<class A>
- void
- erase (A)
- {
- ;
- }
+ // template<class A>
+ // void
+ // erase (A)
+ // {
+ // ;
+ // }
+
+ /**
+ * @brief Return first element of FIB (no order guaranteed)
+ */
+ virtual Ptr<CcnxPitEntry>
+ Begin () = 0;
+
+ /**
+ * @brief Return item next after last (no order guaranteed)
+ */
+ virtual Ptr<CcnxPitEntry>
+ End () = 0;
+
+ /**
+ * @brief Advance the iterator
+ */
+ virtual Ptr<CcnxPitEntry>
+ Next (Ptr<CcnxPitEntry>) = 0;
////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////
@@ -137,7 +152,7 @@
/**
* @brief Static call to cheat python bindings
*/
- static inline Ptr<CcnxFib>
+ static inline Ptr<CcnxPit>
GetCcnxPit (Ptr<Object> node);
////////////////////////////////////////////////////////////////////////////
@@ -179,7 +194,6 @@
// configuration variables. Check implementation of GetTypeId for more details
Time m_PitEntryPruningTimout;
- Time m_PitEntryDefaultLifetime;
};
///////////////////////////////////////////////////////////////////////////////
@@ -192,6 +206,13 @@
return os;
}
+inline Ptr<CcnxPit>
+CcnxPit::GetCcnxPit (Ptr<Object> node)
+{
+ return node->GetObject<CcnxPit> ();
+}
+
+
} // namespace ns3
#endif /* CCNX_PIT_H */
diff --git a/utils/empty-policy.h b/utils/empty-policy.h
index c5f324c..a04507d 100644
--- a/utils/empty-policy.h
+++ b/utils/empty-policy.h
@@ -24,6 +24,9 @@
namespace ndnSIM
{
+/**
+ * @brief Traits for empty (bogus) replacement policy
+ */
struct empty_policy_traits
{
typedef void* policy_hook_type;
diff --git a/utils/fifo-policy.h b/utils/fifo-policy.h
index 2dccbe4..7a61721 100644
--- a/utils/fifo-policy.h
+++ b/utils/fifo-policy.h
@@ -27,6 +27,9 @@
namespace ndnSIM
{
+/**
+ * @brief Traits for First In First Out replacement policy
+ */
struct fifo_policy_traits
{
struct policy_hook_type : public boost::intrusive::list_member_hook<> {};
diff --git a/utils/lru-policy.h b/utils/lru-policy.h
index 077d602..92a9953 100644
--- a/utils/lru-policy.h
+++ b/utils/lru-policy.h
@@ -27,6 +27,9 @@
namespace ndnSIM
{
+/**
+ * @brief Traits for Least Recently Used replacement policy
+ */
struct lru_policy_traits
{
struct policy_hook_type : public boost::intrusive::list_member_hook<> {};
diff --git a/utils/payload-policy.h b/utils/payload-policy.h
new file mode 100644
index 0000000..5eb384a
--- /dev/null
+++ b/utils/payload-policy.h
@@ -0,0 +1,131 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 University of California, Los Angeles
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#ifndef PAYLOAD_POLICY_H_
+#define PAYLOAD_POLICY_H_
+
+#include <boost/intrusive/options.hpp>
+#include <boost/intrusive/list.hpp>
+
+namespace ndnSIM
+{
+
+/**
+ * @brief Traits for policy that keeps items in a sorted order using payload member
+ */
+template<class Member>
+struct payload_policy_traits
+{
+ struct policy_hook_type : public boost::intrusive::set_member_hook<> {};
+
+ template<class Container>
+ struct container_hook
+ {
+ typedef boost::intrusive::member_hook< Container,
+ policy_hook_type,
+ &Container::policy_hook_ > type;
+ };
+
+ template<class Base,
+ class Container,
+ class Hook>
+ struct policy
+ {
+ typedef typename boost::intrusive::list< Container, Hook > policy_container;
+
+ // could be just typedef
+ class type : public policy_container
+ {
+ public:
+ typedef Container parent_trie;
+
+ type (Base &base)
+ : base_ (base)
+ , max_size_ (100)
+ {
+ }
+
+ inline void
+ update (typename parent_trie::iterator item)
+ {
+ // do relocation
+ policy_container::splice (policy_container::end (),
+ *this,
+ policy_container::s_iterator_to (*item));
+ }
+
+ inline bool
+ insert (typename parent_trie::iterator item)
+ {
+ if (policy_container::size () >= max_size_)
+ {
+ base_.erase (&(*policy_container::begin ()));
+ }
+
+ policy_container::push_back (*item);
+ return true;
+ }
+
+ inline void
+ lookup (typename parent_trie::iterator item)
+ {
+ // do relocation
+ policy_container::splice (policy_container::end (),
+ *this,
+ policy_container::s_iterator_to (*item));
+ }
+
+ inline void
+ erase (typename parent_trie::iterator item)
+ {
+ policy_container::erase (policy_container::s_iterator_to (*item));
+ }
+
+ inline void
+ clear ()
+ {
+ policy_container::clear ();
+ }
+
+ inline void
+ set_max_size (size_t max_size)
+ {
+ max_size_ = max_size;
+ }
+
+ inline size_t
+ get_max_size () const
+ {
+ return max_size_;
+ }
+
+ private:
+ type () : base_(*((Base*)0)) { };
+
+ private:
+ Base &base_;
+ size_t max_size_;
+ };
+ };
+};
+
+} // ndnSIM
+
+#endif // PAYLOAD_POLICY_H
diff --git a/utils/persistent-policy.h b/utils/persistent-policy.h
new file mode 100644
index 0000000..fb72864
--- /dev/null
+++ b/utils/persistent-policy.h
@@ -0,0 +1,125 @@
+/* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */
+/*
+ * Copyright (c) 2011 University of California, Los Angeles
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation;
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ *
+ * Author: Alexander Afanasyev <alexander.afanasyev@ucla.edu>
+ */
+
+#ifndef PERSISTENT_POLICY_H_
+#define PERSISTENT_POLICY_H_
+
+#include <boost/intrusive/options.hpp>
+#include <boost/intrusive/list.hpp>
+
+namespace ndnSIM
+{
+
+/**
+ * @brief Traits for persistent replacement policy
+ *
+ * In this policy entries are added until there is a space (controlled by set_max_size call).
+ * If maximum is reached, new entries will not be added and nothing will be removed from the container
+ */
+struct persistent_policy_traits
+{
+ struct policy_hook_type : public boost::intrusive::list_member_hook<> {};
+
+ template<class Container>
+ struct container_hook
+ {
+ typedef boost::intrusive::member_hook< Container,
+ policy_hook_type,
+ &Container::policy_hook_ > type;
+ };
+
+ template<class Base,
+ class Container,
+ class Hook>
+ struct policy
+ {
+ typedef typename boost::intrusive::list< Container, Hook > policy_container;
+
+ // could be just typedef
+ class type : public policy_container
+ {
+ public:
+ typedef Container parent_trie;
+
+ type (Base &base)
+ : base_ (base)
+ , max_size_ (100) // when 0, policy is not enforced
+ {
+ }
+
+ inline void
+ update (typename parent_trie::iterator item)
+ {
+ // do nothing
+ }
+
+ inline bool
+ insert (typename parent_trie::iterator item)
+ {
+ if (max_size_ != 0 && policy_container::size () >= max_size_)
+ return false;
+
+ policy_container::push_back (*item);
+ return true;
+ }
+
+ inline void
+ lookup (typename parent_trie::iterator item)
+ {
+ // do nothing
+ }
+
+ inline void
+ erase (typename parent_trie::iterator item)
+ {
+ policy_container::erase (policy_container::s_iterator_to (*item));
+ }
+
+ inline void
+ clear ()
+ {
+ policy_container::clear ();
+ }
+
+ inline void
+ set_max_size (size_t max_size)
+ {
+ max_size_ = max_size;
+ }
+
+ inline size_t
+ get_max_size () const
+ {
+ return max_size_;
+ }
+
+ private:
+ // type () : base_(*((Base*)0)) { };
+
+ private:
+ Base &base_;
+ size_t max_size_;
+ };
+ };
+};
+
+} // ndnSIM
+
+#endif // PERSISTENT_POLICY_H_
diff --git a/utils/random-policy.h b/utils/random-policy.h
index 7a96712..288cd74 100644
--- a/utils/random-policy.h
+++ b/utils/random-policy.h
@@ -29,6 +29,9 @@
namespace ndnSIM
{
+/**
+ * @brief Traits for random replacement policy
+ */
struct random_policy_traits
{
struct policy_hook_type : public boost::intrusive::set_member_hook<> { uint32_t randomOrder; };
diff --git a/utils/trie-with-policy.h b/utils/trie-with-policy.h
index a2be29a..ea194b3 100644
--- a/utils/trie-with-policy.h
+++ b/utils/trie-with-policy.h
@@ -34,7 +34,6 @@
{
public:
typedef trie< FullKey,
- typename PayloadTraits::payload_type,
PayloadTraits,
typename PolicyTraits::policy_hook_type > parent_trie;
@@ -133,6 +132,16 @@
return foundItem;
}
+ // /**
+ // * @brief Const version of the longest common prefix match
+ // * (semi-const, because there could be update of the policy anyways)
+ // */
+ // inline const_iterator
+ // longest_prefix_match (const FullKey &key) const
+ // {
+ // return static_cast<trie_with_policy*> (this)->longest_prefix_match (key);
+ // }
+
/**
* @brief Find a node that has prefix at least as the key (cache lookup)
*/
@@ -221,7 +230,7 @@
private:
parent_trie trie_;
- policy_container policy_;
+ mutable policy_container policy_;
};
} // ndnSIM
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_);
}