31 #include "util/blob.hpp"
32 #include "encoding/wire-format.hpp"
33 #include "lite/name-lite.hpp"
51 : type_(ndn_NameComponentType_GENERIC),
53 value_((const uint8_t*)0, 0)
72 (
const std::vector<uint8_t>& value,
73 ndn_NameComponentType type = ndn_NameComponentType_GENERIC,
74 int otherTypeCode = -1)
77 setType(type, otherTypeCode);
96 (
const uint8_t *value,
size_t valueLength,
97 ndn_NameComponentType type = ndn_NameComponentType_GENERIC,
98 int otherTypeCode = -1)
99 : value_(value, valueLength)
101 setType(type, otherTypeCode);
121 ndn_NameComponentType type = ndn_NameComponentType_GENERIC,
122 int otherTypeCode = -1)
123 : value_((
const uint8_t*)value, ::strlen(value))
125 setType(type, otherTypeCode);
144 (
const std::string& value,
145 ndn_NameComponentType type = ndn_NameComponentType_GENERIC,
146 int otherTypeCode = -1)
147 : value_((
const uint8_t*)&value[0], value.size())
149 setType(type, otherTypeCode);
169 ndn_NameComponentType type = ndn_NameComponentType_GENERIC,
170 int otherTypeCode = -1)
173 setType(type, otherTypeCode);
182 : type_(componentLite.
getType()),
210 ndn_NameComponentType
249 return value_.
size() >= 1 && value_.
buf()[0] == 0x00 &&
250 type_ == ndn_NameComponentType_GENERIC;
262 return value_.
size() >= 1 && value_.
buf()[0] == 0xFB &&
263 type_ == ndn_NameComponentType_GENERIC;
275 return value_.
size() >= 1 && value_.
buf()[0] == 0xFD &&
276 type_ == ndn_NameComponentType_GENERIC;
288 return value_.
size() >= 1 && value_.
buf()[0] == 0xFC &&
289 type_ == ndn_NameComponentType_GENERIC;
301 return value_.
size() >= 1 && value_.
buf()[0] == 0xFE &&
302 type_ == ndn_NameComponentType_GENERIC;
312 return type_ == ndn_NameComponentType_GENERIC;
322 return type_ == ndn_NameComponentType_IMPLICIT_SHA256_DIGEST;
332 return type_ == ndn_NameComponentType_PARAMETERS_SHA256_DIGEST;
368 hasPrefix(
const uint8_t* prefix,
size_t prefixLength)
const;
478 ndn_NameComponentType type = ndn_NameComponentType_GENERIC,
479 int otherTypeCode = -1);
656 static const uint8_t*
680 if (type_ == ndn_NameComponentType_OTHER_CODE)
681 return *value_ == *other.value_ &&
682 other.type_ == ndn_NameComponentType_OTHER_CODE &&
683 otherTypeCode_ == other.otherTypeCode_;
685 return *value_ == *other.value_ && type_ == other.type_;
759 setType(ndn_NameComponentType type,
int otherTypeCode);
764 static const uint8_t FINAL_SEGMENT_PREFIX[];
765 static size_t FINAL_SEGMENT_PREFIX_LENGTH;
767 ndn_NameComponentType type_;
784 Name(
const std::vector<Component>& components)
785 : components_(components), changeCount_(0)
831 set(
const char *uri);
838 set(
const std::string& uri) {
set(uri.c_str()); }
858 (
const uint8_t *value,
size_t valueLength,
859 ndn_NameComponentType type = ndn_NameComponentType_GENERIC,
860 int otherTypeCode = -1)
862 if (type == ndn_NameComponentType_OTHER_CODE)
863 checkAppendOtherTypeCode(otherTypeCode);
885 (
const std::vector<uint8_t>& value,
886 ndn_NameComponentType type = ndn_NameComponentType_GENERIC,
887 int otherTypeCode = -1)
889 if (type == ndn_NameComponentType_OTHER_CODE)
890 checkAppendOtherTypeCode(otherTypeCode);
914 ndn_NameComponentType type = ndn_NameComponentType_GENERIC,
915 int otherTypeCode = -1)
917 if (type == ndn_NameComponentType_OTHER_CODE)
918 checkAppendOtherTypeCode(otherTypeCode);
924 append(
const Component &value)
926 components_.push_back(value);
950 ndn_NameComponentType type = ndn_NameComponentType_GENERIC,
951 int otherTypeCode = -1)
953 if (type == ndn_NameComponentType_OTHER_CODE)
954 checkAppendOtherTypeCode(otherTypeCode);
977 (
const std::string& value,
978 ndn_NameComponentType type = ndn_NameComponentType_GENERIC,
979 int otherTypeCode = -1)
981 if (type == ndn_NameComponentType_OTHER_CODE)
982 checkAppendOtherTypeCode(otherTypeCode);
1001 return append(value, valueLength);
1026 DEPRECATED_IN_NDN_CPP
addComponent(
const uint8_t *value,
size_t valueLength)
1028 return append(value, valueLength);
1054 components_.clear();
1080 getSubName(
int iStartComponent,
size_t nComponents)
const;
1092 return getSubName(iStartComponent, components_.size());
1104 if (nComponents < 0)
1105 return getSubName(0, components_.size() + nComponents);
1119 toUri(
bool includeScheme =
false)
const;
1354 fromEscapedString(
const char *escapedString,
size_t beginOffset,
size_t endOffset);
1385 toEscapedString(
const std::vector<uint8_t>& value, std::ostringstream& result);
1405 size()
const {
return components_.size(); }
1416 return wireFormat.encodeName(*
this);
1428 (
const uint8_t *input,
size_t inputLength,
1431 wireFormat.decodeName(*
this, input, inputLength);
1443 wireDecode(&input[0], input.size(), wireFormat);
1499 return compare(0, components_.size(), other);
1523 (
int iStartComponent,
size_t nComponents,
const Name& other,
1524 int iOtherStartComponent,
size_t nOtherComponents)
const;
1546 (
int iStartComponent,
size_t nComponents,
const Name& other,
1547 int iOtherStartComponent = 0)
const
1550 (iStartComponent, nComponents, other, iOtherStartComponent,
1551 other.components_.size());
1555 operator [] (
int i)
const
1564 template<
class T>
void
1632 bool operator() (
const Name& name1,
const Name& name2)
const {
return name1 < name2; }
1638 typedef std::vector<Component>::const_iterator const_iterator;
1639 typedef std::vector<Component>::const_reverse_iterator const_reverse_iterator;
1647 begin()
const {
return components_.begin(); }
1653 end()
const {
return components_.end(); }
1658 const_reverse_iterator
1659 rbegin()
const {
return components_.rbegin(); }
1664 const_reverse_iterator
1665 rend()
const {
return components_.rend(); }
1674 checkAppendOtherTypeCode(
int otherTypeCode);
1676 std::vector<Component> components_;
1677 uint64_t changeCount_;
1680 inline std::ostream&
1681 operator << (std::ostream& os,
const Name& name)
static Component fromNumberWithPrefix(uint64_t number, const uint8_t *prefix, size_t prefixLength)
Create a GENERIC component whose value is the prefix appended with the network-ordered encoding of th...
Definition: name.cpp:194
Name &DEPRECATED_IN_NDN_CPP appendComponent(const Blob &value)
Definition: name.hpp:1017
static Component fromTimestamp(uint64_t timestamp)
Create a component with the encoded timestamp according to NDN naming conventions for "Timestamp" (ma...
Definition: name.hpp:554
bool operator<=(const Component &other) const
Return true if this is less than or equal to the other Component in the NDN canonical ordering...
Definition: name.hpp:722
bool match(const Name &name) const
Check if the N components of this name are the same as the first N components of the given name...
Definition: name.cpp:553
static Component fromParametersSha256Digest(const std::vector< uint8_t > &digest)
Create a component of type ParametersSha256DigestComponent, so that isParametersSha256Digest() is tru...
Definition: name.hpp:648
void set(const NameLite &nameLite)
Clear this name, and set the components by copying from nameLite.
Definition: name.cpp:476
Name & appendParametersSha256Digest(const std::vector< uint8_t > &digest)
Append a component of type ParametersSha256DigestComponent, so that isParametersSha256Digest() is tru...
Definition: name.hpp:1288
ndn_NameComponentType getType() const
Get the name component type.
Definition: name.hpp:211
uint64_t toTimestamp() const
Interpret this name component as a timestamp according to NDN naming conventions for "Timestamp" (mar...
Definition: name.hpp:443
Name & appendSegmentOffset(uint64_t segmentOffset)
Append a component with the encoded segment byte offset according to NDN naming conventions for segme...
Definition: name.hpp:1151
static Component fromSegment(uint64_t segment)
Create a component with the encoded segment number according to NDN naming conventions for "Segment n...
Definition: name.hpp:512
Name &DEPRECATED_IN_NDN_CPP appendComponent(const std::vector< uint8_t > &value)
Definition: name.hpp:1008
std::string toUri(bool includeScheme=false) const
Encode this name as a URI.
Definition: name.cpp:497
void set(const std::string &uri)
Parse the uri according to the NDN URI Scheme and set the name with the components.
Definition: name.hpp:838
void push_back(const T &component)
Append the component.
Definition: name.hpp:1565
static Component fromNumber(uint64_t number, ndn_NameComponentType type=ndn_NameComponentType_GENERIC, int otherTypeCode=-1)
Create a component whose value is the nonNegativeInteger encoding of the number.
Definition: name.cpp:167
A NameLite holds an array of NameLite::Component.
Definition: name-lite.hpp:36
uint64_t toSequenceNumber() const
Interpret this name component as a sequence number according to NDN naming conventions for "Sequencin...
Definition: name.hpp:456
Name & appendImplicitSha256Digest(const std::vector< uint8_t > &digest)
Append a component of type ImplicitSha256DigestComponent, so that isImplicitSha256Digest() is true...
Definition: name.hpp:1246
const Component &DEPRECATED_IN_NDN_CPP getComponent(size_t i) const
Definition: name.hpp:1068
bool isParametersSha256Digest() const
Check if this component is a ParametersSha256Digest component.
Definition: name.hpp:330
Name & appendImplicitSha256Digest(const Blob &digest)
Append a component of type ImplicitSha256DigestComponent, so that isImplicitSha256Digest() is true...
Definition: name.hpp:1216
static Component fromSequenceNumber(uint64_t sequenceNumber)
Create a component with the encoded sequence number according to NDN naming conventions for "Sequenci...
Definition: name.hpp:567
Name getSubName(int iStartComponent, size_t nComponents) const
Get a new name, constructed as a subset of components.
Definition: name.cpp:514
bool isSegment() const
Check if this component is a segment number according to NDN naming conventions for "Segment number" ...
Definition: name.hpp:247
void wireDecode(const std::vector< uint8_t > &input, WireFormat &wireFormat=*WireFormat::getDefaultWireFormat())
Decode the input using a particular wire format and update this Name.
Definition: name.hpp:1441
const_reverse_iterator rbegin() const
Reverse begin iterator (const).
Definition: name.hpp:1659
static Component fromImplicitSha256Digest(const Blob &digest)
Create a component of type ImplicitSha256DigestComponent, so that isImplicitSha256Digest() is true...
Definition: name.cpp:284
static size_t getFinalSegmentPrefixLength()
Definition: name.hpp:663
bool operator==(const Name &name) const
Check if this name has the same component count and components as the given name. ...
Definition: name.hpp:1576
A Name::Component holds a read-only name component value.
Definition: name.hpp:45
int compare(const Name &other) const
Compare this to the other Name using NDN canonical ordering.
Definition: name.hpp:1497
int compare(const Component &other) const
Compare this to the other Component using NDN canonical ordering.
Definition: name.cpp:261
bool operator<(const Component &other) const
Return true if this is less than the other Component in the NDN canonical ordering.
Definition: name.hpp:731
Name & appendSequenceNumber(uint64_t sequenceNumber)
Append a component with the encoded sequence number according to NDN naming conventions for "Sequenci...
Definition: name.hpp:1202
Name & appendImplicitSha256Digest(const uint8_t *digest, size_t digestLength)
Append a component of type ImplicitSha256DigestComponent, so that isImplicitSha256Digest() is true...
Definition: name.hpp:1232
bool operator>=(const Name &other) const
Return true if this is less than or equal to the other Name in the NDN canonical ordering.
Definition: name.hpp:1611
static Component fromParametersSha256Digest(const uint8_t *digest, size_t digestLength)
Create a component of type ParametersSha256DigestComponent, so that isParametersSha256Digest() is tru...
Definition: name.hpp:634
static Component fromVersion(uint64_t version)
Create a component with the encoded version number according to NDN naming conventions for "Versionin...
Definition: name.hpp:540
bool operator>=(const Component &other) const
Return true if this is less than or equal to the other Component in the NDN canonical ordering...
Definition: name.hpp:740
uint64_t DEPRECATED_IN_NDN_CPP toFinalSegment() const
Definition: name.hpp:415
const Blob & getValue() const
Get the component value.
Definition: name.hpp:202
Name & appendVersion(uint64_t version)
Append a component with the encoded version number according to NDN naming conventions for "Versionin...
Definition: name.hpp:1175
A Name holds an array of Name::Component and represents an NDN name.
Definition: name.hpp:40
Component getSuccessor() const
Get the successor of this component, as described in Name::getSuccessor.
Definition: name.cpp:308
static Component fromNumberWithMarker(uint64_t number, uint8_t marker)
Create a GENERIC component whose value is the marker appended with the nonNegativeInteger encoding of...
Definition: name.cpp:184
uint64_t toNumber() const
Interpret this name component as a network-ordered number and return an integer.
Definition: name.cpp:253
size_t size() const
Get the number of components.
Definition: name.hpp:1405
bool DEPRECATED_IN_NDN_CPP isFinalSegment() const
Definition: name.hpp:409
static Component fromImplicitSha256Digest(const std::vector< uint8_t > &digest)
Create a component of type ImplicitSha256DigestComponent, so that isImplicitSha256Digest() is true...
Definition: name.hpp:609
Name & append(const uint8_t *value, size_t valueLength, ndn_NameComponentType type=ndn_NameComponentType_GENERIC, int otherTypeCode=-1)
Append a new component, copying from value of length valueLength.
Definition: name.hpp:858
static Blob fromEscapedString(const char *escapedString, size_t beginOffset, size_t endOffset)
Make a Blob value by decoding the escapedString between beginOffset and endOffset according to the ND...
Definition: name.cpp:572
A Blob holds a pointer to an immutable byte array implemented as const std::vector<uint8_t>.
Definition: blob.hpp:42
bool operator!=(const Name &name) const
Check if this name has the same component count and components as the given name. ...
Definition: name.hpp:1584
Name getSuccessor() const
Get the successor of this name which is defined as follows.
Definition: name.cpp:544
int getOtherTypeCode() const
Get the component type code from the packet which is other than a recognized ndn_NameComponentType en...
Definition: name.hpp:220
const uint8_t * buf() const
Return a const pointer to the first byte of the immutable byte array, or 0 if the pointer is null...
Definition: blob.hpp:159
static bool DEPRECATED_IN_NDN_CPP breadthFirstLess(const Name &name1, const Name &name2)
Definition: name.hpp:1626
Name &DEPRECATED_IN_NDN_CPP appendComponent(const uint8_t *value, size_t valueLength)
Definition: name.hpp:999
std::string toEscapedString() const
Convert this component value by escaping characters according to the NDN URI Scheme.
Definition: name.cpp:245
uint64_t toSegment() const
Interpret this name component as a segment number according to NDN naming conventions for "Segment nu...
Definition: name.hpp:378
bool operator>(const Component &other) const
Return true if this is greater than the other Component in the NDN canonical ordering.
Definition: name.hpp:749
uint64_t toNumberWithPrefix(const uint8_t *prefix, size_t prefixLength) const
Interpret this name component as a network-ordered number with a prefix and return an integer...
Definition: name.cpp:144
size_t size() const
Return the length of the immutable byte array.
Definition: blob.hpp:147
bool isSegmentOffset() const
Check if this component is a segment byte offset according to NDN naming conventions for "Byte offset...
Definition: name.hpp:260
bool isGeneric() const
Check if this component is a generic component.
Definition: name.hpp:310
bool hasPrefix(const uint8_t *prefix, size_t prefixLength) const
Check if this name component begins with the given prefix.
Definition: name.cpp:158
static Component fromSegmentOffset(uint64_t segmentOffset)
Create a component with the encoded segment byte offset according to NDN naming conventions for segme...
Definition: name.hpp:525
A NameLite::Component holds a pointer to the component value.
Definition: name-lite.hpp:41
Name & appendParametersSha256Digest(const uint8_t *digest, size_t digestLength)
Append a component of type ParametersSha256DigestComponent, so that isParametersSha256Digest() is tru...
Definition: name.hpp:1274
uint64_t DEPRECATED_IN_NDN_CPP toSeqNum() const
Definition: name.hpp:400
bool equals(const Component &other) const
Check if this is the same component as other.
Definition: name.hpp:678
Component(const NameLite::Component &componentLite)
Create a new Name::Component, copying bytes from the NameLite::Component value and using its type...
Definition: name.hpp:181
uint64_t toNumberWithMarker(uint8_t marker) const
Interpret this name component as a network-ordered number with a marker and return an integer...
Definition: name.cpp:130
bool operator!=(const Component &other) const
Check if this is not the same component as other.
Definition: name.hpp:702
uint64_t toSegmentOffset() const
Interpret this name component as a segment byte offset according to NDN naming conventions for segmen...
Definition: name.hpp:391
static void toEscapedString(const std::vector< uint8_t > &value, std::ostringstream &result)
Write the value to result, escaping characters according to the NDN URI Scheme.
Name getSubName(int iStartComponent) const
Get a new name, constructed as a subset of components starting at iStartComponent until the end of th...
Definition: name.hpp:1090
uint64_t getChangeCount() const
Get the change count, which is incremented each time this object is changed.
Definition: name.hpp:1475
bool isTimestamp() const
Check if this component is a timestamp according to NDN naming conventions for "Timestamp" (marker 0x...
Definition: name.hpp:286
Name &DEPRECATED_IN_NDN_CPP addComponent(const Blob &value)
Definition: name.hpp:1044
Name & appendTimestamp(uint64_t timestamp)
Append a component with the encoded timestamp according to NDN naming conventions for "Timestamp" (ma...
Definition: name.hpp:1189
const_iterator end() const
End iterator (const).
Definition: name.hpp:1653
static const uint8_t * getFinalSegmentPrefix()
Definition: name.hpp:657
Name(const char *uri)
Parse the uri according to the NDN URI Scheme and create the name with the components.
Definition: name.hpp:793
std::string DEPRECATED_IN_NDN_CPP to_uri() const
Definition: name.hpp:1125
static Component fromParametersSha256Digest(const Blob &digest)
Create a component of type ParametersSha256DigestComponent, so that isParametersSha256Digest() is tru...
Definition: name.cpp:296
bool operator<=(const Name &other) const
Return true if this is less than or equal to the other Name in the NDN canonical ordering.
Definition: name.hpp:1593
size_t DEPRECATED_IN_NDN_CPP getComponentCount() const
Definition: name.hpp:1062
Component()
Create a new GENERIC Name::Component with a zero-length value.
Definition: name.hpp:50
bool isImplicitSha256Digest() const
Check if this component is an ImplicitSha256Digest component.
Definition: name.hpp:320
Name()
Create a new Name with no components.
Definition: name.hpp:775
bool operator==(const Component &other) const
Check if this is the same component as other.
Definition: name.hpp:694
bool isPrefixOf(const Name &name) const
Check if the N components of this name are the same as the first N components of the given name...
Definition: name.hpp:1341
static Component fromImplicitSha256Digest(const uint8_t *digest, size_t digestLength)
Create a component of type ImplicitSha256DigestComponent, so that isImplicitSha256Digest() is true...
Definition: name.hpp:595
void wireDecode(const uint8_t *input, size_t inputLength, WireFormat &wireFormat=*WireFormat::getDefaultWireFormat())
Decode the input using a particular wire format and update this Name.
Definition: name.hpp:1428
Name(const std::string &uri)
Parse the uri according to the NDN URI Scheme and create the name with the components.
Definition: name.hpp:803
Name &DEPRECATED_IN_NDN_CPP addComponent(const std::vector< uint8_t > &value)
Definition: name.hpp:1035
Name &DEPRECATED_IN_NDN_CPP addComponent(const uint8_t *value, size_t valueLength)
Definition: name.hpp:1026
Name & appendParametersSha256Digest(const Blob &digest)
Append a component of type ParametersSha256DigestComponent, so that isParametersSha256Digest() is tru...
Definition: name.hpp:1260
bool isSequenceNumber() const
Check if this component is a sequence number according to NDN naming conventions for "Sequencing" (ma...
Definition: name.hpp:299
Definition: name.hpp:1631
Name getPrefix(int nComponents) const
Return a new Name with the first nComponents components of this Name.
Definition: name.hpp:1102
uint64_t toVersion() const
Interpret this name component as a version number according to NDN naming conventions for "Versioning...
Definition: name.hpp:429
const_reverse_iterator rend() const
Reverse end iterator (const).
Definition: name.hpp:1665
const_iterator begin() const
Begin iterator (const).
Definition: name.hpp:1647
bool operator>(const Name &other) const
Return true if this is greater than the other Name in the NDN canonical ordering. ...
Definition: name.hpp:1620
void clear()
Clear all the components.
Definition: name.hpp:1053
Name &DEPRECATED_IN_NDN_CPP appendFinalSegment(uint64_t segment)
Definition: name.hpp:1160
Name(const std::vector< Component > &components)
Create a new Name, copying the name components.
Definition: name.hpp:784
static Blob fromEscapedString(const std::string &escapedString)
Make a Blob value by decoding the escapedString according to the NDN URI Scheme.
Definition: name.hpp:1376
bool operator<(const Name &other) const
Return true if this is less than the other Name in the NDN canonical ordering.
Definition: name.hpp:1602
Blob wireEncode(WireFormat &wireFormat=*WireFormat::getDefaultWireFormat()) const
Encode this Name for a particular wire format.
Definition: name.hpp:1414
bool isVersion() const
Check if this component is a version number according to NDN naming conventions for "Versioning" (mar...
Definition: name.hpp:273
bool equals(const Name &name) const
Check if this name has the same component count and components as the given name. ...
Definition: name.cpp:529
Name & appendSegment(uint64_t segment)
Append a component with the encoded segment number according to NDN naming conventions for "Segment n...
Definition: name.hpp:1138