1 #ifndef SERDES_BYTE_ITERATOR_H_
12 #define SERDES_BYTE_ITERATOR_H_
28 uint8_t *bytes =
nullptr;
29 size_t num_bytes = 0u;
41 if (p_parent !=
nullptr)
46 if (p_parent->buffer.
element_size == 1 || !detail::on_little_endian_platform())
51 else if (++p_parent->start_index && p_parent->start_index >= p_parent->end_plus_one_index)
58 inline bool operator!=(
const iterator &)
const
60 return p_parent !=
nullptr;
64 if (p_parent ==
nullptr || p_parent->start_index >= p_parent->end_plus_one_index)
66 current_segment.bytes =
nullptr;
67 current_segment.num_bytes = 0u;
68 return current_segment;
71 uint8_t *data =
reinterpret_cast<uint8_t *
>(p.buffer.value);
72 if (detail::on_little_endian_platform())
77 current_segment.bytes = &data[p.start_index];
78 current_segment.num_bytes = p.end_plus_one_index - p.start_index;
80 else if (elem_sz == 2u || elem_sz == 4u || elem_sz == 8u)
86 const size_t byte_offset = p.start_index + elem_sz - ((p.start_index & (elem_sz - 1u)) << 1) - 1u;
87 current_segment.bytes = &data[byte_offset];
88 current_segment.num_bytes = 1u;
92 current_segment.bytes =
nullptr;
93 current_segment.num_bytes = 0u;
98 current_segment.bytes = &data[p.start_index];
99 current_segment.num_bytes = p.end_plus_one_index - p.start_index;
101 return current_segment;
109 inline iterator end() {
return iterator(
nullptr); }
112 friend struct packet;
113 sized_pointer<void> &buffer;
115 size_t end_plus_one_index;
116 inline byte_iterator_type(
117 sized_pointer<void> &data_arg,
118 size_t starting_byte,
121 start_index{starting_byte},
122 end_plus_one_index{ending_byte}
144 #endif // SERDES_BYTE_ITERATOR_H_