Skip to content

Commit b0fa974

Browse files
author
me
committed
got rid of peak(). Had to add a few overloads but never mind. Slowly go back to lambdas for Stream and Source. 💪
1 parent 6a9d253 commit b0fa974

File tree

3 files changed

+152
-98
lines changed

3 files changed

+152
-98
lines changed

src/msgpack.cpp

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -155,61 +155,62 @@ namespace msgpackcpp
155155

156156
void value::unpack(source_base& in)
157157
{
158-
const uint8_t format = in.peak();
158+
uint8_t format{};
159+
in.read((char*)&format, 1);
159160

160161
if (format == MSGPACK_NIL)
161162
{
162-
deserialize(in, nullptr);
163+
/*no-op*/
163164
}
164-
else if (format == MSGPACK_FALSE || format == MSGPACK_TRUE)
165+
else if (format_is_bool(format))
165166
{
166167
bool v{};
167-
deserialize(in, v);
168+
deserialize_(in, format, v);
168169
val = v;
169170
}
170-
else if (format == MSGPACK_F32 || format == MSGPACK_F64)
171+
else if (format_is_float(format))
171172
{
172173
double v{};
173-
deserialize(in, v);
174+
deserialize_(in, format, v);
174175
val = v;
175176
}
176-
else if (format < MSGPACK_FIXINT_POS || format == MSGPACK_U8 || format == MSGPACK_U16 || format == MSGPACK_U32 || format == MSGPACK_U64)
177+
else if (format_is_uint(format))
177178
{
178179
uint64_t v{};
179-
deserialize(in, v);
180+
deserialize_(in, format, v);
180181
val = v;
181182
}
182-
else if ((format & 0b11100000) == MSGPACK_FIXINT_NEG || format == MSGPACK_I8 || format == MSGPACK_I16 || format == MSGPACK_I32 || format == MSGPACK_I64)
183+
else if (format_is_sint(format))
183184
{
184185
int64_t v{};
185-
deserialize(in, v);
186+
deserialize_(in, format, v);
186187
val = v;
187188
}
188-
else if ((format & 0b11100000) == MSGPACK_FIXSTR || format == MSGPACK_STR8 || format == MSGPACK_STR16 || format == MSGPACK_STR32)
189+
else if (format_is_string(format))
189190
{
190191
std::string v;
191-
deserialize(in, v);
192+
deserialize_(in, format, v);
192193
val = std::move(v);
193194
}
194-
else if (format == MSGPACK_BIN8 || format == MSGPACK_BIN16 || format == MSGPACK_BIN32)
195+
else if (format_is_binary(format))
195196
{
196197
std::vector<char> v;
197-
deserialize(in, v);
198+
deserialize_(in, format, v);
198199
val = std::move(v);
199200
}
200-
else if ((format & 0b11110000) == MSGPACK_FIXARR || format == MSGPACK_ARR16 || format == MSGPACK_ARR32)
201+
else if (format_is_array(format))
201202
{
202203
uint32_t size{};
203-
deserialize_array_size(in, size);
204+
deserialize_array_size_(in, format, size);
204205
std::vector<value> v(size);
205206
for (auto& el : v)
206207
el.unpack(in);
207208
val = std::move(v);
208209
}
209-
else if ((format & 0b11110000) == MSGPACK_FIXMAP || format == MSGPACK_MAP16 || format == MSGPACK_MAP32)
210+
else if (format_is_map(format))
210211
{
211212
uint32_t size{};
212-
deserialize_map_size(in, size);
213+
deserialize_map_size_(in, format, size);
213214
std::map<std::string, value> m;
214215
for (size_t i{0} ; i < size ; ++i)
215216
{

0 commit comments

Comments
 (0)