cpp-msgpack-light 0.3.0
A light library to serialize MessagePack.
Loading...
Searching...
No Matches
object_helper.h
Go to the documentation of this file.
1/*
2 * Copyright 2024 MusicScience37 (Kenta Kabashima)
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
20#pragma once
21
22#include <cstring>
23
27
28namespace msgpack_light::details {
29
37template <typename Allocator>
39 object_data& data, allocator_wrapper<Allocator>& allocator) noexcept {
40 switch (data.type) {
42 allocator.deallocate_char(data.data.string_value.data);
43 break;
45 allocator.deallocate_unsigned_char(data.data.binary_value.data);
46 break;
48 for (std::size_t i = 0; i < data.data.array_value.size; ++i) {
49 clear_object_data(data.data.array_value.data[i], allocator);
50 }
51 allocator.deallocate_object_data(data.data.array_value.data);
52 break;
54 for (std::size_t i = 0; i < data.data.map_value.size; ++i) {
55 clear_object_data(data.data.map_value.data[i].key, allocator);
56 clear_object_data(data.data.map_value.data[i].value, allocator);
57 }
58 allocator.deallocate_key_value_pair_data(data.data.map_value.data);
59 break;
61 allocator.deallocate_unsigned_char(data.data.extension_value.data);
62 break;
63 default:
64 break;
65 };
66 data.type = object_data_type::nil;
67}
68
77template <typename Allocator>
78inline void copy_object_data(object_data& to, const object_data& from,
80 switch (from.type) {
83 allocator.allocate_char(from.data.string_value.size);
84 std::memcpy(to.data.string_value.data, from.data.string_value.data,
88 break;
92 std::memcpy(to.data.binary_value.data, from.data.binary_value.data,
96 break;
102 for (std::size_t i = 0; i < from.data.array_value.size; ++i) {
104 from.data.array_value.data[i], allocator);
105 }
106 break;
108 to.data.map_value.data =
112 for (std::size_t i = 0; i < from.data.map_value.size; ++i) {
114 from.data.map_value.data[i].key, allocator);
116 from.data.map_value.data[i].value, allocator);
117 }
118 break;
122 std::memcpy(to.data.extension_value.data,
127 break;
128 default:
129 to = from;
130 break;
131 };
132}
133
134} // namespace msgpack_light::details
Definition of allocator_wrapper class.
char * allocate_char(std::size_t size)
Allocate char instances.
object_data * allocate_object_data(std::size_t size)
Allocate object data.
key_value_pair_data * allocate_key_value_pair_data(std::size_t size)
Allocate key-value pair data.
unsigned char * allocate_unsigned_char(std::size_t size)
Allocate unsigned char instances.
Namespace of internal implementations.
Definition binary.h:35
void copy_object_data(object_data &to, const object_data &from, allocator_wrapper< Allocator > &allocator)
Copy data.
void clear_object_data(object_data &data, allocator_wrapper< Allocator > &allocator) noexcept
Clear data.
Definition of object_data struct.
Definition of object_type enumeration.
std::size_t size
Size of the data.
Definition object_data.h:61
std::size_t size
Size of the data.
Definition object_data.h:50
std::size_t size
Size of the data.
Definition object_data.h:88
std::size_t size
Size of the data.
Definition object_data.h:74
key_value_pair_data * data
Data.
Definition object_data.h:71
Struct of data of objects in MessagePack.
Definition object_data.h:94
extension_data extension_value
Extension.
union msgpack_light::details::object_data::@227127335344143142004214331276031357231211344336 data
Data.
object_data_type type
Type of the data.
std::size_t size
Size of the data.
Definition object_data.h:39