Coverage Report

Created: 2023-09-25 06:13

/src/msgpack-c/include/msgpack/v3/unpack.hpp
Line
Count
Source (jump to first uncovered line)
1
//
2
// MessagePack for C++ deserializing routine
3
//
4
// Copyright (C) 2018 KONDO Takatoshi
5
//
6
//    Distributed under the Boost Software License, Version 1.0.
7
//    (See accompanying file LICENSE_1_0.txt or copy at
8
//    http://www.boost.org/LICENSE_1_0.txt)
9
//
10
#ifndef MSGPACK_V3_UNPACK_HPP
11
#define MSGPACK_V3_UNPACK_HPP
12
13
#include "msgpack/unpack_decl.hpp"
14
#include "msgpack/parse.hpp"
15
#include "msgpack/create_object_visitor.hpp"
16
17
namespace msgpack {
18
19
/// @cond
20
MSGPACK_API_VERSION_NAMESPACE(v3) {
21
/// @endcond
22
23
inline msgpack::object_handle unpack(
24
    const char* data, std::size_t len, std::size_t& off, bool& referenced,
25
    msgpack::unpack_reference_func f, void* user_data,
26
    msgpack::unpack_limit const& limit
27
)
28
2.25k
{
29
2.25k
    msgpack::object obj;
30
2.25k
    msgpack::unique_ptr<msgpack::zone> z(new msgpack::zone);
31
2.25k
    referenced = false;
32
2.25k
    parse_return ret = detail::unpack_imp(
33
2.25k
        data, len, off, *z, obj, referenced, f, user_data, limit);
34
35
2.25k
    switch(ret) {
36
1.14k
    case PARSE_SUCCESS:
37
1.14k
        return msgpack::object_handle(obj, msgpack::move(z));
38
50
    case PARSE_EXTRA_BYTES:
39
50
        return msgpack::object_handle(obj, msgpack::move(z));
40
0
    default:
41
0
        break;
42
2.25k
    }
43
0
    return msgpack::object_handle();
44
2.25k
}
45
46
inline msgpack::object_handle unpack(
47
    const char* data, std::size_t len, std::size_t& off,
48
    msgpack::unpack_reference_func f, void* user_data,
49
    msgpack::unpack_limit const& limit)
50
0
{
51
0
    bool referenced;
52
0
    return msgpack::v3::unpack(data, len, off, referenced, f, user_data, limit);
53
0
}
54
55
inline msgpack::object_handle unpack(
56
    const char* data, std::size_t len, bool& referenced,
57
    msgpack::unpack_reference_func f, void* user_data,
58
    msgpack::unpack_limit const& limit)
59
0
{
60
0
    std::size_t off = 0;
61
0
    return msgpack::v3::unpack(data, len, off, referenced, f, user_data, limit);
62
0
}
63
64
inline msgpack::object_handle unpack(
65
    const char* data, std::size_t len,
66
    msgpack::unpack_reference_func f, void* user_data,
67
    msgpack::unpack_limit const& limit)
68
2.25k
{
69
2.25k
    bool referenced;
70
2.25k
    std::size_t off = 0;
71
2.25k
    return msgpack::v3::unpack(data, len, off, referenced, f, user_data, limit);
72
2.25k
}
73
74
inline void unpack(
75
    msgpack::object_handle& result,
76
    const char* data, std::size_t len, std::size_t& off, bool& referenced,
77
    msgpack::unpack_reference_func f, void* user_data,
78
    msgpack::unpack_limit const& limit)
79
0
{
80
0
    msgpack::object obj;
81
0
    msgpack::unique_ptr<msgpack::zone> z(new msgpack::zone);
82
0
    referenced = false;
83
0
    parse_return ret = detail::unpack_imp(
84
0
        data, len, off, *z, obj, referenced, f, user_data, limit);
85
0
86
0
    switch(ret) {
87
0
    case PARSE_SUCCESS:
88
0
        result.set(obj);
89
0
        result.zone() = msgpack::move(z);
90
0
        return;
91
0
    case PARSE_EXTRA_BYTES:
92
0
        result.set(obj);
93
0
        result.zone() = msgpack::move(z);
94
0
        return;
95
0
    default:
96
0
        return;
97
0
    }
98
0
}
99
100
inline void unpack(
101
    msgpack::object_handle& result,
102
    const char* data, std::size_t len, std::size_t& off,
103
    msgpack::v3::unpack_reference_func f, void* user_data,
104
            msgpack::unpack_limit const& limit)
105
0
{
106
0
    bool referenced;
107
0
    msgpack::v3::unpack(result, data, len, off, referenced, f, user_data, limit);
108
0
}
109
110
inline void unpack(
111
    msgpack::object_handle& result,
112
    const char* data, std::size_t len, bool& referenced,
113
    msgpack::unpack_reference_func f, void* user_data,
114
    msgpack::unpack_limit const& limit)
115
0
{
116
0
    std::size_t off = 0;
117
0
    msgpack::v3::unpack(result, data, len, off, referenced, f, user_data, limit);
118
0
}
119
120
inline void unpack(
121
    msgpack::object_handle& result,
122
    const char* data, std::size_t len,
123
    msgpack::unpack_reference_func f, void* user_data,
124
    msgpack::unpack_limit const& limit)
125
0
{
126
0
    bool referenced;
127
0
    std::size_t off = 0;
128
0
    msgpack::v3::unpack(result, data, len, off, referenced, f, user_data, limit);
129
0
}
130
131
132
inline msgpack::object unpack(
133
    msgpack::zone& z,
134
    const char* data, std::size_t len, std::size_t& off, bool& referenced,
135
    msgpack::unpack_reference_func f, void* user_data,
136
    msgpack::unpack_limit const& limit)
137
0
{
138
0
    msgpack::object obj;
139
0
    referenced = false;
140
0
    parse_return ret = detail::unpack_imp(
141
0
        data, len, off, z, obj, referenced, f, user_data, limit);
142
0
143
0
    switch(ret) {
144
0
    case PARSE_SUCCESS:
145
0
        return obj;
146
0
    case PARSE_EXTRA_BYTES:
147
0
        return obj;
148
0
    default:
149
0
        break;
150
0
    }
151
0
    return obj;
152
0
}
153
154
inline msgpack::object unpack(
155
    msgpack::zone& z,
156
    const char* data, std::size_t len, std::size_t& off,
157
    msgpack::unpack_reference_func f, void* user_data,
158
    msgpack::unpack_limit const& limit)
159
0
{
160
0
    bool referenced;
161
0
    return msgpack::v3::unpack(z, data, len, off, referenced, f, user_data, limit);
162
0
}
163
164
inline msgpack::object unpack(
165
    msgpack::zone& z,
166
    const char* data, std::size_t len, bool& referenced,
167
    msgpack::unpack_reference_func f, void* user_data,
168
    msgpack::unpack_limit const& limit)
169
0
{
170
0
    std::size_t off = 0;
171
0
    return msgpack::v3::unpack(z, data, len, off, referenced, f, user_data, limit);
172
0
}
173
174
inline msgpack::object unpack(
175
    msgpack::zone& z,
176
    const char* data, std::size_t len,
177
    msgpack::unpack_reference_func f, void* user_data,
178
    msgpack::unpack_limit const& limit)
179
0
{
180
0
    bool referenced;
181
0
    std::size_t off = 0;
182
0
    return msgpack::v3::unpack(z, data, len, off, referenced, f, user_data, limit);
183
0
}
184
185
/// @cond
186
}  // MSGPACK_API_VERSION_NAMESPACE(v3)
187
/// @endcond
188
189
}  // namespace msgpack
190
191
192
#endif // MSGPACK_V3_UNPACK_HPP