32 #include <boost/functional/hash.hpp> 
   33 #include <boost/range/adaptor/reversed.hpp> 
   34 #include <boost/range/concepts.hpp> 
   38 BOOST_CONCEPT_ASSERT((boost::EqualityComparable<Name>));
 
   39 BOOST_CONCEPT_ASSERT((WireEncodable<Name>));
 
   40 BOOST_CONCEPT_ASSERT((WireEncodableWithEncodingBuffer<Name>));
 
   41 BOOST_CONCEPT_ASSERT((WireDecodable<Name>));
 
   42 BOOST_CONCEPT_ASSERT((boost::RandomAccessIterator<Name::iterator>));
 
   43 BOOST_CONCEPT_ASSERT((boost::RandomAccessIterator<Name::const_iterator>));
 
   44 BOOST_CONCEPT_ASSERT((boost::RandomAccessIterator<Name::reverse_iterator>));
 
   45 BOOST_CONCEPT_ASSERT((boost::RandomAccessIterator<Name::const_reverse_iterator>));
 
   46 BOOST_CONCEPT_ASSERT((boost::RandomAccessRangeConcept<Name>));
 
   47 static_assert(std::is_base_of<tlv::Error, Name::Error>::value,
 
   48               "Name::Error must inherit from tlv::Error");
 
   50 const size_t Name::npos = std::numeric_limits<size_t>::max();
 
   66   : 
