Monero
Toggle main menu visibility
Loading...
Searching...
No Matches
src
serialization
tuple.h
Go to the documentation of this file.
1
// Copyright (c) 2014-2020, The Monero Project
2
//
3
// All rights reserved.
4
//
5
// Redistribution and use in source and binary forms, with or without modification, are
6
// permitted provided that the following conditions are met:
7
//
8
// 1. Redistributions of source code must retain the above copyright notice, this list of
9
// conditions and the following disclaimer.
10
//
11
// 2. Redistributions in binary form must reproduce the above copyright notice, this list
12
// of conditions and the following disclaimer in the documentation and/or other
13
// materials provided with the distribution.
14
//
15
// 3. Neither the name of the copyright holder nor the names of its contributors may be
16
// used to endorse or promote products derived from this software without specific
17
// prior written permission.
18
//
19
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
20
// EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
21
// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
22
// THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24
// PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
25
// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
26
// STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
27
// THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
//
29
// Parts of this file are originally copyright (c) 2012-2013 The Cryptonote developers
30
31
#pragma once
32
#include <memory>
33
#include "
serialization.h
"
34
35
namespace
serialization
36
{
37
namespace
detail
38
{
39
template
<
typename
Archive,
class
T>
40
bool
serialize_tuple_element
(Archive&
ar
,
T
& e)
41
{
42
return
do_serialize
(
ar
, e);
43
}
44
45
template
<
typename
Archive>
46
bool
serialize_tuple_element
(Archive&
ar
,
uint64_t
& e)
47
{
48
ar
.serialize_varint(e);
49
return
true
;
50
}
51
}
52
}
53
54
template
<
template
<
bool
>
class
Archive,
class
E0,
class
E1,
class
E2>
55
inline
bool
do_serialize
(Archive<false>&
ar
, std::tuple<E0,E1,E2>& p)
56
{
57
size_t
cnt;
58
ar
.begin_array(cnt);
59
if
(!
ar
.good())
60
return
false
;
61
if
(cnt != 3)
62
return
false
;
63
64
if
(!
::serialization::detail::serialize_tuple_element
(
ar
, std::get<0>(p)))
65
return
false
;
66
if
(!
ar
.good())
67
return
false
;
68
ar
.delimit_array();
69
if
(!
::serialization::detail::serialize_tuple_element
(
ar
, std::get<1>(p)))
70
return
false
;
71
if
(!
ar
.good())
72
return
false
;
73
ar
.delimit_array();
74
if
(!
::serialization::detail::serialize_tuple_element
(
ar
, std::get<2>(p)))
75
return
false
;
76
if
(!
ar
.good())
77
return
false
;
78
79
ar
.end_array();
80
return
true
;
81
}
82
83
template
<
template
<
bool
>
class
Archive,
class
E0,
class
E1,
class
E2>
84
inline
bool
do_serialize
(Archive<true>&
ar
, std::tuple<E0,E1,E2>& p)
85
{
86
ar
.begin_array(3);
87
if
(!
ar
.good())
88
return
false
;
89
if
(!
::serialization::detail::serialize_tuple_element
(
ar
, std::get<0>(p)))
90
return
false
;
91
if
(!
ar
.good())
92
return
false
;
93
ar
.delimit_array();
94
if
(!
::serialization::detail::serialize_tuple_element
(
ar
, std::get<1>(p)))
95
return
false
;
96
if
(!
ar
.good())
97
return
false
;
98
ar
.delimit_array();
99
if
(!
::serialization::detail::serialize_tuple_element
(
ar
, std::get<2>(p)))
100
return
false
;
101
if
(!
ar
.good())
102
return
false
;
103
ar
.end_array();
104
return
true
;
105
}
106
107
template
<
template
<
bool
>
class
Archive,
class
E0,
class
E1,
class
E2,
class
E3>
108
inline
bool
do_serialize
(Archive<false>&
ar
, std::tuple<E0,E1,E2,E3>& p)
109
{
110
size_t
cnt;
111
ar
.begin_array(cnt);
112
if
(!
ar
.good())
113
return
false
;
114
if
(cnt != 4)
115
return
false
;
116
117
if
(!
::serialization::detail::serialize_tuple_element
(
ar
, std::get<0>(p)))
118
return
false
;
119
if
(!
ar
.good())
120
return
false
;
121
ar
.delimit_array();
122
if
(!
::serialization::detail::serialize_tuple_element
(
ar
, std::get<1>(p)))
123
return
false
;
124
if
(!
ar
.good())
125
return
false
;
126
ar
.delimit_array();
127
if
(!
::serialization::detail::serialize_tuple_element
(
ar
, std::get<2>(p)))
128
return
false
;
129
if
(!
ar
.good())
130
return
false
;
131
ar
.delimit_array();
132
if
(!
::serialization::detail::serialize_tuple_element
(
ar
, std::get<3>(p)))
133
return
false
;
134
if
(!
ar
.good())
135
return
false
;
136
137
ar
.end_array();
138
return
true
;
139
}
140
141
template
<
template
<
bool
>
class
Archive,
class
E0,
class
E1,
class
E2,
class
E3>
142
inline
bool
do_serialize
(Archive<true>&
ar
, std::tuple<E0,E1,E2,E3>& p)
143
{
144
ar
.begin_array(4);
145
if
(!
ar
.good())
146
return
false
;
147
if
(!
::serialization::detail::serialize_tuple_element
(
ar
, std::get<0>(p)))
148
return
false
;
149
if
(!
ar
.good())
150
return
false
;
151
ar
.delimit_array();
152
if
(!
::serialization::detail::serialize_tuple_element
(
ar
, std::get<1>(p)))
153
return
false
;
154
if
(!
ar
.good())
155
return
false
;
156
ar
.delimit_array();
157
if
(!
::serialization::detail::serialize_tuple_element
(
ar
, std::get<2>(p)))
158
return
false
;
159
if
(!
ar
.good())
160
return
false
;
161
ar
.delimit_array();
162
if
(!
::serialization::detail::serialize_tuple_element
(
ar
, std::get<3>(p)))
163
return
false
;
164
if
(!
ar
.good())
165
return
false
;
166
ar
.end_array();
167
return
true
;
168
}
169
ar
binary_archive< false > ar
Definition
cold-outputs.cpp:54
do_serialize
bool do_serialize(Archive< false > &ar, std::vector< T > &v)
Definition
containers.h:108
serialization::detail
Definition
container.h:40
serialization::detail::serialize_tuple_element
bool serialize_tuple_element(Archive &ar, T &e)
Definition
tuple.h:40
serialization
Definition
binary_utils.h:36
serialization.h
Simple DSL AAPI based on.
uint64_t
unsigned __int64 uint64_t
Definition
stdint.h:136
do_serialize
bool do_serialize(Archive< false > &ar, std::tuple< E0, E1, E2 > &p)
Definition
tuple.h:55
T
#define T(x)
Generated on
for Monero by
1.17.0