NS-3 based Named Data Networking (NDN) simulator
ndnSIM 2.5: NDN, CCN, CCNx, content centric networks
API Documentation
ndn::DelegationList Class Reference

represents a list of Delegations More...

#include <delegation-list.hpp>

Classes

class  Error
 

Public Types

enum  InsertConflictResolution { INS_REPLACE, INS_APPEND, INS_SKIP }
 what to do when inserting a duplicate name More...
 
using const_iterator = std::vector< Delegation >::const_iterator
 

Public Member Functions

 DelegationList ()
 construct an empty DelegationList More...
 
 DelegationList (std::initializer_list< Delegation > dels)
 construct a sorted DelegationList with specified delegations More...
 
 DelegationList (const Block &block, bool wantSort=true)
 decode a DelegationList More...
 
template<encoding::Tag TAG>
size_t wireEncode (EncodingImpl< TAG > &encoder, uint32_t type=tlv::ForwardingHint) const
 encode into wire format More...
 
void wireDecode (const Block &block, bool wantSort=true)
 decode a DelegationList More...
 
bool isSorted () const noexcept
 
const_iterator begin () const noexcept
 
const_iterator end () const noexcept
 
NDN_CXX_NODISCARD bool empty () const noexcept
 
size_t size () const noexcept
 
const Delegationoperator[] (size_t i) const
 get the i-th delegation More...
 
const Delegationat (size_t i) const
 get the i-th delegation More...
 
void sort ()
 sort the delegation list More...
 
bool insert (uint64_t preference, const Name &name, InsertConflictResolution onConflict=INS_REPLACE)
 insert Delegation More...
 
bool insert (const Delegation &del, InsertConflictResolution onConflict=INS_REPLACE)
 insert Delegation More...
 
size_t erase (uint64_t preference, const Name &name)
 delete Delegation(s) with specified preference and name More...
 
size_t erase (const Delegation &del)
 delete Delegation(s) with matching preference and name More...
 
size_t erase (const Name &name)
 erase Delegation(s) with specified name More...
 

Friends

bool operator== (const DelegationList &lhs, const DelegationList &rhs)
 Compare whether two DelegationLists are equal. More...
 
bool operator!= (const DelegationList &lhs, const DelegationList &rhs)
 

Detailed Description

represents a list of Delegations

See also
https://named-data.net/doc/ndn-tlv/link.html

Delegations are stored in an std::vector, under the assumption that there is usually only a small number of Delegations, so that copying is acceptable when they are modified.

Definition at line 37 of file delegation-list.hpp.

Member Typedef Documentation

◆ const_iterator

Definition at line 87 of file delegation-list.hpp.

Member Enumeration Documentation

◆ InsertConflictResolution

what to do when inserting a duplicate name

Enumerator
INS_REPLACE 

existing delegation(s) with the same name are replaced with the new delegation

INS_APPEND 

multiple delegations with the same name are kept in the DelegationList

Note
This is NOT RECOMMENDED by Link specification.
INS_SKIP 

new delegation is not inserted if an existing delegation has the same name

Definition at line 150 of file delegation-list.hpp.

Constructor & Destructor Documentation

◆ DelegationList() [1/3]

ndn::DelegationList::DelegationList ( )

construct an empty DelegationList

Definition at line 31 of file delegation-list.cpp.

◆ DelegationList() [2/3]

ndn::DelegationList::DelegationList ( std::initializer_list< Delegation dels)

construct a sorted DelegationList with specified delegations

This is equivalent to inserting each delegation into an empty DelegationList with INS_REPLACE conflict resolution.

Definition at line 36 of file delegation-list.cpp.

References INS_REPLACE, and insert().

◆ DelegationList() [3/3]

ndn::DelegationList::DelegationList ( const Block block,
bool  wantSort = true 
)
explicit

decode a DelegationList

See also
wireDecode

Definition at line 44 of file delegation-list.cpp.

References wireDecode().

Member Function Documentation

◆ wireEncode()

template<encoding::Tag TAG>
size_t ndn::DelegationList::wireEncode ( EncodingImpl< TAG > &  encoder,
uint32_t  type = tlv::ForwardingHint 
) const

encode into wire format

Parameters
encodereither an EncodingBuffer or an EncodingEstimator
typeTLV-TYPE number, either Content (for Link) or ForwardingHint
Exceptions
std::invalid_argumenttype is invalid
Errorthere is no Delegation

Definition at line 63 of file delegation-list.cpp.

References ndn::tlv::LinkDelegation, ndn::tlv::LinkPreference, NDN_THROW, ndn::encoding::prependNonNegativeIntegerBlock(), size(), and ndn::to_string().

Referenced by ndn::Interest::wireEncode().

◆ wireDecode()

void ndn::DelegationList::wireDecode ( const Block block,
bool  wantSort = true 
)

decode a DelegationList

