Line | Branch | Exec | Source |
---|---|---|---|
1 | /* | ||
2 | * Copyright (c) 2024 Muhammad Nawaz | ||
3 | * Licensed under the MIT License. See LICENSE file for more information. | ||
4 | */ | ||
5 | // [ END OF LICENSE c6bd0f49d040fca8d8a9cb05868e66aa63f0e2e0 ] | ||
6 | |||
7 | #ifndef OBJECT_DESERIALIZER_HPP | ||
8 | #define OBJECT_DESERIALIZER_HPP | ||
9 | |||
10 | #include "deserializers/base_deserializer.hpp" | ||
11 | #include <unordered_map> | ||
12 | |||
13 | using ObjKTMap = std::unordered_map<std::string, PrimitiveType>; // Object Key-name to PrimitiveType | ||
14 | |||
15 | class ObjectDeserializer final: public BaseDeserializer | ||
16 | { | ||
17 | public: | ||
18 | explicit ObjectDeserializer(const std::string& param_name, char start, bool skip_name, char kv_separator, | ||
19 | char vk_separator, bool is_deep_obj, const ObjKTMap& kt_map); | ||
20 | |||
21 | std::string Deserialize(const char* beg, const char* const end) override; | ||
22 | 60 | ~ObjectDeserializer() override = default; | |
23 | |||
24 | private: | ||
25 | const char kv_separator_; // key-value separator | ||
26 | const char vk_separator_; // value-key separator | ||
27 | const bool is_deep_obj_; | ||
28 | const ObjKTMap kt_map_; // key-type map | ||
29 | |||
30 | 123 | inline void DeserializeKey(const char*& cursor, const char* const end, const char terminator, | |
31 | std::string& key) const | ||
32 | { | ||
33 | 123 | key.push_back('"'); | |
34 |
4/4✓ Branch 0 taken 1027 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 906 times.
✓ Branch 3 taken 121 times.
|
1029 | while (cursor < end && *cursor != terminator) { |
35 | 906 | key.push_back(*cursor); | |
36 | 906 | ++cursor; | |
37 | } | ||
38 |
3/4✓ Branch 0 taken 121 times.
✓ Branch 1 taken 2 times.
✓ Branch 2 taken 121 times.
✗ Branch 3 not taken.
|
123 | if (cursor < end && *cursor == terminator) { |
39 | 121 | ++cursor; | |
40 | } | ||
41 | 123 | key.push_back('"'); | |
42 | 123 | } | |
43 | }; | ||
44 | |||
45 | #endif // OBJECT_DESERIALIZER_HPP | ||
46 |