@@ -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