NS-3 based Named Data Networking (NDN) simulator
ndnSIM 2.5: NDN, CCN, CCNx, content centric networks
API Documentation
estimator.cpp
Go to the documentation of this file.
1 /* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */
2 /*
3  * Copyright (c) 2013-2018 Regents of the University of California.
4  *
5  * This file is part of ndn-cxx library (NDN C++ library with eXperimental eXtensions).
6  *
7  * ndn-cxx library is free software: you can redistribute it and/or modify it under the
8  * terms of the GNU Lesser General Public License as published by the Free Software
9  * Foundation, either version 3 of the License, or (at your option) any later version.
10  *
11  * ndn-cxx library is distributed in the hope that it will be useful, but WITHOUT ANY
12  * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
13  * PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
14  *
15  * You should have received copies of the GNU General Public License and GNU Lesser
16  * General Public License along with ndn-cxx, e.g., in COPYING.md file. If not, see
17  * <http://www.gnu.org/licenses/>.
18  *
19  * See AUTHORS.md for complete list of ndn-cxx authors and contributors.
20  */
21 
23 
24 namespace ndn {
25 namespace encoding {
26 
27 size_t
28 Estimator::prependVarNumber(uint64_t varNumber) const noexcept
29 {
30  if (varNumber < 253) {
31  return 1;
32  }
33  else if (varNumber <= std::numeric_limits<uint16_t>::max()) {
34  return 3;
35  }
36  else if (varNumber <= std::numeric_limits<uint32_t>::max()) {
37  return 5;
38  }
39  else {
40  return 9;
41  }
42 }
43 
44 size_t
45 Estimator::appendVarNumber(uint64_t varNumber) const noexcept
46 {
47  return prependVarNumber(varNumber);
48 }
49 
50 size_t
51 Estimator::prependNonNegativeInteger(uint64_t varNumber) const noexcept
52 {
53  if (varNumber <= std::numeric_limits<uint8_t>::max()) {
54  return 1;
55  }
56  else if (varNumber <= std::numeric_limits<uint16_t>::max()) {
57  return 2;
58  }
59  else if (varNumber <= std::numeric_limits<uint32_t>::max()) {
60  return 4;
61  }
62  else {
63  return 8;
64  }
65 }
66 
67 size_t
68 Estimator::appendNonNegativeInteger(uint64_t varNumber) const noexcept
69 {
70  return prependNonNegativeInteger(varNumber);
71 }
72 
73 size_t
74 Estimator::prependByteArrayBlock(uint32_t type, const uint8_t* array, size_t arraySize) const noexcept
75 {
76  size_t totalLength = arraySize;
77  totalLength += prependVarNumber(arraySize);
78  totalLength += prependVarNumber(type);
79 
80  return totalLength;
81 }
82 
83 size_t
84 Estimator::appendByteArrayBlock(uint32_t type, const uint8_t* array, size_t arraySize) const noexcept
85 {
86  return prependByteArrayBlock(type, array, arraySize);
87 }
88 
89 size_t
90 Estimator::prependBlock(const Block& block) const
91 {
92  if (block.hasWire()) {
93  return block.size();
94  }
95  else {
96  return prependByteArrayBlock(block.type(), block.value(), block.value_size());
97  }
98 }
99 
100 size_t
101 Estimator::appendBlock(const Block& block) const
102 {
103  return prependBlock(block);
104 }
105 
106 } // namespace encoding
107 } // namespace ndn
bool hasWire() const
Check if the Block has fully encoded wire.
Definition: block.cpp:249
Copyright (c) 2011-2015 Regents of the University of California.
size_t prependByteArrayBlock(uint32_t type, const uint8_t *array, size_t arraySize) const noexcept
Prepend TLV block of type type and value from buffer array of size arraySize.
Definition: estimator.cpp:74
size_t value_size() const
Get size of TLV-VALUE aka TLV-LENGTH.
Definition: block.cpp:316
Represents a TLV element of NDN packet format.
Definition: block.hpp:42
const uint8_t * value() const
Get pointer to TLV-VALUE.
Definition: block.cpp:310
size_t prependVarNumber(uint64_t varNumber) const noexcept
Prepend VarNumber varNumber of NDN TLV encoding.
Definition: estimator.cpp:28
size_t size() const
Get size of encoded wire, including Type-Length-Value.
Definition: block.cpp:298
size_t appendVarNumber(uint64_t varNumber) const noexcept
Prepend VarNumber varNumber of NDN TLV encoding.
Definition: estimator.cpp:45
size_t appendBlock(const Block &block) const
Append TLV block block.
Definition: estimator.cpp:101
size_t appendNonNegativeInteger(uint64_t integer) const noexcept
Append non-negative integer integer of NDN TLV encoding.
Definition: estimator.cpp:68
size_t appendByteArrayBlock(uint32_t type, const uint8_t *array, size_t arraySize) const noexcept
Append TLV block of type type and value from buffer array of size arraySize.
Definition: estimator.cpp:84
size_t prependBlock(const Block &block) const
Prepend TLV block block.
Definition: estimator.cpp:90
uint32_t type() const
Get TLV-TYPE.
Definition: block.hpp:249
size_t prependNonNegativeInteger(uint64_t integer) const noexcept
Prepend non-negative integer integer of NDN TLV encoding.
Definition: estimator.cpp:51