isotree 0.2.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +8 -1
- data/LICENSE.txt +2 -2
- data/README.md +32 -14
- data/ext/isotree/ext.cpp +144 -31
- data/ext/isotree/extconf.rb +7 -7
- data/lib/isotree/isolation_forest.rb +110 -30
- data/lib/isotree/version.rb +1 -1
- data/vendor/isotree/LICENSE +1 -1
- data/vendor/isotree/README.md +165 -27
- data/vendor/isotree/include/isotree.hpp +2111 -0
- data/vendor/isotree/include/isotree_oop.hpp +394 -0
- data/vendor/isotree/inst/COPYRIGHTS +62 -0
- data/vendor/isotree/src/RcppExports.cpp +525 -52
- data/vendor/isotree/src/Rwrapper.cpp +1931 -268
- data/vendor/isotree/src/c_interface.cpp +953 -0
- data/vendor/isotree/src/crit.hpp +4232 -0
- data/vendor/isotree/src/dist.hpp +1886 -0
- data/vendor/isotree/src/exp_depth_table.hpp +134 -0
- data/vendor/isotree/src/extended.hpp +1444 -0
- data/vendor/isotree/src/external_facing_generic.hpp +399 -0
- data/vendor/isotree/src/fit_model.hpp +2401 -0
- data/vendor/isotree/src/{dealloc.cpp → headers_joined.hpp} +38 -22
- data/vendor/isotree/src/helpers_iforest.hpp +813 -0
- data/vendor/isotree/src/{impute.cpp → impute.hpp} +353 -122
- data/vendor/isotree/src/indexer.cpp +515 -0
- data/vendor/isotree/src/instantiate_template_headers.cpp +118 -0
- data/vendor/isotree/src/instantiate_template_headers.hpp +240 -0
- data/vendor/isotree/src/isoforest.hpp +1659 -0
- data/vendor/isotree/src/isotree.hpp +1804 -392
- data/vendor/isotree/src/isotree_exportable.hpp +99 -0
- data/vendor/isotree/src/merge_models.cpp +159 -16
- data/vendor/isotree/src/mult.hpp +1321 -0
- data/vendor/isotree/src/oop_interface.cpp +842 -0
- data/vendor/isotree/src/oop_interface.hpp +278 -0
- data/vendor/isotree/src/other_helpers.hpp +219 -0
- data/vendor/isotree/src/predict.hpp +1932 -0
- data/vendor/isotree/src/python_helpers.hpp +134 -0
- data/vendor/isotree/src/ref_indexer.hpp +154 -0
- data/vendor/isotree/src/robinmap/LICENSE +21 -0
- data/vendor/isotree/src/robinmap/README.md +483 -0
- data/vendor/isotree/src/robinmap/include/tsl/robin_growth_policy.h +406 -0
- data/vendor/isotree/src/robinmap/include/tsl/robin_hash.h +1620 -0
- data/vendor/isotree/src/robinmap/include/tsl/robin_map.h +807 -0
- data/vendor/isotree/src/robinmap/include/tsl/robin_set.h +660 -0
- data/vendor/isotree/src/serialize.cpp +4300 -139
- data/vendor/isotree/src/sql.cpp +141 -59
- data/vendor/isotree/src/subset_models.cpp +174 -0
- data/vendor/isotree/src/utils.hpp +3808 -0
- data/vendor/isotree/src/xoshiro.hpp +467 -0
- data/vendor/isotree/src/ziggurat.hpp +405 -0
- metadata +38 -104
- data/vendor/cereal/LICENSE +0 -24
- data/vendor/cereal/README.md +0 -85
- data/vendor/cereal/include/cereal/access.hpp +0 -351
- data/vendor/cereal/include/cereal/archives/adapters.hpp +0 -163
- data/vendor/cereal/include/cereal/archives/binary.hpp +0 -169
- data/vendor/cereal/include/cereal/archives/json.hpp +0 -1019
- data/vendor/cereal/include/cereal/archives/portable_binary.hpp +0 -334
- data/vendor/cereal/include/cereal/archives/xml.hpp +0 -956
- data/vendor/cereal/include/cereal/cereal.hpp +0 -1089
- data/vendor/cereal/include/cereal/details/helpers.hpp +0 -422
- data/vendor/cereal/include/cereal/details/polymorphic_impl.hpp +0 -796
- data/vendor/cereal/include/cereal/details/polymorphic_impl_fwd.hpp +0 -65
- data/vendor/cereal/include/cereal/details/static_object.hpp +0 -127
- data/vendor/cereal/include/cereal/details/traits.hpp +0 -1411
- data/vendor/cereal/include/cereal/details/util.hpp +0 -84
- data/vendor/cereal/include/cereal/external/base64.hpp +0 -134
- data/vendor/cereal/include/cereal/external/rapidjson/allocators.h +0 -284
- data/vendor/cereal/include/cereal/external/rapidjson/cursorstreamwrapper.h +0 -78
- data/vendor/cereal/include/cereal/external/rapidjson/document.h +0 -2652
- data/vendor/cereal/include/cereal/external/rapidjson/encodedstream.h +0 -299
- data/vendor/cereal/include/cereal/external/rapidjson/encodings.h +0 -716
- data/vendor/cereal/include/cereal/external/rapidjson/error/en.h +0 -74
- data/vendor/cereal/include/cereal/external/rapidjson/error/error.h +0 -161
- data/vendor/cereal/include/cereal/external/rapidjson/filereadstream.h +0 -99
- data/vendor/cereal/include/cereal/external/rapidjson/filewritestream.h +0 -104
- data/vendor/cereal/include/cereal/external/rapidjson/fwd.h +0 -151
- data/vendor/cereal/include/cereal/external/rapidjson/internal/biginteger.h +0 -290
- data/vendor/cereal/include/cereal/external/rapidjson/internal/diyfp.h +0 -271
- data/vendor/cereal/include/cereal/external/rapidjson/internal/dtoa.h +0 -245
- data/vendor/cereal/include/cereal/external/rapidjson/internal/ieee754.h +0 -78
- data/vendor/cereal/include/cereal/external/rapidjson/internal/itoa.h +0 -308
- data/vendor/cereal/include/cereal/external/rapidjson/internal/meta.h +0 -186
- data/vendor/cereal/include/cereal/external/rapidjson/internal/pow10.h +0 -55
- data/vendor/cereal/include/cereal/external/rapidjson/internal/regex.h +0 -740
- data/vendor/cereal/include/cereal/external/rapidjson/internal/stack.h +0 -232
- data/vendor/cereal/include/cereal/external/rapidjson/internal/strfunc.h +0 -69
- data/vendor/cereal/include/cereal/external/rapidjson/internal/strtod.h +0 -290
- data/vendor/cereal/include/cereal/external/rapidjson/internal/swap.h +0 -46
- data/vendor/cereal/include/cereal/external/rapidjson/istreamwrapper.h +0 -128
- data/vendor/cereal/include/cereal/external/rapidjson/memorybuffer.h +0 -70
- data/vendor/cereal/include/cereal/external/rapidjson/memorystream.h +0 -71
- data/vendor/cereal/include/cereal/external/rapidjson/msinttypes/inttypes.h +0 -316
- data/vendor/cereal/include/cereal/external/rapidjson/msinttypes/stdint.h +0 -300
- data/vendor/cereal/include/cereal/external/rapidjson/ostreamwrapper.h +0 -81
- data/vendor/cereal/include/cereal/external/rapidjson/pointer.h +0 -1414
- data/vendor/cereal/include/cereal/external/rapidjson/prettywriter.h +0 -277
- data/vendor/cereal/include/cereal/external/rapidjson/rapidjson.h +0 -656
- data/vendor/cereal/include/cereal/external/rapidjson/reader.h +0 -2230
- data/vendor/cereal/include/cereal/external/rapidjson/schema.h +0 -2497
- data/vendor/cereal/include/cereal/external/rapidjson/stream.h +0 -223
- data/vendor/cereal/include/cereal/external/rapidjson/stringbuffer.h +0 -121
- data/vendor/cereal/include/cereal/external/rapidjson/writer.h +0 -709
- data/vendor/cereal/include/cereal/external/rapidxml/license.txt +0 -52
- data/vendor/cereal/include/cereal/external/rapidxml/manual.html +0 -406
- data/vendor/cereal/include/cereal/external/rapidxml/rapidxml.hpp +0 -2624
- data/vendor/cereal/include/cereal/external/rapidxml/rapidxml_iterators.hpp +0 -175
- data/vendor/cereal/include/cereal/external/rapidxml/rapidxml_print.hpp +0 -428
- data/vendor/cereal/include/cereal/external/rapidxml/rapidxml_utils.hpp +0 -123
- data/vendor/cereal/include/cereal/macros.hpp +0 -154
- data/vendor/cereal/include/cereal/specialize.hpp +0 -139
- data/vendor/cereal/include/cereal/types/array.hpp +0 -79
- data/vendor/cereal/include/cereal/types/atomic.hpp +0 -55
- data/vendor/cereal/include/cereal/types/base_class.hpp +0 -203
- data/vendor/cereal/include/cereal/types/bitset.hpp +0 -176
- data/vendor/cereal/include/cereal/types/boost_variant.hpp +0 -164
- data/vendor/cereal/include/cereal/types/chrono.hpp +0 -72
- data/vendor/cereal/include/cereal/types/common.hpp +0 -129
- data/vendor/cereal/include/cereal/types/complex.hpp +0 -56
- data/vendor/cereal/include/cereal/types/concepts/pair_associative_container.hpp +0 -73
- data/vendor/cereal/include/cereal/types/deque.hpp +0 -62
- data/vendor/cereal/include/cereal/types/forward_list.hpp +0 -68
- data/vendor/cereal/include/cereal/types/functional.hpp +0 -43
- data/vendor/cereal/include/cereal/types/list.hpp +0 -62
- data/vendor/cereal/include/cereal/types/map.hpp +0 -36
- data/vendor/cereal/include/cereal/types/memory.hpp +0 -425
- data/vendor/cereal/include/cereal/types/optional.hpp +0 -66
- data/vendor/cereal/include/cereal/types/polymorphic.hpp +0 -483
- data/vendor/cereal/include/cereal/types/queue.hpp +0 -132
- data/vendor/cereal/include/cereal/types/set.hpp +0 -103
- data/vendor/cereal/include/cereal/types/stack.hpp +0 -76
- data/vendor/cereal/include/cereal/types/string.hpp +0 -61
- data/vendor/cereal/include/cereal/types/tuple.hpp +0 -123
- data/vendor/cereal/include/cereal/types/unordered_map.hpp +0 -36
- data/vendor/cereal/include/cereal/types/unordered_set.hpp +0 -99
- data/vendor/cereal/include/cereal/types/utility.hpp +0 -47
- data/vendor/cereal/include/cereal/types/valarray.hpp +0 -89
- data/vendor/cereal/include/cereal/types/variant.hpp +0 -109
- data/vendor/cereal/include/cereal/types/vector.hpp +0 -112
- data/vendor/cereal/include/cereal/version.hpp +0 -52
- data/vendor/isotree/src/Makevars +0 -4
- data/vendor/isotree/src/crit.cpp +0 -912
- data/vendor/isotree/src/dist.cpp +0 -749
- data/vendor/isotree/src/extended.cpp +0 -790
- data/vendor/isotree/src/fit_model.cpp +0 -1090
- data/vendor/isotree/src/helpers_iforest.cpp +0 -324
- data/vendor/isotree/src/isoforest.cpp +0 -771
- data/vendor/isotree/src/mult.cpp +0 -607
- data/vendor/isotree/src/predict.cpp +0 -853
- data/vendor/isotree/src/utils.cpp +0 -1566
|
@@ -1,203 +0,0 @@
|
|
|
1
|
-
/*! \file base_class.hpp
|
|
2
|
-
\brief Support for base classes (virtual and non-virtual)
|
|
3
|
-
\ingroup OtherTypes */
|
|
4
|
-
/*
|
|
5
|
-
Copyright (c) 2014, Randolph Voorhies, Shane Grant
|
|
6
|
-
All rights reserved.
|
|
7
|
-
|
|
8
|
-
Redistribution and use in source and binary forms, with or without
|
|
9
|
-
modification, are permitted provided that the following conditions are met:
|
|
10
|
-
* Redistributions of source code must retain the above copyright
|
|
11
|
-
notice, this list of conditions and the following disclaimer.
|
|
12
|
-
* Redistributions in binary form must reproduce the above copyright
|
|
13
|
-
notice, this list of conditions and the following disclaimer in the
|
|
14
|
-
documentation and/or other materials provided with the distribution.
|
|
15
|
-
* Neither the name of cereal nor the
|
|
16
|
-
names of its contributors may be used to endorse or promote products
|
|
17
|
-
derived from this software without specific prior written permission.
|
|
18
|
-
|
|
19
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
20
|
-
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
21
|
-
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
22
|
-
DISCLAIMED. IN NO EVENT SHALL RANDOLPH VOORHIES OR SHANE GRANT BE LIABLE FOR ANY
|
|
23
|
-
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
24
|
-
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
25
|
-
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
26
|
-
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
27
|
-
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
28
|
-
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
29
|
-
*/
|
|
30
|
-
#ifndef CEREAL_TYPES_BASE_CLASS_HPP_
|
|
31
|
-
#define CEREAL_TYPES_BASE_CLASS_HPP_
|
|
32
|
-
|
|
33
|
-
#include "cereal/details/traits.hpp"
|
|
34
|
-
#include "cereal/details/polymorphic_impl_fwd.hpp"
|
|
35
|
-
|
|
36
|
-
namespace cereal
|
|
37
|
-
{
|
|
38
|
-
namespace base_class_detail
|
|
39
|
-
{
|
|
40
|
-
//! Used to register polymorphic relations and avoid the need to include
|
|
41
|
-
//! polymorphic.hpp when no polymorphism is used
|
|
42
|
-
/*! @internal */
|
|
43
|
-
template <class Base, class Derived, bool IsPolymorphic = std::is_polymorphic<Base>::value>
|
|
44
|
-
struct RegisterPolymorphicBaseClass
|
|
45
|
-
{
|
|
46
|
-
static void bind()
|
|
47
|
-
{ }
|
|
48
|
-
};
|
|
49
|
-
|
|
50
|
-
//! Polymorphic version
|
|
51
|
-
/*! @internal */
|
|
52
|
-
template <class Base, class Derived>
|
|
53
|
-
struct RegisterPolymorphicBaseClass<Base, Derived, true>
|
|
54
|
-
{
|
|
55
|
-
static void bind()
|
|
56
|
-
{ detail::RegisterPolymorphicCaster<Base, Derived>::bind(); }
|
|
57
|
-
};
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
//! Casts a derived class to its non-virtual base class in a way that safely supports abstract classes
|
|
61
|
-
/*! This should be used in cases when a derived type needs to serialize its base type. This is better than directly
|
|
62
|
-
using static_cast, as it allows for serialization of pure virtual (abstract) base classes.
|
|
63
|
-
|
|
64
|
-
This also automatically registers polymorphic relation between the base and derived class, assuming they
|
|
65
|
-
are indeed polymorphic. Note this is not the same as polymorphic type registration. For more information
|
|
66
|
-
see the documentation on polymorphism. If using a polymorphic class, be sure to include support for
|
|
67
|
-
polymorphism (cereal/types/polymorphic.hpp).
|
|
68
|
-
|
|
69
|
-
\sa virtual_base_class
|
|
70
|
-
|
|
71
|
-
@code{.cpp}
|
|
72
|
-
struct MyBase
|
|
73
|
-
{
|
|
74
|
-
int x;
|
|
75
|
-
|
|
76
|
-
virtual void foo() = 0;
|
|
77
|
-
|
|
78
|
-
template <class Archive>
|
|
79
|
-
void serialize( Archive & ar )
|
|
80
|
-
{
|
|
81
|
-
ar( x );
|
|
82
|
-
}
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
struct MyDerived : public MyBase //<-- Note non-virtual inheritance
|
|
86
|
-
{
|
|
87
|
-
int y;
|
|
88
|
-
|
|
89
|
-
virtual void foo() {};
|
|
90
|
-
|
|
91
|
-
template <class Archive>
|
|
92
|
-
void serialize( Archive & ar )
|
|
93
|
-
{
|
|
94
|
-
ar( cereal::base_class<MyBase>(this) );
|
|
95
|
-
ar( y );
|
|
96
|
-
}
|
|
97
|
-
};
|
|
98
|
-
@endcode */
|
|
99
|
-
template<class Base>
|
|
100
|
-
struct base_class : private traits::detail::BaseCastBase
|
|
101
|
-
{
|
|
102
|
-
template<class Derived>
|
|
103
|
-
base_class(Derived const * derived) :
|
|
104
|
-
base_ptr(const_cast<Base*>(static_cast<Base const *>(derived)))
|
|
105
|
-
{
|
|
106
|
-
static_assert( std::is_base_of<Base, Derived>::value, "Can only use base_class on a valid base class" );
|
|
107
|
-
base_class_detail::RegisterPolymorphicBaseClass<Base, Derived>::bind();
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
Base * base_ptr;
|
|
111
|
-
};
|
|
112
|
-
|
|
113
|
-
//! Casts a derived class to its virtual base class in a way that allows cereal to track inheritance
|
|
114
|
-
/*! This should be used in cases when a derived type features virtual inheritance from some
|
|
115
|
-
base type. This allows cereal to track the inheritance and to avoid making duplicate copies
|
|
116
|
-
during serialization.
|
|
117
|
-
|
|
118
|
-
It is safe to use virtual_base_class in all circumstances for serializing base classes, even in cases
|
|
119
|
-
where virtual inheritance does not take place, though it may be slightly faster to utilize
|
|
120
|
-
cereal::base_class<> if you do not need to worry about virtual inheritance.
|
|
121
|
-
|
|
122
|
-
This also automatically registers polymorphic relation between the base and derived class, assuming they
|
|
123
|
-
are indeed polymorphic. Note this is not the same as polymorphic type registration. For more information
|
|
124
|
-
see the documentation on polymorphism. If using a polymorphic class, be sure to include support for
|
|
125
|
-
polymorphism (cereal/types/polymorphic.hpp).
|
|
126
|
-
|
|
127
|
-
\sa base_class
|
|
128
|
-
|
|
129
|
-
@code{.cpp}
|
|
130
|
-
struct MyBase
|
|
131
|
-
{
|
|
132
|
-
int x;
|
|
133
|
-
|
|
134
|
-
template <class Archive>
|
|
135
|
-
void serialize( Archive & ar )
|
|
136
|
-
{
|
|
137
|
-
ar( x );
|
|
138
|
-
}
|
|
139
|
-
};
|
|
140
|
-
|
|
141
|
-
struct MyLeft : virtual MyBase //<-- Note the virtual inheritance
|
|
142
|
-
{
|
|
143
|
-
int y;
|
|
144
|
-
|
|
145
|
-
template <class Archive>
|
|
146
|
-
void serialize( Archive & ar )
|
|
147
|
-
{
|
|
148
|
-
ar( cereal::virtual_base_class<MyBase>( this ) );
|
|
149
|
-
ar( y );
|
|
150
|
-
}
|
|
151
|
-
};
|
|
152
|
-
|
|
153
|
-
struct MyRight : virtual MyBase
|
|
154
|
-
{
|
|
155
|
-
int z;
|
|
156
|
-
|
|
157
|
-
template <class Archive>
|
|
158
|
-
void serialize( Archive & ar )
|
|
159
|
-
{
|
|
160
|
-
ar( cereal::virtual_base_clas<MyBase>( this ) );
|
|
161
|
-
ar( z );
|
|
162
|
-
}
|
|
163
|
-
};
|
|
164
|
-
|
|
165
|
-
// diamond virtual inheritance; contains one copy of each base class
|
|
166
|
-
struct MyDerived : virtual MyLeft, virtual MyRight
|
|
167
|
-
{
|
|
168
|
-
int a;
|
|
169
|
-
|
|
170
|
-
template <class Archive>
|
|
171
|
-
void serialize( Archive & ar )
|
|
172
|
-
{
|
|
173
|
-
ar( cereal::virtual_base_class<MyLeft>( this ) ); // safely serialize data members in MyLeft
|
|
174
|
-
ar( cereal::virtual_base_class<MyRight>( this ) ); // safely serialize data members in MyRight
|
|
175
|
-
ar( a );
|
|
176
|
-
|
|
177
|
-
// Because we used virtual_base_class, cereal will ensure that only one instance of MyBase is
|
|
178
|
-
// serialized as we traverse the inheritance heirarchy. This means that there will be one copy
|
|
179
|
-
// each of the variables x, y, z, and a
|
|
180
|
-
|
|
181
|
-
// If we had chosen to use static_cast<> instead, cereal would perform no tracking and
|
|
182
|
-
// assume that every base class should be serialized (in this case leading to a duplicate
|
|
183
|
-
// serialization of MyBase due to diamond inheritance
|
|
184
|
-
};
|
|
185
|
-
}
|
|
186
|
-
@endcode */
|
|
187
|
-
template<class Base>
|
|
188
|
-
struct virtual_base_class : private traits::detail::BaseCastBase
|
|
189
|
-
{
|
|
190
|
-
template<class Derived>
|
|
191
|
-
virtual_base_class(Derived const * derived) :
|
|
192
|
-
base_ptr(const_cast<Base*>(static_cast<Base const *>(derived)))
|
|
193
|
-
{
|
|
194
|
-
static_assert( std::is_base_of<Base, Derived>::value, "Can only use virtual_base_class on a valid base class" );
|
|
195
|
-
base_class_detail::RegisterPolymorphicBaseClass<Base, Derived>::bind();
|
|
196
|
-
}
|
|
197
|
-
|
|
198
|
-
Base * base_ptr;
|
|
199
|
-
};
|
|
200
|
-
|
|
201
|
-
} // namespace cereal
|
|
202
|
-
|
|
203
|
-
#endif // CEREAL_TYPES_BASE_CLASS_HPP_
|
|
@@ -1,176 +0,0 @@
|
|
|
1
|
-
/*! \file bitset.hpp
|
|
2
|
-
\brief Support for types found in \<bitset\>
|
|
3
|
-
\ingroup STLSupport */
|
|
4
|
-
/*
|
|
5
|
-
Copyright (c) 2014, Randolph Voorhies, Shane Grant
|
|
6
|
-
All rights reserved.
|
|
7
|
-
|
|
8
|
-
Redistribution and use in source and binary forms, with or without
|
|
9
|
-
modification, are permitted provided that the following conditions are met:
|
|
10
|
-
* Redistributions of source code must retain the above copyright
|
|
11
|
-
notice, this list of conditions and the following disclaimer.
|
|
12
|
-
* Redistributions in binary form must reproduce the above copyright
|
|
13
|
-
notice, this list of conditions and the following disclaimer in the
|
|
14
|
-
documentation and/or other materials provided with the distribution.
|
|
15
|
-
* Neither the name of cereal nor the
|
|
16
|
-
names of its contributors may be used to endorse or promote products
|
|
17
|
-
derived from this software without specific prior written permission.
|
|
18
|
-
|
|
19
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
20
|
-
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
21
|
-
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
22
|
-
DISCLAIMED. IN NO EVENT SHALL RANDOLPH VOORHIES OR SHANE GRANT BE LIABLE FOR ANY
|
|
23
|
-
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
24
|
-
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
25
|
-
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
26
|
-
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
27
|
-
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
28
|
-
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
29
|
-
*/
|
|
30
|
-
#ifndef CEREAL_TYPES_BITSET_HPP_
|
|
31
|
-
#define CEREAL_TYPES_BITSET_HPP_
|
|
32
|
-
|
|
33
|
-
#include "cereal/cereal.hpp"
|
|
34
|
-
#include "cereal/types/string.hpp"
|
|
35
|
-
#include <bitset>
|
|
36
|
-
|
|
37
|
-
namespace cereal
|
|
38
|
-
{
|
|
39
|
-
namespace bitset_detail
|
|
40
|
-
{
|
|
41
|
-
//! The type the bitset is encoded with
|
|
42
|
-
/*! @internal */
|
|
43
|
-
enum class type : uint8_t
|
|
44
|
-
{
|
|
45
|
-
ulong,
|
|
46
|
-
ullong,
|
|
47
|
-
string,
|
|
48
|
-
bits
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
//! Serializing (save) for std::bitset when BinaryData optimization supported
|
|
53
|
-
template <class Archive, size_t N,
|
|
54
|
-
traits::EnableIf<traits::is_output_serializable<BinaryData<std::uint32_t>, Archive>::value>
|
|
55
|
-
= traits::sfinae> inline
|
|
56
|
-
void CEREAL_SAVE_FUNCTION_NAME( Archive & ar, std::bitset<N> const & bits )
|
|
57
|
-
{
|
|
58
|
-
ar( CEREAL_NVP_("type", bitset_detail::type::bits) );
|
|
59
|
-
|
|
60
|
-
// Serialize 8 bit chunks
|
|
61
|
-
std::uint8_t chunk = 0;
|
|
62
|
-
std::uint8_t mask = 0x80;
|
|
63
|
-
|
|
64
|
-
// Set each chunk using a rotating mask for the current bit
|
|
65
|
-
for( std::size_t i = 0; i < N; ++i )
|
|
66
|
-
{
|
|
67
|
-
if( bits[i] )
|
|
68
|
-
chunk |= mask;
|
|
69
|
-
|
|
70
|
-
mask = static_cast<std::uint8_t>(mask >> 1);
|
|
71
|
-
|
|
72
|
-
// output current chunk when mask is empty (8 bits)
|
|
73
|
-
if( mask == 0 )
|
|
74
|
-
{
|
|
75
|
-
ar( chunk );
|
|
76
|
-
chunk = 0;
|
|
77
|
-
mask = 0x80;
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
// serialize remainder, if it exists
|
|
82
|
-
if( mask != 0x80 )
|
|
83
|
-
ar( chunk );
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
//! Serializing (save) for std::bitset when BinaryData is not supported
|
|
87
|
-
template <class Archive, size_t N,
|
|
88
|
-
traits::DisableIf<traits::is_output_serializable<BinaryData<std::uint32_t>, Archive>::value>
|
|
89
|
-
= traits::sfinae> inline
|
|
90
|
-
void CEREAL_SAVE_FUNCTION_NAME( Archive & ar, std::bitset<N> const & bits )
|
|
91
|
-
{
|
|
92
|
-
try
|
|
93
|
-
{
|
|
94
|
-
auto const b = bits.to_ulong();
|
|
95
|
-
ar( CEREAL_NVP_("type", bitset_detail::type::ulong) );
|
|
96
|
-
ar( CEREAL_NVP_("data", b) );
|
|
97
|
-
}
|
|
98
|
-
catch( std::overflow_error const & )
|
|
99
|
-
{
|
|
100
|
-
try
|
|
101
|
-
{
|
|
102
|
-
auto const b = bits.to_ullong();
|
|
103
|
-
ar( CEREAL_NVP_("type", bitset_detail::type::ullong) );
|
|
104
|
-
ar( CEREAL_NVP_("data", b) );
|
|
105
|
-
}
|
|
106
|
-
catch( std::overflow_error const & )
|
|
107
|
-
{
|
|
108
|
-
ar( CEREAL_NVP_("type", bitset_detail::type::string) );
|
|
109
|
-
ar( CEREAL_NVP_("data", bits.to_string()) );
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
//! Serializing (load) for std::bitset
|
|
115
|
-
template <class Archive, size_t N> inline
|
|
116
|
-
void CEREAL_LOAD_FUNCTION_NAME( Archive & ar, std::bitset<N> & bits )
|
|
117
|
-
{
|
|
118
|
-
bitset_detail::type t;
|
|
119
|
-
ar( CEREAL_NVP_("type", t) );
|
|
120
|
-
|
|
121
|
-
switch( t )
|
|
122
|
-
{
|
|
123
|
-
case bitset_detail::type::ulong:
|
|
124
|
-
{
|
|
125
|
-
unsigned long b;
|
|
126
|
-
ar( CEREAL_NVP_("data", b) );
|
|
127
|
-
bits = std::bitset<N>( b );
|
|
128
|
-
break;
|
|
129
|
-
}
|
|
130
|
-
case bitset_detail::type::ullong:
|
|
131
|
-
{
|
|
132
|
-
unsigned long long b;
|
|
133
|
-
ar( CEREAL_NVP_("data", b) );
|
|
134
|
-
bits = std::bitset<N>( b );
|
|
135
|
-
break;
|
|
136
|
-
}
|
|
137
|
-
case bitset_detail::type::string:
|
|
138
|
-
{
|
|
139
|
-
std::string b;
|
|
140
|
-
ar( CEREAL_NVP_("data", b) );
|
|
141
|
-
bits = std::bitset<N>( b );
|
|
142
|
-
break;
|
|
143
|
-
}
|
|
144
|
-
case bitset_detail::type::bits:
|
|
145
|
-
{
|
|
146
|
-
// Normally we would use BinaryData to route this at compile time,
|
|
147
|
-
// but doing this at runtime doesn't break any old serialization
|
|
148
|
-
std::uint8_t chunk = 0;
|
|
149
|
-
std::uint8_t mask = 0;
|
|
150
|
-
|
|
151
|
-
bits.reset();
|
|
152
|
-
|
|
153
|
-
// Load one chunk at a time, rotating through the chunk
|
|
154
|
-
// to set bits in the bitset
|
|
155
|
-
for( std::size_t i = 0; i < N; ++i )
|
|
156
|
-
{
|
|
157
|
-
if( mask == 0 )
|
|
158
|
-
{
|
|
159
|
-
ar( chunk );
|
|
160
|
-
mask = 0x80;
|
|
161
|
-
}
|
|
162
|
-
|
|
163
|
-
if( chunk & mask )
|
|
164
|
-
bits[i] = 1;
|
|
165
|
-
|
|
166
|
-
mask = static_cast<std::uint8_t>(mask >> 1);
|
|
167
|
-
}
|
|
168
|
-
break;
|
|
169
|
-
}
|
|
170
|
-
default:
|
|
171
|
-
throw Exception("Invalid bitset data representation");
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
} // namespace cereal
|
|
175
|
-
|
|
176
|
-
#endif // CEREAL_TYPES_BITSET_HPP_
|
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
/*! \file boost_variant.hpp
|
|
2
|
-
\brief Support for boost::variant
|
|
3
|
-
\ingroup OtherTypes */
|
|
4
|
-
/*
|
|
5
|
-
Copyright (c) 2014, Randolph Voorhies, Shane Grant
|
|
6
|
-
All rights reserved.
|
|
7
|
-
|
|
8
|
-
Redistribution and use in source and binary forms, with or without
|
|
9
|
-
modification, are permitted provided that the following conditions are met:
|
|
10
|
-
* Redistributions of source code must retain the above copyright
|
|
11
|
-
notice, this list of conditions and the following disclaimer.
|
|
12
|
-
* Redistributions in binary form must reproduce the above copyright
|
|
13
|
-
notice, this list of conditions and the following disclaimer in the
|
|
14
|
-
documentation and/or other materials provided with the distribution.
|
|
15
|
-
* Neither the name of cereal nor the
|
|
16
|
-
names of its contributors may be used to endorse or promote products
|
|
17
|
-
derived from this software without specific prior written permission.
|
|
18
|
-
|
|
19
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
20
|
-
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
21
|
-
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
22
|
-
DISCLAIMED. IN NO EVENT SHALL RANDOLPH VOORHIES OR SHANE GRANT BE LIABLE FOR ANY
|
|
23
|
-
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
24
|
-
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
25
|
-
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
26
|
-
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
27
|
-
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
28
|
-
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
29
|
-
*/
|
|
30
|
-
#ifndef CEREAL_TYPES_BOOST_VARIANT_HPP_
|
|
31
|
-
#define CEREAL_TYPES_BOOST_VARIANT_HPP_
|
|
32
|
-
|
|
33
|
-
//! @internal
|
|
34
|
-
#if defined(_MSC_VER) && _MSC_VER < 1911
|
|
35
|
-
#define CEREAL_CONSTEXPR_LAMBDA
|
|
36
|
-
#else // MSVC 2017 or newer, all other compilers
|
|
37
|
-
#define CEREAL_CONSTEXPR_LAMBDA constexpr
|
|
38
|
-
#endif
|
|
39
|
-
|
|
40
|
-
#include "cereal/cereal.hpp"
|
|
41
|
-
#include <boost/variant/variant_fwd.hpp>
|
|
42
|
-
#include <boost/variant/static_visitor.hpp>
|
|
43
|
-
|
|
44
|
-
namespace cereal
|
|
45
|
-
{
|
|
46
|
-
namespace boost_variant_detail
|
|
47
|
-
{
|
|
48
|
-
//! @internal
|
|
49
|
-
template <class Archive>
|
|
50
|
-
struct variant_save_visitor : boost::static_visitor<>
|
|
51
|
-
{
|
|
52
|
-
variant_save_visitor(Archive & ar_) : ar(ar_) {}
|
|
53
|
-
|
|
54
|
-
template<class T>
|
|
55
|
-
void operator()(T const & value) const
|
|
56
|
-
{
|
|
57
|
-
ar( CEREAL_NVP_("data", value) );
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
Archive & ar;
|
|
61
|
-
};
|
|
62
|
-
|
|
63
|
-
//! @internal
|
|
64
|
-
template <class Archive, class T>
|
|
65
|
-
struct LoadAndConstructLoadWrapper
|
|
66
|
-
{
|
|
67
|
-
using ST = typename std::aligned_storage<sizeof(T), CEREAL_ALIGNOF(T)>::type;
|
|
68
|
-
|
|
69
|
-
LoadAndConstructLoadWrapper() :
|
|
70
|
-
construct( reinterpret_cast<T *>( &st ) )
|
|
71
|
-
{ }
|
|
72
|
-
|
|
73
|
-
~LoadAndConstructLoadWrapper()
|
|
74
|
-
{
|
|
75
|
-
if (construct.itsValid)
|
|
76
|
-
{
|
|
77
|
-
construct->~T();
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
void CEREAL_SERIALIZE_FUNCTION_NAME( Archive & ar )
|
|
82
|
-
{
|
|
83
|
-
::cereal::detail::Construct<T, Archive>::load_andor_construct( ar, construct );
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
ST st;
|
|
87
|
-
::cereal::construct<T> construct;
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
//! @internal
|
|
91
|
-
template <class T> struct load_variant_wrapper;
|
|
92
|
-
|
|
93
|
-
//! Avoid serializing variant void_ type
|
|
94
|
-
/*! @internal */
|
|
95
|
-
template <>
|
|
96
|
-
struct load_variant_wrapper<boost::detail::variant::void_>
|
|
97
|
-
{
|
|
98
|
-
template <class Variant, class Archive>
|
|
99
|
-
static void load_variant( Archive &, Variant & )
|
|
100
|
-
{ }
|
|
101
|
-
};
|
|
102
|
-
|
|
103
|
-
//! @internal
|
|
104
|
-
template <class T>
|
|
105
|
-
struct load_variant_wrapper
|
|
106
|
-
{
|
|
107
|
-
// default constructible
|
|
108
|
-
template <class Archive, class Variant>
|
|
109
|
-
static void load_variant_impl( Archive & ar, Variant & variant, std::true_type )
|
|
110
|
-
{
|
|
111
|
-
T value;
|
|
112
|
-
ar( CEREAL_NVP_("data", value) );
|
|
113
|
-
variant = std::move(value);
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
// not default constructible
|
|
117
|
-
template<class Variant, class Archive>
|
|
118
|
-
static void load_variant_impl(Archive & ar, Variant & variant, std::false_type )
|
|
119
|
-
{
|
|
120
|
-
LoadAndConstructLoadWrapper<Archive, T> loadWrapper;
|
|
121
|
-
|
|
122
|
-
ar( CEREAL_NVP_("data", loadWrapper) );
|
|
123
|
-
variant = std::move(*loadWrapper.construct.ptr());
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
//! @internal
|
|
127
|
-
template<class Variant, class Archive>
|
|
128
|
-
static void load_variant(Archive & ar, Variant & variant)
|
|
129
|
-
{
|
|
130
|
-
load_variant_impl( ar, variant, typename std::is_default_constructible<T>::type() );
|
|
131
|
-
}
|
|
132
|
-
};
|
|
133
|
-
} // namespace boost_variant_detail
|
|
134
|
-
|
|
135
|
-
//! Saving for boost::variant
|
|
136
|
-
template <class Archive, typename ... VariantTypes> inline
|
|
137
|
-
void CEREAL_SAVE_FUNCTION_NAME( Archive & ar, boost::variant<VariantTypes...> const & variant )
|
|
138
|
-
{
|
|
139
|
-
int32_t which = variant.which();
|
|
140
|
-
ar( CEREAL_NVP_("which", which) );
|
|
141
|
-
boost_variant_detail::variant_save_visitor<Archive> visitor(ar);
|
|
142
|
-
variant.apply_visitor(visitor);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
//! Loading for boost::variant
|
|
146
|
-
template <class Archive, typename ... VariantTypes> inline
|
|
147
|
-
void CEREAL_LOAD_FUNCTION_NAME( Archive & ar, boost::variant<VariantTypes...> & variant )
|
|
148
|
-
{
|
|
149
|
-
int32_t which;
|
|
150
|
-
ar( CEREAL_NVP_("which", which) );
|
|
151
|
-
|
|
152
|
-
using LoadFuncType = void(*)(Archive &, boost::variant<VariantTypes...> &);
|
|
153
|
-
CEREAL_CONSTEXPR_LAMBDA LoadFuncType loadFuncArray[] = {&boost_variant_detail::load_variant_wrapper<VariantTypes>::load_variant...};
|
|
154
|
-
|
|
155
|
-
if(which >= int32_t(sizeof(loadFuncArray)/sizeof(loadFuncArray[0])))
|
|
156
|
-
throw Exception("Invalid 'which' selector when deserializing boost::variant");
|
|
157
|
-
|
|
158
|
-
loadFuncArray[which](ar, variant);
|
|
159
|
-
}
|
|
160
|
-
} // namespace cereal
|
|
161
|
-
|
|
162
|
-
#undef CEREAL_CONSTEXPR_LAMBDA
|
|
163
|
-
|
|
164
|
-
#endif // CEREAL_TYPES_BOOST_VARIANT_HPP_
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/*! \file chrono.hpp
|
|
2
|
-
\brief Support for types found in \<chrono\>
|
|
3
|
-
\ingroup STLSupport */
|
|
4
|
-
/*
|
|
5
|
-
Copyright (c) 2014, Randolph Voorhies, Shane Grant
|
|
6
|
-
All rights reserved.
|
|
7
|
-
|
|
8
|
-
Redistribution and use in source and binary forms, with or without
|
|
9
|
-
modification, are permitted provided that the following conditions are met:
|
|
10
|
-
* Redistributions of source code must retain the above copyright
|
|
11
|
-
notice, this list of conditions and the following disclaimer.
|
|
12
|
-
* Redistributions in binary form must reproduce the above copyright
|
|
13
|
-
notice, this list of conditions and the following disclaimer in the
|
|
14
|
-
documentation and/or other materials provided with the distribution.
|
|
15
|
-
* Neither the name of cereal nor the
|
|
16
|
-
names of its contributors may be used to endorse or promote products
|
|
17
|
-
derived from this software without specific prior written permission.
|
|
18
|
-
|
|
19
|
-
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
20
|
-
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
21
|
-
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
22
|
-
DISCLAIMED. IN NO EVENT SHALL RANDOLPH VOORHIES OR SHANE GRANT BE LIABLE FOR ANY
|
|
23
|
-
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
24
|
-
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
25
|
-
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
26
|
-
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
27
|
-
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
28
|
-
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
29
|
-
*/
|
|
30
|
-
#ifndef CEREAL_TYPES_CHRONO_HPP_
|
|
31
|
-
#define CEREAL_TYPES_CHRONO_HPP_
|
|
32
|
-
|
|
33
|
-
#include <chrono>
|
|
34
|
-
|
|
35
|
-
namespace cereal
|
|
36
|
-
{
|
|
37
|
-
//! Saving std::chrono::duration
|
|
38
|
-
template <class Archive, class R, class P> inline
|
|
39
|
-
void CEREAL_SAVE_FUNCTION_NAME( Archive & ar, std::chrono::duration<R, P> const & dur )
|
|
40
|
-
{
|
|
41
|
-
ar( CEREAL_NVP_("count", dur.count()) );
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
//! Loading std::chrono::duration
|
|
45
|
-
template <class Archive, class R, class P> inline
|
|
46
|
-
void CEREAL_LOAD_FUNCTION_NAME( Archive & ar, std::chrono::duration<R, P> & dur )
|
|
47
|
-
{
|
|
48
|
-
R count;
|
|
49
|
-
ar( CEREAL_NVP_("count", count) );
|
|
50
|
-
|
|
51
|
-
dur = std::chrono::duration<R, P>{count};
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
//! Saving std::chrono::time_point
|
|
55
|
-
template <class Archive, class C, class D> inline
|
|
56
|
-
void CEREAL_SAVE_FUNCTION_NAME( Archive & ar, std::chrono::time_point<C, D> const & dur )
|
|
57
|
-
{
|
|
58
|
-
ar( CEREAL_NVP_("time_since_epoch", dur.time_since_epoch()) );
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
//! Loading std::chrono::time_point
|
|
62
|
-
template <class Archive, class C, class D> inline
|
|
63
|
-
void CEREAL_LOAD_FUNCTION_NAME( Archive & ar, std::chrono::time_point<C, D> & dur )
|
|
64
|
-
{
|
|
65
|
-
D elapsed;
|
|
66
|
-
ar( CEREAL_NVP_("time_since_epoch", elapsed) );
|
|
67
|
-
|
|
68
|
-
dur = std::chrono::time_point<C, D>{elapsed};
|
|
69
|
-
}
|
|
70
|
-
} // namespace cereal
|
|
71
|
-
|
|
72
|
-
#endif // CEREAL_TYPES_CHRONO_HPP_
|