[ndnSIM] [2] ContentStore order

Wassim Drira drirawassim+ndnsim at gmail.com
Mon Nov 18 11:35:10 PST 2013


Thanks! this is better, I will add getPolicy( )to ContentStoreImpl class.

Regards,


On Mon, Nov 18, 2013 at 9:15 PM, Alex Afanasyev <
alexander.afanasyev at ucla.edu> wrote:

> Oh... I forgot to mention to update the ndnSIM codebase.  I have added
> GetPolicy() method to ContentStoreImpl class.
>
> Making it public also solves the problem, but I have intentionally made
> the qualifier protected, so to ensure that access to the data is only
> through ContentStore interface.
>
> ---
> Alex
>
>
>
> On Nov 17, 2013, at 9:55 PM, Wassim Drira <drirawassim+ndnsim at gmail.com>
> wrote:
>
> I resolved the issue by changing protected to public in :
>
> template<class Policy>
> class ContentStoreImpl : public ContentStore,
>                          protected ndnSIM::trie_with_policy< Name,
>
>
> Regards,
>
>
> On Mon, Nov 18, 2013 at 5:48 AM, Wassim Drira <
> drirawassim+ndnsim at gmail.com> wrote:
>
>> Hi Alex,
>>
>> Thanks Alex!
>> This resolves partially the issue, when I use cs->Print(std::cout); the
>> entries are correctly printed but when I use for (Policy::iterator it =
>> cs->GetPolicy().begin (); ... it gives me a build error.
>>
>> *%%%%%%%% ----- Build Error ----- %%%%%%%*
>> ./ns3/ndnSIM/model/cs/../../utils/trie/trie-with-policy.h: In member
>> function ‘virtual void ns3::ndn::ANode::OnMsg(ns3::Ptr<const
>> ns3::ndn::Data>)’:
>> ./ns3/ndnSIM/model/cs/../../utils/trie/trie-with-policy.h:288:3: error:
>> ‘ns3::ndn::ndnSIM::trie_with_policy<FullKey, PayloadTraits,
>> PolicyTraits>::policy_container&
>> ns3::ndn::ndnSIM::trie_with_policy<FullKey, PayloadTraits,
>> PolicyTraits>::getPolicy() [with FullKey = ns3::ndn::Name, PayloadTraits =
>> ns3::ndn::ndnSIM::smart_pointer_payload_traits<ns3::ndn::cs::EntryImpl<ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits>
>> >, ns3::ndn::cs::Entry>, PolicyTraits =
>> ns3::ndn::ndnSIM::fifo_policy_traits,
>> ns3::ndn::ndnSIM::trie_with_policy<FullKey, PayloadTraits,
>> PolicyTraits>::policy_container =
>> ns3::ndn::ndnSIM::fifo_policy_traits::policy<ns3::ndn::ndnSIM::trie_with_policy<ns3::ndn::Name,
>> ns3::ndn::ndnSIM::smart_pointer_payload_traits<ns3::ndn::cs::EntryImpl<ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits>
>> >, ns3::ndn::cs::Entry>, ns3::ndn::ndnSIM::fifo_policy_traits>,
>> ns3::ndn::ndnSIM::trie<ns3::ndn::Name,
>> ns3::ndn::ndnSIM::smart_pointer_payload_traits<ns3::ndn::cs::EntryImpl<ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits>
>> >, ns3::ndn::cs::Entry>,
>> ns3::ndn::ndnSIM::fifo_policy_traits::policy_hook_type>,
>> boost::intrusive::member_hook<ns3::ndn::ndnSIM::trie<ns3::ndn::Name,
>> ns3::ndn::ndnSIM::smart_pointer_payload_traits<ns3::ndn::cs::EntryImpl<ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits>
>> >, ns3::ndn::cs::Entry>,
>> ns3::ndn::ndnSIM::fifo_policy_traits::policy_hook_type>,
>> ns3::ndn::ndnSIM::fifo_policy_traits::policy_hook_type,
>> &ns3::ndn::ndnSIM::trie<ns3::ndn::Name,
>> ns3::ndn::ndnSIM::smart_pointer_payload_traits<ns3::ndn::cs::EntryImpl<ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits>
>> >, ns3::ndn::cs::Entry>,
>> ns3::ndn::ndnSIM::fifo_policy_traits::policy_hook_type>::policy_hook_>
>> >::type]’ is inaccessible
>> ../src/ndnSIM/apps/ndn-anode-simple.cc:182:46: error: within this context
>> ../src/ndnSIM/apps/ndn-anode-simple.cc:182:46: error:
>> ‘ns3::ndn::ndnSIM::trie_with_policy<ns3::ndn::Name,
>> ns3::ndn::ndnSIM::smart_pointer_payload_traits<ns3::ndn::cs::EntryImpl<ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits>
>> >, ns3::ndn::cs::Entry>, ns3::ndn::ndnSIM::fifo_policy_traits>’ is not an
>> accessible base of
>> ‘ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits>’
>> ./ns3/ndnSIM/model/cs/../../utils/trie/trie-with-policy.h:288:3: error:
>> ‘ns3::ndn::ndnSIM::trie_with_policy<FullKey, PayloadTraits,
>> PolicyTraits>::policy_container&
>> ns3::ndn::ndnSIM::trie_with_policy<FullKey, PayloadTraits,
>> PolicyTraits>::getPolicy() [with FullKey = ns3::ndn::Name, PayloadTraits =
>> ns3::ndn::ndnSIM::smart_pointer_payload_traits<ns3::ndn::cs::EntryImpl<ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits>
>> >, ns3::ndn::cs::Entry>, PolicyTraits =
>> ns3::ndn::ndnSIM::fifo_policy_traits,
>> ns3::ndn::ndnSIM::trie_with_policy<FullKey, PayloadTraits,
>> PolicyTraits>::policy_container =
>> ns3::ndn::ndnSIM::fifo_policy_traits::policy<ns3::ndn::ndnSIM::trie_with_policy<ns3::ndn::Name,
>> ns3::ndn::ndnSIM::smart_pointer_payload_traits<ns3::ndn::cs::EntryImpl<ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits>
>> >, ns3::ndn::cs::Entry>, ns3::ndn::ndnSIM::fifo_policy_traits>,
>> ns3::ndn::ndnSIM::trie<ns3::ndn::Name,
>> ns3::ndn::ndnSIM::smart_pointer_payload_traits<ns3::ndn::cs::EntryImpl<ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits>
>> >, ns3::ndn::cs::Entry>,
>> ns3::ndn::ndnSIM::fifo_policy_traits::policy_hook_type>,
>> boost::intrusive::member_hook<ns3::ndn::ndnSIM::trie<ns3::ndn::Name,
>> ns3::ndn::ndnSIM::smart_pointer_payload_traits<ns3::ndn::cs::EntryImpl<ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits>
>> >, ns3::ndn::cs::Entry>,
>> ns3::ndn::ndnSIM::fifo_policy_traits::policy_hook_type>,
>> ns3::ndn::ndnSIM::fifo_policy_traits::policy_hook_type,
>> &ns3::ndn::ndnSIM::trie<ns3::ndn::Name,
>> ns3::ndn::ndnSIM::smart_pointer_payload_traits<ns3::ndn::cs::EntryImpl<ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits>
>> >, ns3::ndn::cs::Entry>,
>> ns3::ndn::ndnSIM::fifo_policy_traits::policy_hook_type>::policy_hook_>
>> >::type]’ is inaccessible
>> ../src/ndnSIM/apps/ndn-anode-simple.cc:183:30: error: within this context
>> ../src/ndnSIM/apps/ndn-anode-simple.cc:183:30: error:
>> ‘ns3::ndn::ndnSIM::trie_with_policy<ns3::ndn::Name,
>> ns3::ndn::ndnSIM::smart_pointer_payload_traits<ns3::ndn::cs::EntryImpl<ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits>
>> >, ns3::ndn::cs::Entry>, ns3::ndn::ndnSIM::fifo_policy_traits>’ is not an
>> accessible base of
>> ‘ns3::ndn::cs::ContentStoreImpl<ns3::ndn::ndnSIM::fifo_policy_traits>’
>>
>> Regards,
>>
>>
>> On Sun, Nov 17, 2013 at 10:58 PM, Alex Afanasyev <
>> alexander.afanasyev at ucla.edu> wrote:
>>
>>> Hi Wassim,
>>>
>>> Cache is organized as a hash-based container, so it is expected that
>>> entries are not in any particular order.  To get access to policy-based
>>> ordering (FIFO in your case), you would need a little bit more complex
>>> code.  Here is a basic example:
>>>
>>> #include "ns3/ndnSIM/model/cs/content-store-impl.h"
>>> #include "ns3/ndnSIM/utils/trie/fifo-policy.h"
>>> #include "ns3/ndnSIM/utils/trie/random-policy.h"
>>>
>>> ...
>>>
>>>
>>>   // typedef ns3::ndn::ndnSIM::random_policy_traits policy;
>>>   typedef ns3::ndn::ndnSIM::fifo_policy_traits policy;
>>>
>>>   typedef ns3::ndn::cs::ContentStoreImpl<policy> CS;
>>>   typedef CS::super::policy_container Policy;
>>>
>>>   Ptr<CS> cs = DynamicCast<CS>
>>> (NodeList::GetNode(1)->GetObject<ndn::ContentStore> ());
>>>   if (!cs)
>>>     {
>>>       std::cerr << "Please select the right CS policy" << std::endl;
>>>       exit (1);
>>>     }
>>>
>>>   for (Policy::iterator it = cs->GetPolicy().begin ();
>>>        it != cs->GetPolicy().end();
>>>        it++)
>>>     {
>>>       std::cout << it->payload()->GetName() << std::endl;
>>>     }
>>>
>>> ---
>>> Alex
>>>
>>> On Nov 17, 2013, at 3:37 AM, Wassim Drira <drirawassim+ndnsim at gmail.com>
>>> wrote:
>>>
>>> Hi all,
>>>
>>> I am using ContentStore to store some msgs in reception order. I am
>>> using the fifo variant. The issue is when printing the content of the
>>> cache, it looks not ordered as you can see below (sequence number in the
>>> end of the name).
>>>
>>> Do you have an idea about the cause and may be a solution to this
>>> issue...
>>>
>>> *%%%%%%%% ----- Code ----- %%%%%%%*
>>> ObjectFactory m_contentStoreFactory;
>>> m_contentStoreFactory.SetTypeId ("ns3::ndn::cs::Stats::Fifo");
>>> m_contentStoreFactory.Set("MaxSize", StringValue ("50"));
>>> m_pubCS = m_contentStoreFactory.Create<ContentStore> ();
>>> ......
>>> Ptr<ns3::ndn::cs::Entry> entry = m_pubCS->Begin();
>>> while(entry){
>>>         NS_LOG_DEBUG("Cache Entry:"<< entry->GetData()->GetName());
>>>         entry = m_pubCS->Next(entry);
>>> }
>>> *%%%%%%%% ----- OutPut ----- %%%%%%%*
>>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%02
>>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%01
>>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%04
>>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%03
>>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%06
>>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%05
>>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%08
>>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%07
>>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%0A
>>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%09
>>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%0C
>>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%0B
>>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%0E
>>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%0D
>>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%10
>>> 18.0186s 1 ndn.ANode:OnMsg(): [DEBUG] Cache Entry:/news/2/%00%0F
>>>
>>>
>>> Best regards
>>>  _______________________________________________
>>> ndnSIM mailing list
>>> ndnSIM at lists.cs.ucla.edu
>>> http://www.lists.cs.ucla.edu/mailman/listinfo/ndnsim
>>>
>>>
>>>
>>
> _______________________________________________
> ndnSIM mailing list
> ndnSIM at lists.cs.ucla.edu
> http://www.lists.cs.ucla.edu/mailman/listinfo/ndnsim
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.lists.cs.ucla.edu/pipermail/ndnsim/attachments/20131118/d03ef678/attachment.html>


More information about the ndnSIM mailing list