Lines Matching refs:sp
63 inline auto Read(Span<const uint8_t> *sp)
70 THROW_IF(sp->Size() < width, INVALID_SPAN_OFFSET);
73 unsigned_type tmp = static_cast<unsigned_type>((*sp)[i]) << (i * BYTE_WIDTH);
76 *sp = sp->SubSpan(width);
81 inline auto Read<sizeof(uint16_t)>(Span<const uint8_t> *sp)
84 THROW_IF(sp->Size() < sizeof(uint16_t), INVALID_SPAN_OFFSET);
86 auto *p = sp->data();
91 *sp = sp->SubSpan(sizeof(uint16_t));
96 inline auto Read<sizeof(uint32_t)>(Span<const uint8_t> *sp)
99 THROW_IF(sp->Size() < sizeof(uint32_t), INVALID_SPAN_OFFSET);
101 auto *p = sp->data();
110 *sp = sp->SubSpan(sizeof(uint32_t));
115 inline auto Read(Span<const uint8_t> sp)
117 return Read<width>(&sp);
120 inline uint32_t ReadULeb128(Span<const uint8_t> *sp)
122 THROW_IF(sp->Size() == 0U, INVALID_SPAN_OFFSET);
127 std::tie(result, n, is_full) = leb128::DecodeUnsigned<uint32_t>(sp->data());
128 THROW_IF(!is_full || sp->Size() < n, INVALID_SPAN_OFFSET);
129 *sp = sp->SubSpan(n);
133 inline void SkipULeb128(Span<const uint8_t> *sp)
135 if (sp->Size() > 0U && (*sp)[0U] <= leb128::PAYLOAD_MASK) {
136 *sp = sp->SubSpan(1U);
140 if (sp->Size() > 1U && (*sp)[1U] <= leb128::PAYLOAD_MASK) {
141 *sp = sp->SubSpan(2U);
145 if (sp->Size() > 2U && (*sp)[2U] <= leb128::PAYLOAD_MASK) {
146 *sp = sp->SubSpan(3U);
150 if (sp->Size() > 3U && (*sp)[3U] <= leb128::PAYLOAD_MASK) {
151 *sp = sp->SubSpan(4U);
155 inline int32_t ReadLeb128(Span<const uint8_t> *sp)
160 std::tie(result, n, is_full) = leb128::DecodeSigned<int32_t>(sp->data());
161 THROW_IF(!is_full || sp->Size() < n, INVALID_SPAN_OFFSET);
162 *sp = sp->SubSpan(n);
181 inline std::optional<T> GetOptionalTaggedValue(Span<const uint8_t> sp, E tag, Span<const uint8_t> *next)
186 if (UNLIKELY(sp.Size() == 0U)) {
190 if (sp[0] == static_cast<uint8_t>(tag)) {
191 sp = sp.SubSpan(1);
192 T value = static_cast<T>(Read<sizeof(T)>(&sp));
193 *next = sp;
196 *next = sp;
202 inline void EnumerateTaggedValues(Span<const uint8_t> sp, E tag, Callback cb, Span<const uint8_t> *next)
204 while (sp.Size() > 0U && sp[0] == static_cast<uint8_t>(tag)) {
205 sp = sp.SubSpan(1);
206 T value(Read<sizeof(T)>(&sp));
214 *next = sp;
218 inline bool EnumerateTaggedValuesWithEarlyStop(Span<const uint8_t> sp, E tag, Callback cb)
220 while (sp.Size() > 0U && sp[0] == static_cast<uint8_t>(tag)) {
221 sp = sp.SubSpan(1);
222 T value(Read<sizeof(T)>(&sp));