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
6namespace ndnph {
7namespace tlv {
8
10constexpr size_t
11sizeofVarNum(uint32_t n) {
12 return n < 0xFD ? 1 : n <= 0xFFFF ? 3 : 5;
13}
14
16inline void
17writeVarNum(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
37inline int
38readVarNum(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
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