NS-3 based Named Data Networking (NDN) simulator
ndnSIM 2.0: NDN, CCN, CCNx, content centric networks
API Documentation
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
ndn-content-store.hpp
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
20 #ifndef NDN_CONTENT_STORE_H
21 #define NDN_CONTENT_STORE_H
22 
23 #include "ns3/ndnSIM/model/ndn-common.hpp"
24 
25 #include "ns3/object.h"
26 #include "ns3/ptr.h"
27 #include "ns3/traced-callback.h"
28 
29 #include <tuple>
30 
31 namespace ns3 {
32 
33 class Packet;
34 
35 namespace ndn {
36 
37 class ContentStore;
38 
48 namespace cs {
49 
54 class Entry : public SimpleRefCount<Entry> {
55 public:
65  Entry(Ptr<ContentStore> cs, shared_ptr<const Data> data);
66 
71  const Name&
72  GetName() const;
73 
78  shared_ptr<const Data>
79  GetData() const;
80 
84  Ptr<ContentStore>
86 
87 private:
88  Ptr<ContentStore> m_cs;
89  shared_ptr<const Data> m_data;
90 };
91 
92 } // namespace cs
93 
100 class ContentStore : public Object {
101 public:
107  static TypeId
108  GetTypeId();
109 
113  virtual ~ContentStore();
114 
124  virtual shared_ptr<Data>
125  Lookup(shared_ptr<const Interest> interest) = 0;
126 
135  virtual bool
136  Add(shared_ptr<const Data> data) = 0;
137 
138  // /*
139  // * \brief Add a new content to the content store.
140  // *
141  // * \param header Interest header for which an entry should be removed
142  // * @returns true if an existing entry was removed, false otherwise
143  // */
144  // virtual bool
145  // Remove (shared_ptr<Interest> header) = 0;
146 
150  virtual void
151  Print(std::ostream& os) const = 0;
152 
156  virtual uint32_t
157  GetSize() const = 0;
158 
162  virtual Ptr<cs::Entry>
163  Begin() = 0;
164 
168  virtual Ptr<cs::Entry>
169  End() = 0;
170 
174  virtual Ptr<cs::Entry> Next(Ptr<cs::Entry>) = 0;
175 
179 
183  static inline Ptr<ContentStore>
184  GetContentStore(Ptr<Object> node);
185 
186 protected:
187  TracedCallback<shared_ptr<const Interest>,
188  shared_ptr<const Data>> m_cacheHitsTrace;
189 
190  TracedCallback<shared_ptr<const Interest>> m_cacheMissesTrace;
191 };
192 
193 inline std::ostream&
194 operator<<(std::ostream& os, const ContentStore& cs)
195 {
196  cs.Print(os);
197  return os;
198 }
199 
200 inline Ptr<ContentStore>
202 {
203  return node->GetObject<ContentStore>();
204 }
205 
206 } // namespace ndn
207 } // namespace ns3
208 
209 #include <boost/functional/hash.hpp>
210 namespace boost {
211 inline std::size_t
212 hash_value(const ::ndn::name::Component component)
213 {
214  return boost::hash_range(component.wireEncode().wire(),
215  component.wireEncode().wire() + component.wireEncode().size());
216 }
217 }
218 
219 #endif // NDN_CONTENT_STORE_H
virtual shared_ptr< Data > Lookup(shared_ptr< const Interest > interest)=0
Find corresponding CS entry for the given interest.
virtual Ptr< cs::Entry > End()=0
Return item next after last (no order guaranteed)
std::size_t hash_value(const ::ndn::name::Component component)
std::ostream & operator<<(std::ostream &os, const ContentStore &cs)
Entry(Ptr< ContentStore > cs, shared_ptr< const Data > data)
Construct content store entry.
NDN content store entry.
TracedCallback< shared_ptr< const Interest > > m_cacheMissesTrace
trace of cache misses
virtual bool Add(shared_ptr< const Data > data)=0
Add a new content to the content store.
static Ptr< ContentStore > GetContentStore(Ptr< Object > node)
Static call to cheat python bindings.
virtual void Print(std::ostream &os) const =0
Print out content store entries.
virtual Ptr< cs::Entry > Begin()=0
Return first element of content store (no order guaranteed)
TracedCallback< shared_ptr< const Interest >, shared_ptr< const Data > > m_cacheHitsTrace
trace of cache hits
virtual ~ContentStore()
Virtual destructor.
shared_ptr< const Data > GetData() const
Get Data of the stored entry.
ndn cs ContentStore
Copyright (c) 2011-2015 Regents of the University of California.
Ptr< ContentStore > GetContentStore()
Get pointer to access store, to which this entry is added.
const Name & GetName() const
Get prefix of the stored entry.
virtual uint32_t GetSize() const =0
Get number of entries in content store.
static TypeId GetTypeId()
Interface ID.
virtual Ptr< cs::Entry > Next(Ptr< cs::Entry >)=0
Advance the iterator.
Base class for NDN content store.