Name(std::string(uri))
 
   75   size_t iColon = uri.find(
':');
 
   76   if (iColon != std::string::npos) {
 
   78     size_t iFirstSlash = uri.find(
'/');
 
   79     if (iFirstSlash == std::string::npos || iColon < iFirstSlash) {
 
   81       uri.erase(0, iColon + 1);
 
   87     if (uri.size() >= 2 && uri[1] == 
'/') {
 
   89       size_t iAfterAuthority = uri.find(
'/', 2);
 
   90       if (iAfterAuthority == std::string::npos)
 
   94         uri.erase(0, iAfterAuthority + 1);
 
  102   size_t iComponentStart = 0;
 
  105   while (iComponentStart < uri.size()) {
 
  106     size_t iComponentEnd = uri.find(
'/', iComponentStart);
 
  107     if (iComponentEnd == std::string::npos)
 
  108       iComponentEnd = uri.size();
 
  111     iComponentStart = iComponentEnd + 1;
 
  115 template<encoding::Tag TAG>
 
  119   size_t totalLength = 0;
 
  120   for (
const Component& comp : *
this | boost::adaptors::reversed) {
 
  121     totalLength += comp.wireEncode(encoder);
 
  124   totalLength += encoder.prependVarNumber(totalLength);
 
  125   totalLength += encoder.prependVarNumber(
tlv::Name);
 
  143   m_wire = buffer.block();
 
  162   Name copiedName(*
this);
 
  174     i += 
static_cast<ssize_t
>(
size());
 
  177   if (i < 0 || 
static_cast<size_t>(i) >= 
size()) {
 
  178     NDN_THROW(
Error(
"Requested component does not exist (out of bounds)"));
 
  189   if (iStartComponent < 0)
 
  190     iStartComponent += 
static_cast<ssize_t
>(
size());
 
  191   size_t iStart = iStartComponent < 0 ? 0 : static_cast<size_t>(iStartComponent);
 
  193   size_t iEnd = 
size();
 
  194   if (nComponents != 
npos)
 
  195     iEnd = std::min(
size(), iStart + nComponents);
 
  197   for (
size_t i = iStart; i < iEnd; ++i)
 
  209     i += 
static_cast<ssize_t
>(
size());
 
  221     i += 
static_cast<ssize_t
>(
size());
 
  248   for (
size_t i = 0; i < name.
size(); ++i)
 
  254 static constexpr uint8_t SHA256_OF_EMPTY_STRING[] = {
 
  255   0xe3, 0xb0, 0xc4, 0x42, 0x98, 0xfc, 0x1c, 0x14,
 
  256   0x9a, 0xfb, 0xf4, 0xc8, 0x99, 0x6f, 0xb9, 0x24,
 
  257   0x27, 0xae, 0x41, 0xe4, 0x64, 0x9b, 0x93, 0x4c,
 
  258   0xa4, 0x95, 0x99, 0x1b, 0x78, 0x52, 0xb8, 0x55,
 
  265                                      SHA256_OF_EMPTY_STRING, 
sizeof(SHA256_OF_EMPTY_STRING));
 
  266   return append(placeholder);
 
  273     i += 
static_cast<ssize_t
>(
size());
 
  291     static const Name n(
"/sha256digest=0000000000000000000000000000000000000000000000000000000000000000");
 
  306   for (
size_t i = 0; i < 
size(); ++i) {
 
  307     if (
get(i) != other.
get(i))
 
  320   for (
size_t i = 0; i < 
size(); ++i) {
 
  321     if (
get(i) != other.
get(i))
 
  331   count1 = std::min(count1, this->
size() - pos1);
 
  332   count2 = std::min(count2, other.
size() - pos2);
 
  333   size_t count = std::min(count1, count2);
 
  335   for (
size_t i = 0; i < count; ++i) {
 
  342   return count1 - count2;
 
  355   for (
const auto& component : *
this) {
 
  357     component.toUri(os, format);
 
  364   std::ostringstream os;
 
  372   std::string inputString;
 
  374   name = 
Name(inputString);
 
  386   return boost::hash_range(name.
wireEncode().wire(),
 
Represents a TLV element of the NDN packet format.
 
uint32_t type() const
Return the TLV-TYPE of the Block.
 
element_iterator erase(element_const_iterator position)
Erase a sub-element.
 
bool hasWire() const noexcept
Check if the Block contains a fully encoded wire representation.
 
void resetWire() noexcept
Reset wire buffer but keep TLV-TYPE and sub-elements (if any)
 
element_const_iterator elements_begin() const
Equivalent to elements().begin()
 
std::vector< Block > element_container
 
const element_container & elements() const
Get container of sub-elements.
 
void parse() const
Parse TLV-VALUE into sub-elements.
 
Represents an absolute name.
 
bool empty() const
Checks if the name is empty, i.e.
 
name::Component::Error Error
 
Name & set(ssize_t i, const Component &component)
Replace the component at the specified index.
 
Name getSuccessor() const
Get the successor of a name.
 
PartialName getPrefix(ssize_t nComponents) const
Returns a prefix of the name.
 
Name & appendTimestamp(const optional< time::system_clock::time_point > ×tamp=nullopt)
Append a timestamp component.
 
int compare(const Name &other) const
Compare this to the other Name using NDN canonical ordering.
 
Name & appendParametersSha256DigestPlaceholder()
Append a placeholder for a ParametersSha256Digest component.
 
Name & appendVersion(const optional< uint64_t > &version=nullopt)
Append a version component.
 
void clear()
Remove all components.
 
Name & append(const Component &component)
Append a component.
 
Name()
Create an empty name.
 
bool equals(const Name &other) const
Check if this name equals another name.
 
const Component & at(ssize_t i) const
Returns an immutable reference to the component at the specified index, with bounds checking.
 
static const size_t npos
Indicates "until the end" in getSubName() and compare().
 
size_t wireEncode(EncodingImpl< TAG > &encoder) const
Fast encoding or block size estimation.
 
Name deepCopy() const
Make a deep copy of the name, reallocating the underlying memory buffer.
 
const Block & wireEncode() const
Perform wire encoding, or return existing wire encoding.
 
bool isPrefixOf(const Name &other) const
Check if this name is a prefix of another name.
 
PartialName getSubName(ssize_t iStartComponent, size_t nComponents=npos) const
Extracts some components as a sub-name (PartialName).
 
void erase(ssize_t i)
Erase the component at the specified index.
 
size_t size() const
Returns the number of components.
 
const Component & get(ssize_t i) const
Returns an immutable reference to the component at the specified index.
 
void toUri(std::ostream &os, name::UriFormat format=name::UriFormat::DEFAULT) const
Write URI representation of the name to the output stream.
 
void wireDecode(const Block &wire)
Decode name from wire encoding.
 
Represents a name component.
 
static Component fromEscapedString(const char *input, size_t beginOffset, size_t endOffset)
Decode NameComponent from a URI component.
 
static Component fromTimestamp(const time::system_clock::time_point &timePoint)
Create a timestamp component using NDN naming conventions.
 
static Component fromVersion(uint64_t version)
Create a version component using NDN naming conventions.
 
int compare(const Component &other) const
Compare this to the other Component using NDN canonical ordering.
 
static time_point now() noexcept
 
represents an error in TLV encoding or decoding
 
#define NDN_CXX_DEFINE_WIRE_ENCODE_INSTANTIATIONS(ClassName)
 
EncodingImpl< EstimatorTag > EncodingEstimator
 
EncodingImpl< EncoderTag > EncodingBuffer
 
UriFormat
Format used for the URI representation of a name.
 
milliseconds toUnixTimestamp(const system_clock::time_point &point)
Convert system_clock::time_point to UNIX timestamp.
 
@ ParametersSha256DigestComponent
 
Name PartialName
Represents an arbitrary sequence of name components.
 
std::istream & operator>>(std::istream &is, Name &name)
Parse URI from stream as Name.
 
size_t operator()(const ndn::Name &name) const