Coverage Report

Created: 2026-04-29 06:59

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/msgpack-c/include/msgpack/v1/adaptor/v4raw.hpp
Line
Count
Source
1
//
2
// MessagePack for C++ static resolution routine
3
//
4
// Copyright (C) 2008-2016 FURUHASHI Sadayuki and 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_V1_TYPE_V4RAW_HPP
11
#define MSGPACK_V1_TYPE_V4RAW_HPP
12
13
#include "msgpack/v1/adaptor/v4raw_decl.hpp"
14
#include <cstring>
15
#include <string>
16
17
namespace msgpack {
18
19
/// @cond
20
MSGPACK_API_VERSION_NAMESPACE(v1) {
21
/// @endcond
22
23
namespace type {
24
25
struct v4raw_ref {
26
0
    v4raw_ref() : size(0), ptr(MSGPACK_NULLPTR) {}
27
0
    v4raw_ref(const char* p, uint32_t s) : size(s), ptr(p) {}
28
29
    uint32_t size;
30
    const char* ptr;
31
32
0
    std::string str() const { return std::string(ptr, size); }
33
34
    bool operator== (const v4raw_ref& x) const
35
0
    {
36
0
        return size == x.size && (size == 0 || std::memcmp(ptr, x.ptr, size) == 0);
37
0
    }
38
39
    bool operator!= (const v4raw_ref& x) const
40
0
    {
41
0
        return !(*this == x);
42
0
    }
43
44
    bool operator< (const v4raw_ref& x) const
45
0
    {
46
0
        if(size == x.size) { return std::memcmp(ptr, x.ptr, size) < 0; }
47
0
        else { return size < x.size; }
48
0
    }
49
50
    bool operator> (const v4raw_ref& x) const
51
0
    {
52
0
        if(size == x.size) { return std::memcmp(ptr, x.ptr, size) > 0; }
53
0
        else { return size > x.size; }
54
0
    }
55
};
56
57
} // namespace type
58
59
namespace adaptor {
60
61
template <>
62
struct convert<type::v4raw_ref> {
63
0
    msgpack::object const& operator()(msgpack::object const& o, type::v4raw_ref& v) const {
64
0
        if(o.type != msgpack::type::STR) { throw msgpack::type_error(); }
65
0
        v.ptr  = o.via.str.ptr;
66
0
        v.size = o.via.str.size;
67
0
        return o;
68
0
    }
69
};
70
71
template <>
72
struct pack<type::v4raw_ref> {
73
    template <typename Stream>
74
    msgpack::packer<Stream>& operator()(msgpack::packer<Stream>& o, const type::v4raw_ref& v) const {
75
        o.pack_v4raw(v.size);
76
        o.pack_v4raw_body(v.ptr, v.size);
77
        return o;
78
    }
79
};
80
81
template <>
82
struct object<type::v4raw_ref> {
83
0
    void operator()(msgpack::object& o, const type::v4raw_ref& v) const {
84
0
        o.type = msgpack::type::STR;
85
0
        o.via.str.ptr = v.ptr;
86
0
        o.via.str.size = v.size;
87
0
    }
88
};
89
90
template <>
91
struct object_with_zone<type::v4raw_ref> {
92
0
    void operator()(msgpack::object::with_zone& o, const type::v4raw_ref& v) const {
93
0
        static_cast<msgpack::object&>(o) << v;
94
0
    }
95
};
96
97
} // namespace adaptor
98
99
/// @cond
100
} // MSGPACK_API_VERSION_NAMESPACE(v1)
101
/// @endcond
102
103
} // namespace msgpack
104
105
#endif // MSGPACK_V1_TYPE_V4RAW_HPP