|
1 #include "mtag-buffer.h" |
|
2 #include "ns3/assert.h" |
|
3 |
|
4 namespace ns3 { |
|
5 |
|
6 void |
|
7 MtagBuffer::WriteU8 (uint8_t v) |
|
8 { |
|
9 NS_ASSERT (m_current + 1 <= m_end); |
|
10 *m_current = v; |
|
11 m_current++; |
|
12 } |
|
13 void |
|
14 MtagBuffer::WriteU16 (uint16_t data) |
|
15 { |
|
16 WriteU8 ((data >> 0) & 0xff); |
|
17 WriteU8 ((data >> 8) & 0xff); |
|
18 } |
|
19 void |
|
20 MtagBuffer::WriteU32 (uint32_t data) |
|
21 { |
|
22 WriteU8 ((data >> 0) & 0xff); |
|
23 WriteU8 ((data >> 8) & 0xff); |
|
24 WriteU8 ((data >> 16) & 0xff); |
|
25 WriteU8 ((data >> 24) & 0xff); |
|
26 } |
|
27 void |
|
28 MtagBuffer::WriteU64 (uint64_t data) |
|
29 { |
|
30 WriteU8 ((data >> 0) & 0xff); |
|
31 WriteU8 ((data >> 8) & 0xff); |
|
32 WriteU8 ((data >> 16) & 0xff); |
|
33 WriteU8 ((data >> 24) & 0xff); |
|
34 WriteU8 ((data >> 32) & 0xff); |
|
35 WriteU8 ((data >> 40) & 0xff); |
|
36 WriteU8 ((data >> 48) & 0xff); |
|
37 WriteU8 ((data >> 54) & 0xff); |
|
38 } |
|
39 uint8_t |
|
40 MtagBuffer::ReadU8 (void) |
|
41 { |
|
42 NS_ASSERT (m_current + 1 <= m_end); |
|
43 uint8_t v; |
|
44 v = *m_current; |
|
45 m_current++; |
|
46 return v; |
|
47 } |
|
48 uint16_t |
|
49 MtagBuffer::ReadU16 (void) |
|
50 { |
|
51 uint8_t byte0 = ReadU8 (); |
|
52 uint8_t byte1 = ReadU8 (); |
|
53 uint16_t data = byte1; |
|
54 data <<= 8; |
|
55 data |= byte0; |
|
56 return data; |
|
57 } |
|
58 uint32_t |
|
59 MtagBuffer::ReadU32 (void) |
|
60 { |
|
61 uint8_t byte0 = ReadU8 (); |
|
62 uint8_t byte1 = ReadU8 (); |
|
63 uint8_t byte2 = ReadU8 (); |
|
64 uint8_t byte3 = ReadU8 (); |
|
65 uint32_t data = byte3; |
|
66 data <<= 8; |
|
67 data |= byte2; |
|
68 data <<= 8; |
|
69 data |= byte1; |
|
70 data <<= 8; |
|
71 data |= byte0; |
|
72 return data; |
|
73 } |
|
74 uint64_t |
|
75 MtagBuffer::ReadU64 (void) |
|
76 { |
|
77 uint8_t byte0 = ReadU8 (); |
|
78 uint8_t byte1 = ReadU8 (); |
|
79 uint8_t byte2 = ReadU8 (); |
|
80 uint8_t byte3 = ReadU8 (); |
|
81 uint8_t byte4 = ReadU8 (); |
|
82 uint8_t byte5 = ReadU8 (); |
|
83 uint8_t byte6 = ReadU8 (); |
|
84 uint8_t byte7 = ReadU8 (); |
|
85 uint32_t data = byte7; |
|
86 data <<= 8; |
|
87 data |= byte6; |
|
88 data <<= 8; |
|
89 data |= byte5; |
|
90 data <<= 8; |
|
91 data |= byte4; |
|
92 data <<= 8; |
|
93 data |= byte3; |
|
94 data <<= 8; |
|
95 data |= byte2; |
|
96 data <<= 8; |
|
97 data |= byte1; |
|
98 data <<= 8; |
|
99 data |= byte0; |
|
100 |
|
101 return data; |
|
102 } |
|
103 MtagBuffer::MtagBuffer (uint8_t *start, uint8_t *end) |
|
104 : m_current (start), |
|
105 m_end (end) |
|
106 {} |
|
107 |
|
108 void |
|
109 MtagBuffer::TrimAtEnd (uint32_t trim) |
|
110 { |
|
111 NS_ASSERT (m_current <= (m_end - trim)); |
|
112 m_end -= trim; |
|
113 } |
|
114 |
|
115 void |
|
116 MtagBuffer::CopyFrom (MtagBuffer o) |
|
117 { |
|
118 uint32_t size = o.m_end - o.m_current; |
|
119 NS_ASSERT (size <= m_end - m_current); |
|
120 memcpy (m_current, o.m_current, size); |
|
121 m_current += size; |
|
122 } |
|
123 |
|
124 } // namespace ns3 |