esp8266ndn
NDN Arduino library for ESP8266 and more
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
varnum.hpp
Go to the documentation of this file.
1 #ifndef NDNPH_TLV_VARNUM_HPP
2 #define NDNPH_TLV_VARNUM_HPP
3 
4 #include "../core/common.hpp"
5 
6 namespace ndnph {
7 namespace tlv {
8 
10 constexpr size_t
11 sizeofVarNum(uint32_t n) {
12  return n < 0xFD ? 1 : n <= 0xFFFF ? 3 : 5;
13 }
14 
16 inline void
17 writeVarNum(uint8_t* room, uint32_t n) {
18  if (n < 0xFD) {
19  room[0] = n;
20  } else if (n <= 0xFFFF) {
21  room[0] = 0xFD;
22  room[1] = n >> 8;
23  room[2] = n;
24  } else {
25  room[0] = 0xFE;
26  room[1] = n >> 24;
27  room[2] = n >> 16;
28  room[3] = n >> 8;
29  room[4] = n;
30  }
31 }
32 
37 inline int
38 readVarNum(const uint8_t* input, size_t size, uint32_t& n) {
39  if (size >= 1 && input[0] < 0xFD) {
40  n = input[0];
41  return 1;
42  }
43  if (size >= 3 && input[0] == 0xFD) {
44  n = (static_cast<uint32_t>(input[1]) << 8) | static_cast<uint32_t>(input[2]);
45  return 3;
46  }
47  if (size >= 5 && input[0] == 0xFE) {
48  n = (static_cast<uint32_t>(input[1]) << 24) | (static_cast<uint32_t>(input[2]) << 16) |
49  (static_cast<uint32_t>(input[3]) << 8) | static_cast<uint32_t>(input[4]);
50  return 5;
51  }
52  return 0;
53 }
54 
55 } // namespace tlv
56 } // namespace ndnph
57 
58 #endif // NDNPH_TLV_VARNUM_HPP
bool input(Region &region, T &target, std::istream &is=std::cin)
Read and decode from input stream.
Definition: io.hpp:15
int readVarNum(const uint8_t *input, size_t size, uint32_t &n)
Read VAR-NUMBER.
Definition: varnum.hpp:38
void writeVarNum(uint8_t *room, uint32_t n)
Write VAR-NUMBER.
Definition: varnum.hpp:17
constexpr size_t sizeofVarNum(uint32_t n)
Compute size of VAR-NUMBER.
Definition: varnum.hpp:11
Definition: fs.hpp:33