Parameters
blockeither a Content block (from Link) or a ForwardingHint block
wantSortif true, delegations are sorted
Exceptions
Errorthe block cannot be parsed as a list of Delegations

Definition at line 105 of file delegation-list.cpp.

References ndn::Block::elements(), ndn::tlv::LinkDelegation, ndn::tlv::LinkPreference, ndn::tlv::Name, NDN_THROW, NDN_THROW_NESTED, ndn::Block::parse(), ndn::encoding::readNonNegativeInteger(), size(), ndn::to_string(), and ndn::Block::type().

Referenced by DelegationList(), ndn::Link::wireDecode(), and ndn::Interest::wireDecode().

◆ isSorted()

bool ndn::DelegationList::isSorted ( ) const
inlinenoexcept

Definition at line 82 of file delegation-list.hpp.

◆ begin()

const_iterator ndn::DelegationList::begin ( ) const
inlinenoexcept

Definition at line 90 of file delegation-list.hpp.

Referenced by ndn::operator<<().

◆ end()

const_iterator ndn::DelegationList::end ( ) const
inlinenoexcept

Definition at line 96 of file delegation-list.hpp.

Referenced by ndn::operator<<().

◆ empty()

NDN_CXX_NODISCARD bool ndn::DelegationList::empty ( ) const
inlinenoexcept

Definition at line 102 of file delegation-list.hpp.

Referenced by nfd::fw::Strategy::lookupFib().

◆ size()

size_t ndn::DelegationList::size ( ) const
inlinenoexcept

Definition at line 108 of file delegation-list.hpp.

Referenced by operator[](), wireDecode(), and wireEncode().

◆ operator[]()

const Delegation& ndn::DelegationList::operator[] ( size_t  i) const
inline

get the i-th delegation

Precondition
i < size()

Definition at line 117 of file delegation-list.hpp.

References size().

◆ at()

const Delegation& ndn::DelegationList::at ( size_t  i) const
inline

get the i-th delegation

Exceptions
std::out_of_rangei >= size()

Definition at line 127 of file delegation-list.hpp.

◆ sort()

void ndn::DelegationList::sort ( )

sort the delegation list

Postcondition
isSorted() == true
Delegations are sorted in increasing preference order.

A DelegationList can be constructed as sorted or unsorted. In most cases, it is recommended to use a sorted DelegationList. An unsorted DelegationList is useful for extracting the i-th delegation from a received ForwardingHint or Link object.

This method turns an unsorted DelegationList into a sorted DelegationList. If access to unsorted DelegationList is not needed, it is more efficient to sort the DelegationList in wireDecode.

Definition at line 154 of file delegation-list.cpp.

◆ insert() [1/2]

bool ndn::DelegationList::insert ( uint64_t  preference,
const Name name,
InsertConflictResolution  onConflict = INS_REPLACE 
)

insert Delegation

Returns
whether inserted

Definition at line 170 of file delegation-list.cpp.

References INS_APPEND, INS_REPLACE, INS_SKIP, NDN_THROW, and nonstd::optional_lite::nullopt.

Referenced by ndn::Link::addDelegation(), DelegationList(), and insert().

◆ insert() [2/2]

bool ndn::DelegationList::insert ( const Delegation del,
InsertConflictResolution  onConflict = INS_REPLACE 
)
inline

insert Delegation

Returns
whether inserted

Definition at line 176 of file delegation-list.hpp.

References insert(), ndn::Delegation::name, and ndn::Delegation::preference.

◆ erase() [1/3]

size_t ndn::DelegationList::erase ( uint64_t  preference,
const Name name 
)
inline

delete Delegation(s) with specified preference and name

Returns
count of erased Delegation(s)

Definition at line 185 of file delegation-list.hpp.

Referenced by ndn::Link::removeDelegation().

◆ erase() [2/3]

size_t ndn::DelegationList::erase ( const Delegation del)
inline

delete Delegation(s) with matching preference and name

Returns
count of erased Delegation(s)

Definition at line 194 of file delegation-list.hpp.

References ndn::Delegation::name, and ndn::Delegation::preference.

◆ erase() [3/3]

size_t ndn::DelegationList::erase ( const Name name)
inline

erase Delegation(s) with specified name

Returns
count of erased Delegation(s)

Definition at line 203 of file delegation-list.hpp.

References nonstd::optional_lite::nullopt.

Friends And Related Function Documentation

◆ operator==

bool operator== ( const DelegationList lhs,
const DelegationList rhs 
)
friend

Compare whether two DelegationLists are equal.

Note
Order matters! If two DelegationLists contain the same Delegations but at least one is unsorted, they may compare unequal if the Delegations appear in different order.

Definition at line 227 of file delegation-list.hpp.

◆ operator!=

bool operator!= ( const DelegationList lhs,
const DelegationList rhs 
)
friend

Definition at line 233 of file delegation-list.hpp.


The documentation for this class was generated from the following files: