Represents a name component. More...
#include <ndn-cxx/name-component.hpp>
Classes | |
class | Error |
Public Types | |
using | const_iterator = Buffer::const_iterator |
using | element_const_iterator = element_container::const_iterator |
using | element_container = std::vector< Block > |
using | element_iterator = element_container::iterator |
using | value_type = Buffer::value_type |
Public Member Functions | |
Component (const Block &block) | |
Construct a NameComponent from block . More... | |
Component (ConstBufferPtr buffer) | |
Construct a GenericNameComponent, using TLV-VALUE from buffer . More... | |
template<class Iterator > | |
Component (Iterator first, Iterator last) | |
Construct a GenericNameComponent, copying the TLV-VALUE from a range. More... | |
Component (span< const uint8_t > value) | |
Construct a GenericNameComponent, copying the TLV-VALUE from value . More... | |
Component (std::string_view str) | |
Construct a GenericNameComponent, copying the TLV-VALUE from a string. More... | |
Component (uint32_t type, ConstBufferPtr buffer) | |
Construct a NameComponent of TLV-TYPE type , using TLV-VALUE from buffer . More... | |
template<class Iterator > | |
Component (uint32_t type, Iterator first, Iterator last) | |
Construct a NameComponent of TLV-TYPE type , copying the TLV-VALUE from a range. More... | |
Component (uint32_t type, span< const uint8_t > value) | |
Construct a NameComponent of TLV-TYPE type , copying the TLV-VALUE from value . More... | |
Component (uint32_t type=tlv::GenericNameComponent) | |
Construct a NameComponent of TLV-TYPE type and with empty TLV-VALUE. More... | |
const_iterator | begin () const |
Returns an iterator to the beginning of the encoded wire. More... | |
Block | blockFromValue () const |
Return a new Block constructed from the TLV-VALUE of this Block. More... | |
int | compare (const Component &other) const |
Compare this component to other using NDN canonical ordering. More... | |
const uint8_t * | data () const |
Returns a raw pointer to the beginning of the encoded wire, i.e., the whole TLV. More... | |
const element_container & | elements () const noexcept |
Get container of sub-elements. More... | |
element_const_iterator | elements_begin () const noexcept |
Equivalent to elements().begin() . More... | |
element_const_iterator | elements_end () const noexcept |
Equivalent to elements().end() . More... | |
size_t | elements_size () const noexcept |
Equivalent to elements().size() . More... | |
bool | empty () const noexcept |
void | encode () |
Encode sub-elements into TLV-VALUE. More... | |
const_iterator | end () const |
Returns an iterator past-the-end of the encoded wire. More... | |
element_iterator | erase (element_const_iterator first, element_const_iterator last) |
Erase a range of sub-elements. More... | |
element_iterator | erase (element_const_iterator position) |
Erase a sub-element. More... | |
element_const_iterator | find (uint32_t type) const |
Find the first sub-element of the specified TLV-TYPE. More... | |
const Block & | get (uint32_t type) const |
Return the first sub-element of the specified TLV-TYPE. More... | |
ConstBufferPtr | getBuffer () const |
Returns the underlying buffer. More... | |
Component | getSuccessor () const |
Get the successor of this name component. More... | |
bool | hasValue () const noexcept |
Check if the Block has a non-empty TLV-VALUE. More... | |
bool | hasWire () const noexcept |
Check if the Block contains a fully encoded wire representation. More... | |
element_iterator | insert (element_const_iterator pos, const Block &element) |
Insert a sub-element. More... | |
bool | isByteOffset () const noexcept |
Check if the component is a byte offset per NDN naming conventions. More... | |
bool | isGeneric () const noexcept |
Check if the component is a GenericNameComponent. More... | |
bool | isImplicitSha256Digest () const noexcept |
Check if the component is an ImplicitSha256DigestComponent. More... | |
bool | isKeyword () const noexcept |
Check if the component is a KeywordNameComponent. More... | |
bool | isNumber () const noexcept |
Check if the component is a NonNegativeInteger. More... | |
bool | isNumberWithMarker (uint8_t marker) const noexcept |
Check if the component is a NameComponentWithMarker per NDN naming conventions rev1. More... | |
bool | isParametersSha256Digest () const noexcept |
Check if the component is a ParametersSha256DigestComponent. More... | |
bool | isSegment () const noexcept |
Check if the component is a segment number per NDN naming conventions. More... | |
bool | isSequenceNumber () const noexcept |
Check if the component is a sequence number per NDN naming conventions. More... | |
bool | isTimestamp () const noexcept |
Check if the component is a timestamp per NDN naming conventions. More... | |
bool | isValid () const noexcept |
Check if the Block is valid. More... | |
bool | isVersion () const noexcept |
Check if the component is a version per NDN naming conventions. More... | |
operator boost::asio::const_buffer () const | |
Implicit conversion to boost::asio::const_buffer . More... | |
void | parse () const |
Parse TLV-VALUE into sub-elements. More... | |
void | push_back (Block &&element) |
Append a sub-element. More... | |
void | push_back (const Block &element) |
Append a sub-element. More... | |
void | remove (uint32_t type) |
Remove all sub-elements of the specified TLV-TYPE. More... | |
void | reset () noexcept |
Reset the Block to a default-constructed state. More... | |
void | resetWire () noexcept |
Reset wire buffer but keep TLV-TYPE and sub-elements (if any). More... | |
size_t | size () const |
Returns the size of the encoded wire, i.e., of the whole TLV. More... | |
uint64_t | toByteOffset () const |
Interpret as byte offset component using NDN naming conventions. More... | |
uint64_t | toNumber () const |
Interpret this name component as a NonNegativeInteger. More... | |
uint64_t | toNumberWithMarker (uint8_t marker) const |
Interpret this name component as a NameComponentWithMarker. More... | |
uint64_t | toSegment () const |
Interpret as segment number component using NDN naming conventions. More... | |
uint64_t | toSequenceNumber () const |
Interpret as sequence number component using NDN naming conventions. More... | |
time::system_clock::time_point | toTimestamp () const |
Interpret as timestamp component using NDN naming conventions. More... | |
void | toUri (std::ostream &os, UriFormat format=UriFormat::DEFAULT) const |
Write *this to the output stream, escaping characters according to the NDN URI format. More... | |
std::string | toUri (UriFormat format=UriFormat::DEFAULT) const |
Convert *this to a string by escaping characters according to the NDN URI format. More... | |
uint64_t | toVersion () const |
Interpret as version component using NDN naming conventions. More... | |
uint32_t | type () const noexcept |
Return the TLV-TYPE of the Block. More... | |
const uint8_t * | value () const noexcept |
Return a raw pointer to the beginning of TLV-VALUE. More... | |
const_iterator | value_begin () const noexcept |
Get begin iterator of TLV-VALUE. More... | |
span< const uint8_t > | value_bytes () const noexcept |
Return a read-only view of TLV-VALUE as a contiguous range of bytes. More... | |
const_iterator | value_end () const noexcept |
Get end iterator of TLV-VALUE. More... | |
size_t | value_size () const noexcept |
Return the size of TLV-VALUE, i.e., the TLV-LENGTH. More... | |
void | wireDecode (const Block &wire) |
Decode from TLV wire format. More... | |
const Block & | wireEncode () const |
Encode to TLV wire format. More... | |
template<encoding::Tag TAG> | |
size_t | wireEncode (EncodingImpl< TAG > &encoder) const |
Prepend wire encoding to encoder . More... | |
Static Public Member Functions | |
static std::tuple< bool, Block > | fromBuffer (ConstBufferPtr buffer, size_t offset=0) |
Try to parse Block from a wire buffer. More... | |
static std::tuple< bool, Block > | fromBuffer (span< const uint8_t > buffer) |
Try to parse Block from a byte range. More... | |
static Component | fromByteOffset (uint64_t offset) |
Create a byte offset component using NDN naming conventions. More... | |
static Component | fromEscapedString (std::string_view input) |
static Component | fromNumber (uint64_t number, uint32_t type=tlv::GenericNameComponent) |
Create a component encoded as NonNegativeInteger. More... | |
static Component | fromNumberWithMarker (uint8_t marker, uint64_t number) |
Create a component encoded as NameComponentWithMarker. More... | |
static Component | fromSegment (uint64_t segmentNo) |
Create a segment number component using NDN naming conventions. More... | |
static Component | fromSequenceNumber (uint64_t seqNo) |
Create a sequence number component using NDN naming conventions. More... | |
static Block | fromStream (std::istream &is) |
Parse Block from an input stream. More... | |
static Component | fromTimestamp (const time::system_clock::time_point &timePoint) |
Create a timestamp component using NDN naming conventions. More... | |
static Component | fromUri (std::string_view input) |
Construct a NameComponent from its string representation in NDN URI format. More... | |
static Component | fromVersion (uint64_t version) |
Create a version component using NDN naming conventions. More... | |
Protected Attributes | |
Buffer::const_iterator | m_begin |
shared_ptr< const Buffer > | m_buffer |
Underlying buffer storing TLV-VALUE and possibly TLV-TYPE and TLV-LENGTH fields. More... | |
element_container | m_elements |
Contains the sub-elements. More... | |
Buffer::const_iterator | m_end |
size_t | m_size = 0 |
Total size including Type-Length-Value. More... | |
uint32_t | m_type = tlv::Invalid |
TLV-TYPE. More... | |
Buffer::const_iterator | m_valueBegin |
Buffer::const_iterator | m_valueEnd |
Friends | |
bool | operator< (const Component &lhs, const Component &rhs) |
std::ostream & | operator<< (std::ostream &os, const Component &component) |
Represents a name component.
The Component class provides a read-only view of a Block interpreted as a name component. Although it inherits mutation methods from the Block base class, they must not be used, because the enclosing Name would not be updated correctly.
A name component is considered invalid if its TLV-TYPE is outside the range [1, 65535]
, or, if it is an ImplicitSha256DigestComponent
or a ParametersSha256DigestComponent
, its TLV-LENGTH is not 32.
Definition at line 112 of file name-component.hpp.
|
inherited |
|
inherited |
|
inherited |
|
inherited |
|
inherited |
|
explicit |
Construct a NameComponent of TLV-TYPE type
and with empty TLV-VALUE.
Error | the NameComponent is invalid. |
Definition at line 85 of file name-component.cpp.
|
explicit |
Construct a NameComponent from block
.
Error | the NameComponent is invalid. |
Definition at line 91 of file name-component.cpp.
ndn::name::Component::Component | ( | uint32_t | type, |
ConstBufferPtr | buffer | ||
) |
Construct a NameComponent of TLV-TYPE type
, using TLV-VALUE from buffer
.
This constructor does not copy the underlying buffer, but retains a pointer to it. Therefore, the caller must not change the underlying buffer.
Error | the NameComponent is invalid. |
Definition at line 97 of file name-component.cpp.
|
inlineexplicit |
Construct a GenericNameComponent, using TLV-VALUE from buffer
.
This constructor does not copy the underlying buffer, but retains a pointer to it. Therefore, the caller must not change the underlying buffer.
Error | the NameComponent is invalid. |
Definition at line 155 of file name-component.hpp.
ndn::name::Component::Component | ( | uint32_t | type, |
span< const uint8_t > | value | ||
) |
Construct a NameComponent of TLV-TYPE type
, copying the TLV-VALUE from value
.
Definition at line 103 of file name-component.cpp.
|
inlineexplicit |
Construct a GenericNameComponent, copying the TLV-VALUE from value
.
Definition at line 169 of file name-component.hpp.
|
inline |
Construct a NameComponent of TLV-TYPE type
, copying the TLV-VALUE from a range.
Iterator | an InputIterator dereferencing to a one-octet value type. More efficient implementation is available when it is a RandomAccessIterator . |
type | the TLV-TYPE. |
first | beginning of the range. |
last | past-end of the range. |
Definition at line 183 of file name-component.hpp.
|
inline |
Construct a GenericNameComponent, copying the TLV-VALUE from a range.
Definition at line 192 of file name-component.hpp.
|
explicit |
Construct a GenericNameComponent, copying the TLV-VALUE from a string.
Bytes from the string are copied as is, and not interpreted as URI component.
Definition at line 109 of file name-component.cpp.
|
inherited |
|
inherited |
Return a new Block constructed from the TLV-VALUE of this Block.
value_size() > 0
int ndn::name::Component::compare | ( | const Component & | other | ) | const |
Compare this component to other
using NDN canonical ordering.
other | The name component to compare with. |
negative | This component comes before other in canonical ordering |
zero | This component equals other |
positive | This component comes after other in canonical ordering |
Definition at line 429 of file name-component.cpp.
|
inherited |
|
inlinenoexceptinherited |
|
inlinenoexceptinherited |
Equivalent to elements().begin()
.
|
inlinenoexceptinherited |
Equivalent to elements().end()
.
|
inlinenoexceptinherited |
Equivalent to elements().size()
.
|
inlinenoexcept |
Definition at line 472 of file name-component.hpp.
|
inherited |
Encode sub-elements into TLV-VALUE.
|
inherited |
|
inherited |
|
inherited |
|
inherited |
Find the first sub-element of the specified TLV-TYPE.
|
staticinherited |
|
staticinherited |
Try to parse Block from a byte range.
buffer | sequence of bytes containing a TLV element; the element must be found at the beginning of the buffer but does not need to span the entire buffer |
|
static |
Create a byte offset component using NDN naming conventions.
Definition at line 380 of file name-component.cpp.
|
inlinestatic |
Definition at line 235 of file name-component.hpp.
|
static |
Create a component encoded as NonNegativeInteger.
number | The non-negative number |
type | TLV-TYPE |
Definition at line 347 of file name-component.cpp.
|
static |
Create a component encoded as NameComponentWithMarker.
NameComponentWithMarker is defined as:
NameComponentWithMarker ::= NAME-COMPONENT-TYPE TLV-LENGTH Marker includedNonNegativeInteger Marker ::= BYTE includedNonNegativeInteger ::= BYTE{1,2,4,8}
marker | 1-byte marker octet |
number | The non-negative number |
Definition at line 353 of file name-component.cpp.
|
static |
Create a segment number component using NDN naming conventions.
Definition at line 372 of file name-component.cpp.
|
static |
Create a sequence number component using NDN naming conventions.
Definition at line 405 of file name-component.cpp.
|
staticinherited |
Parse Block from an input stream.
tlv::Error | TLV-LENGTH is zero or exceeds upper bound |
|
static |
Create a timestamp component using NDN naming conventions.
Definition at line 396 of file name-component.cpp.
|
static |
Construct a NameComponent from its string representation in NDN URI format.
Error | The input string does not represent a valid NameComponent in NDN URI format. |
Definition at line 139 of file name-component.cpp.
|
static |
Create a version component using NDN naming conventions.
Definition at line 388 of file name-component.cpp.
|
inherited |
Return the first sub-element of the specified TLV-TYPE.
tlv::Error | a sub-element of the specified type does not exist |
|
inlineinherited |
Component ndn::name::Component::getSuccessor | ( | ) | const |
Get the successor of this name component.
The successor of a name component is defined as follows:
C represents the set of name components, and X,Y ∈ C. Operator < is defined by canonical order on C. Y is the successor of X, if (a) X < Y, and (b) ∄ Z ∈ C s.t. X < Z < Y.
In plain words, successor of a name component is the next possible name component.
Examples:
sha256digest=0000000000000000000000000000000000000000000000000000000000000000
is sha256digest=0000000000000000000000000000000000000000000000000000000000000001
.sha256digest=ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
is params-sha256=0000000000000000000000000000000000000000000000000000000000000000
.params-sha256=0000000000000000000000000000000000000000000000000000000000000000
is params-sha256=0000000000000000000000000000000000000000000000000000000000000001
.params-sha256=ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff
is 3=...
....
is %00
.A
is B
.FF
is %00%00
. Definition at line 454 of file name-component.cpp.
|
inlinenoexceptinherited |
Check if the Block has a non-empty TLV-VALUE.
This property reflects whether the underlying buffer contains a TLV-VALUE. If this is false, TLV-VALUE has zero-length. If this is true, TLV-VALUE may be zero-length.
|
inlinenoexceptinherited |
|
inherited |
Insert a sub-element.
pos | position of the new sub-element |
element | new sub-element to insert |
|
noexcept |
Check if the component is a byte offset per NDN naming conventions.
Definition at line 231 of file name-component.cpp.
|
inlinenoexcept |
Check if the component is a GenericNameComponent.
Definition at line 439 of file name-component.hpp.
|
noexcept |
Check if the component is an ImplicitSha256DigestComponent.
Definition at line 415 of file name-component.cpp.
|
inlinenoexcept |
Check if the component is a KeywordNameComponent.
Definition at line 465 of file name-component.hpp.
|
noexcept |
Check if the component is a NonNegativeInteger.
Definition at line 210 of file name-component.cpp.
|
noexcept |
Check if the component is a NameComponentWithMarker per NDN naming conventions rev1.
Definition at line 217 of file name-component.cpp.
|
noexcept |
Check if the component is a ParametersSha256DigestComponent.
Definition at line 421 of file name-component.cpp.
|
noexcept |
Check if the component is a segment number per NDN naming conventions.
Definition at line 224 of file name-component.cpp.
|
noexcept |
Check if the component is a sequence number per NDN naming conventions.
Definition at line 252 of file name-component.cpp.
|
noexcept |
Check if the component is a timestamp per NDN naming conventions.
Definition at line 245 of file name-component.cpp.
|
inlinenoexceptinherited |
|
noexcept |
Check if the component is a version per NDN naming conventions.
Definition at line 238 of file name-component.cpp.
|
inherited |
|
inherited |
Parse TLV-VALUE into sub-elements.
tlv::Error | TLV-VALUE is not a sequence of TLV elements |
|
inherited |
|
inherited |
|
inherited |
Remove all sub-elements of the specified TLV-TYPE.
find(type) == elements_end()
|
noexceptinherited |
|
noexceptinherited |
Reset wire buffer but keep TLV-TYPE and sub-elements (if any).
hasWire() == false
hasValue() == false
|
inherited |
Returns the size of the encoded wire, i.e., of the whole TLV.
isValid() == true
uint64_t ndn::name::Component::toByteOffset | ( | ) | const |
Interpret as byte offset component using NDN naming conventions.
tlv::Error | not a ByteOffset component interpreted by the chosen convention(s). |
Definition at line 293 of file name-component.cpp.
uint64_t ndn::name::Component::toNumber | ( | ) | const |
Interpret this name component as a NonNegativeInteger.
Definition at line 261 of file name-component.cpp.
uint64_t ndn::name::Component::toNumberWithMarker | ( | uint8_t | marker | ) | const |
Interpret this name component as a NameComponentWithMarker.
marker | 1-byte octet of the marker |
Error | if name component does not have the specified marker. |
tlv::Error | if format does not follow NameComponentWithMarker specification. |
Definition at line 270 of file name-component.cpp.
uint64_t ndn::name::Component::toSegment | ( | ) | const |
Interpret as segment number component using NDN naming conventions.
tlv::Error | not a Segment component interpreted by the chosen convention(s). |
Definition at line 281 of file name-component.cpp.
uint64_t ndn::name::Component::toSequenceNumber | ( | ) | const |
Interpret as sequence number component using NDN naming conventions.
tlv::Error | not a SequenceNumber component interpreted by the chosen convention(s). |
Definition at line 333 of file name-component.cpp.
time::system_clock::time_point ndn::name::Component::toTimestamp | ( | ) | const |
Interpret as timestamp component using NDN naming conventions.
tlv::Error | not a Timestamp component interpreted by the chosen convention(s). |
Definition at line 317 of file name-component.cpp.
void ndn::name::Component::toUri | ( | std::ostream & | os, |
UriFormat | format = UriFormat::DEFAULT |
||
) | const |
Write *this
to the output stream, escaping characters according to the NDN URI format.
Definition at line 189 of file name-component.cpp.
std::string ndn::name::Component::toUri | ( | UriFormat | format = UriFormat::DEFAULT | ) | const |
Convert *this
to a string by escaping characters according to the NDN URI format.
Definition at line 200 of file name-component.cpp.
uint64_t ndn::name::Component::toVersion | ( | ) | const |
Interpret as version component using NDN naming conventions.
tlv::Error | not a Version component interpreted by the chosen convention(s). |
Definition at line 305 of file name-component.cpp.
|
inlinenoexceptinherited |
Return the TLV-TYPE of the Block.
|
noexceptinherited |
Return a raw pointer to the beginning of TLV-VALUE.
|
inlinenoexceptinherited |
Get begin iterator of TLV-VALUE.
hasValue() == true
|
inlinenoexceptinherited |
|
inlinenoexceptinherited |
Get end iterator of TLV-VALUE.
hasValue() == true
|
inlinenoexceptinherited |
void ndn::name::Component::wireDecode | ( | const Block & | wire | ) |
Decode from TLV wire format.
Definition at line 498 of file name-component.cpp.
const Block & ndn::name::Component::wireEncode | ( | ) | const |
Encode to TLV wire format.
Definition at line 482 of file name-component.cpp.
size_t ndn::name::Component::wireEncode | ( | EncodingImpl< TAG > & | encoder | ) | const |
Prepend wire encoding to encoder
.
Definition at line 468 of file name-component.cpp.
Definition at line 531 of file name-component.hpp.
|
friend |
Definition at line 537 of file name-component.hpp.
|
protectedinherited |
|
protectedinherited |
Underlying buffer storing TLV-VALUE and possibly TLV-TYPE and TLV-LENGTH fields.
If m_buffer is nullptr, this is an invalid or zero-length Block with TLV-TYPE given in m_type. Otherwise,
|
mutableprotectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |
|
protectedinherited |