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.
Files changed (151) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +8 -1
  3. data/LICENSE.txt +2 -2
  4. data/README.md +32 -14
  5. data/ext/isotree/ext.cpp +144 -31
  6. data/ext/isotree/extconf.rb +7 -7
  7. data/lib/isotree/isolation_forest.rb +110 -30
  8. data/lib/isotree/version.rb +1 -1
  9. data/vendor/isotree/LICENSE +1 -1
  10. data/vendor/isotree/README.md +165 -27
  11. data/vendor/isotree/include/isotree.hpp +2111 -0
  12. data/vendor/isotree/include/isotree_oop.hpp +394 -0
  13. data/vendor/isotree/inst/COPYRIGHTS +62 -0
  14. data/vendor/isotree/src/RcppExports.cpp +525 -52
  15. data/vendor/isotree/src/Rwrapper.cpp +1931 -268
  16. data/vendor/isotree/src/c_interface.cpp +953 -0
  17. data/vendor/isotree/src/crit.hpp +4232 -0
  18. data/vendor/isotree/src/dist.hpp +1886 -0
  19. data/vendor/isotree/src/exp_depth_table.hpp +134 -0
  20. data/vendor/isotree/src/extended.hpp +1444 -0
  21. data/vendor/isotree/src/external_facing_generic.hpp +399 -0
  22. data/vendor/isotree/src/fit_model.hpp +2401 -0
  23. data/vendor/isotree/src/{dealloc.cpp → headers_joined.hpp} +38 -22
  24. data/vendor/isotree/src/helpers_iforest.hpp +813 -0
  25. data/vendor/isotree/src/{impute.cpp → impute.hpp} +353 -122
  26. data/vendor/isotree/src/indexer.cpp +515 -0
  27. data/vendor/isotree/src/instantiate_template_headers.cpp +118 -0
  28. data/vendor/isotree/src/instantiate_template_headers.hpp +240 -0
  29. data/vendor/isotree/src/isoforest.hpp +1659 -0
  30. data/vendor/isotree/src/isotree.hpp +1804 -392
  31. data/vendor/isotree/src/isotree_exportable.hpp +99 -0
  32. data/vendor/isotree/src/merge_models.cpp +159 -16
  33. data/vendor/isotree/src/mult.hpp +1321 -0
  34. data/vendor/isotree/src/oop_interface.cpp +842 -0
  35. data/vendor/isotree/src/oop_interface.hpp +278 -0
  36. data/vendor/isotree/src/other_helpers.hpp +219 -0
  37. data/vendor/isotree/src/predict.hpp +1932 -0
  38. data/vendor/isotree/src/python_helpers.hpp +134 -0
  39. data/vendor/isotree/src/ref_indexer.hpp +154 -0
  40. data/vendor/isotree/src/robinmap/LICENSE +21 -0
  41. data/vendor/isotree/src/robinmap/README.md +483 -0
  42. data/vendor/isotree/src/robinmap/include/tsl/robin_growth_policy.h +406 -0
  43. data/vendor/isotree/src/robinmap/include/tsl/robin_hash.h +1620 -0
  44. data/vendor/isotree/src/robinmap/include/tsl/robin_map.h +807 -0
  45. data/vendor/isotree/src/robinmap/include/tsl/robin_set.h +660 -0
  46. data/vendor/isotree/src/serialize.cpp +4300 -139
  47. data/vendor/isotree/src/sql.cpp +141 -59
  48. data/vendor/isotree/src/subset_models.cpp +174 -0
  49. data/vendor/isotree/src/utils.hpp +3808 -0
  50. data/vendor/isotree/src/xoshiro.hpp +467 -0
  51. data/vendor/isotree/src/ziggurat.hpp +405 -0
  52. metadata +38 -104
  53. data/vendor/cereal/LICENSE +0 -24
  54. data/vendor/cereal/README.md +0 -85
  55. data/vendor/cereal/include/cereal/access.hpp +0 -351
  56. data/vendor/cereal/include/cereal/archives/adapters.hpp +0 -163
  57. data/vendor/cereal/include/cereal/archives/binary.hpp +0 -169
  58. data/vendor/cereal/include/cereal/archives/json.hpp +0 -1019
  59. data/vendor/cereal/include/cereal/archives/portable_binary.hpp +0 -334
  60. data/vendor/cereal/include/cereal/archives/xml.hpp +0 -956
  61. data/vendor/cereal/include/cereal/cereal.hpp +0 -1089
  62. data/vendor/cereal/include/cereal/details/helpers.hpp +0 -422
  63. data/vendor/cereal/include/cereal/details/polymorphic_impl.hpp +0 -796
  64. data/vendor/cereal/include/cereal/details/polymorphic_impl_fwd.hpp +0 -65
  65. data/vendor/cereal/include/cereal/details/static_object.hpp +0 -127
  66. data/vendor/cereal/include/cereal/details/traits.hpp +0 -1411
  67. data/vendor/cereal/include/cereal/details/util.hpp +0 -84
  68. data/vendor/cereal/include/cereal/external/base64.hpp +0 -134
  69. data/vendor/cereal/include/cereal/external/rapidjson/allocators.h +0 -284
  70. data/vendor/cereal/include/cereal/external/rapidjson/cursorstreamwrapper.h +0 -78
  71. data/vendor/cereal/include/cereal/external/rapidjson/document.h +0 -2652
  72. data/vendor/cereal/include/cereal/external/rapidjson/encodedstream.h +0 -299
  73. data/vendor/cereal/include/cereal/external/rapidjson/encodings.h +0 -716
  74. data/vendor/cereal/include/cereal/external/rapidjson/error/en.h +0 -74
  75. data/vendor/cereal/include/cereal/external/rapidjson/error/error.h +0 -161
  76. data/vendor/cereal/include/cereal/external/rapidjson/filereadstream.h +0 -99
  77. data/vendor/cereal/include/cereal/external/rapidjson/filewritestream.h +0 -104
  78. data/vendor/cereal/include/cereal/external/rapidjson/fwd.h +0 -151
  79. data/vendor/cereal/include/cereal/external/rapidjson/internal/biginteger.h +0 -290
  80. data/vendor/cereal/include/cereal/external/rapidjson/internal/diyfp.h +0 -271
  81. data/vendor/cereal/include/cereal/external/rapidjson/internal/dtoa.h +0 -245
  82. data/vendor/cereal/include/cereal/external/rapidjson/internal/ieee754.h +0 -78
  83. data/vendor/cereal/include/cereal/external/rapidjson/internal/itoa.h +0 -308
  84. data/vendor/cereal/include/cereal/external/rapidjson/internal/meta.h +0 -186
  85. data/vendor/cereal/include/cereal/external/rapidjson/internal/pow10.h +0 -55
  86. data/vendor/cereal/include/cereal/external/rapidjson/internal/regex.h +0 -740
  87. data/vendor/cereal/include/cereal/external/rapidjson/internal/stack.h +0 -232
  88. data/vendor/cereal/include/cereal/external/rapidjson/internal/strfunc.h +0 -69
  89. data/vendor/cereal/include/cereal/external/rapidjson/internal/strtod.h +0 -290
  90. data/vendor/cereal/include/cereal/external/rapidjson/internal/swap.h +0 -46
  91. data/vendor/cereal/include/cereal/external/rapidjson/istreamwrapper.h +0 -128
  92. data/vendor/cereal/include/cereal/external/rapidjson/memorybuffer.h +0 -70
  93. data/vendor/cereal/include/cereal/external/rapidjson/memorystream.h +0 -71
  94. data/vendor/cereal/include/cereal/external/rapidjson/msinttypes/inttypes.h +0 -316
  95. data/vendor/cereal/include/cereal/external/rapidjson/msinttypes/stdint.h +0 -300
  96. data/vendor/cereal/include/cereal/external/rapidjson/ostreamwrapper.h +0 -81
  97. data/vendor/cereal/include/cereal/external/rapidjson/pointer.h +0 -1414
  98. data/vendor/cereal/include/cereal/external/rapidjson/prettywriter.h +0 -277
  99. data/vendor/cereal/include/cereal/external/rapidjson/rapidjson.h +0 -656
  100. data/vendor/cereal/include/cereal/external/rapidjson/reader.h +0 -2230
  101. data/vendor/cereal/include/cereal/external/rapidjson/schema.h +0 -2497
  102. data/vendor/cereal/include/cereal/external/rapidjson/stream.h +0 -223
  103. data/vendor/cereal/include/cereal/external/rapidjson/stringbuffer.h +0 -121
  104. data/vendor/cereal/include/cereal/external/rapidjson/writer.h +0 -709
  105. data/vendor/cereal/include/cereal/external/rapidxml/license.txt +0 -52
  106. data/vendor/cereal/include/cereal/external/rapidxml/manual.html +0 -406
  107. data/vendor/cereal/include/cereal/external/rapidxml/rapidxml.hpp +0 -2624
  108. data/vendor/cereal/include/cereal/external/rapidxml/rapidxml_iterators.hpp +0 -175
  109. data/vendor/cereal/include/cereal/external/rapidxml/rapidxml_print.hpp +0 -428
  110. data/vendor/cereal/include/cereal/external/rapidxml/rapidxml_utils.hpp +0 -123
  111. data/vendor/cereal/include/cereal/macros.hpp +0 -154
  112. data/vendor/cereal/include/cereal/specialize.hpp +0 -139
  113. data/vendor/cereal/include/cereal/types/array.hpp +0 -79
  114. data/vendor/cereal/include/cereal/types/atomic.hpp +0 -55
  115. data/vendor/cereal/include/cereal/types/base_class.hpp +0 -203
  116. data/vendor/cereal/include/cereal/types/bitset.hpp +0 -176
  117. data/vendor/cereal/include/cereal/types/boost_variant.hpp +0 -164
  118. data/vendor/cereal/include/cereal/types/chrono.hpp +0 -72
  119. data/vendor/cereal/include/cereal/types/common.hpp +0 -129
  120. data/vendor/cereal/include/cereal/types/complex.hpp +0 -56
  121. data/vendor/cereal/include/cereal/types/concepts/pair_associative_container.hpp +0 -73
  122. data/vendor/cereal/include/cereal/types/deque.hpp +0 -62
  123. data/vendor/cereal/include/cereal/types/forward_list.hpp +0 -68
  124. data/vendor/cereal/include/cereal/types/functional.hpp +0 -43
  125. data/vendor/cereal/include/cereal/types/list.hpp +0 -62
  126. data/vendor/cereal/include/cereal/types/map.hpp +0 -36
  127. data/vendor/cereal/include/cereal/types/memory.hpp +0 -425
  128. data/vendor/cereal/include/cereal/types/optional.hpp +0 -66
  129. data/vendor/cereal/include/cereal/types/polymorphic.hpp +0 -483
  130. data/vendor/cereal/include/cereal/types/queue.hpp +0 -132
  131. data/vendor/cereal/include/cereal/types/set.hpp +0 -103
  132. data/vendor/cereal/include/cereal/types/stack.hpp +0 -76
  133. data/vendor/cereal/include/cereal/types/string.hpp +0 -61
  134. data/vendor/cereal/include/cereal/types/tuple.hpp +0 -123
  135. data/vendor/cereal/include/cereal/types/unordered_map.hpp +0 -36
  136. data/vendor/cereal/include/cereal/types/unordered_set.hpp +0 -99
  137. data/vendor/cereal/include/cereal/types/utility.hpp +0 -47
  138. data/vendor/cereal/include/cereal/types/valarray.hpp +0 -89
  139. data/vendor/cereal/include/cereal/types/variant.hpp +0 -109
  140. data/vendor/cereal/include/cereal/types/vector.hpp +0 -112
  141. data/vendor/cereal/include/cereal/version.hpp +0 -52
  142. data/vendor/isotree/src/Makevars +0 -4
  143. data/vendor/isotree/src/crit.cpp +0 -912
  144. data/vendor/isotree/src/dist.cpp +0 -749
  145. data/vendor/isotree/src/extended.cpp +0 -790
  146. data/vendor/isotree/src/fit_model.cpp +0 -1090
  147. data/vendor/isotree/src/helpers_iforest.cpp +0 -324
  148. data/vendor/isotree/src/isoforest.cpp +0 -771
  149. data/vendor/isotree/src/mult.cpp +0 -607
  150. data/vendor/isotree/src/predict.cpp +0 -853
  151. data/vendor/isotree/src/utils.cpp +0 -1566
@@ -1,334 +0,0 @@
1
- /*! \file binary.hpp
2
- \brief Binary input and output archives */
3
- /*
4
- Copyright (c) 2014, Randolph Voorhies, Shane Grant
5
- All rights reserved.
6
-
7
- Redistribution and use in source and binary forms, with or without
8
- modification, are permitted provided that the following conditions are met:
9
- * Redistributions of source code must retain the above copyright
10
- notice, this list of conditions and the following disclaimer.
11
- * Redistributions in binary form must reproduce the above copyright
12
- notice, this list of conditions and the following disclaimer in the
13
- documentation and/or other materials provided with the distribution.
14
- * Neither the name of cereal nor the
15
- names of its contributors may be used to endorse or promote products
16
- derived from this software without specific prior written permission.
17
-
18
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
19
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
20
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
21
- DISCLAIMED. IN NO EVENT SHALL RANDOLPH VOORHIES OR SHANE GRANT BE LIABLE FOR ANY
22
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
23
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
24
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
25
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
27
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28
- */
29
- #ifndef CEREAL_ARCHIVES_PORTABLE_BINARY_HPP_
30
- #define CEREAL_ARCHIVES_PORTABLE_BINARY_HPP_
31
-
32
- #include "cereal/cereal.hpp"
33
- #include <sstream>
34
- #include <limits>
35
-
36
- namespace cereal
37
- {
38
- namespace portable_binary_detail
39
- {
40
- //! Returns true if the current machine is little endian
41
- /*! @ingroup Internal */
42
- inline std::uint8_t is_little_endian()
43
- {
44
- static std::int32_t test = 1;
45
- return *reinterpret_cast<std::int8_t*>( &test ) == 1;
46
- }
47
-
48
- //! Swaps the order of bytes for some chunk of memory
49
- /*! @param data The data as a uint8_t pointer
50
- @tparam DataSize The true size of the data
51
- @ingroup Internal */
52
- template <std::size_t DataSize>
53
- inline void swap_bytes( std::uint8_t * data )
54
- {
55
- for( std::size_t i = 0, end = DataSize / 2; i < end; ++i )
56
- std::swap( data[i], data[DataSize - i - 1] );
57
- }
58
- } // end namespace portable_binary_detail
59
-
60
- // ######################################################################
61
- //! An output archive designed to save data in a compact binary representation portable over different architectures
62
- /*! This archive outputs data to a stream in an extremely compact binary
63
- representation with as little extra metadata as possible.
64
-
65
- This archive will record the endianness of the data as well as the desired in/out endianness
66
- and assuming that the user takes care of ensuring serialized types are the same size
67
- across machines, is portable over different architectures.
68
-
69
- When using a binary archive and a file stream, you must use the
70
- std::ios::binary format flag to avoid having your data altered
71
- inadvertently.
72
-
73
- \warning This archive has not been thoroughly tested across different architectures.
74
- Please report any issues, optimizations, or feature requests at
75
- <a href="www.github.com/USCiLab/cereal">the project github</a>.
76
-
77
- \ingroup Archives */
78
- class PortableBinaryOutputArchive : public OutputArchive<PortableBinaryOutputArchive, AllowEmptyClassElision>
79
- {
80
- public:
81
- //! A class containing various advanced options for the PortableBinaryOutput archive
82
- class Options
83
- {
84
- public:
85
- //! Represents desired endianness
86
- enum class Endianness : std::uint8_t
87
- { big, little };
88
-
89
- //! Default options, preserve system endianness
90
- static Options Default(){ return Options(); }
91
-
92
- //! Save as little endian
93
- static Options LittleEndian(){ return Options( Endianness::little ); }
94
-
95
- //! Save as big endian
96
- static Options BigEndian(){ return Options( Endianness::big ); }
97
-
98
- //! Specify specific options for the PortableBinaryOutputArchive
99
- /*! @param outputEndian The desired endianness of saved (output) data */
100
- explicit Options( Endianness outputEndian = getEndianness() ) :
101
- itsOutputEndianness( outputEndian ) { }
102
-
103
- private:
104
- //! Gets the endianness of the system
105
- inline static Endianness getEndianness()
106
- { return portable_binary_detail::is_little_endian() ? Endianness::little : Endianness::big; }
107
-
108
- //! Checks if Options is set for little endian
109
- inline std::uint8_t is_little_endian() const
110
- { return itsOutputEndianness == Endianness::little; }
111
-
112
- friend class PortableBinaryOutputArchive;
113
- Endianness itsOutputEndianness;
114
- };
115
-
116
- //! Construct, outputting to the provided stream
117
- /*! @param stream The stream to output to. Should be opened with std::ios::binary flag.
118
- @param options The PortableBinary specific options to use. See the Options struct
119
- for the values of default parameters */
120
- PortableBinaryOutputArchive(std::ostream & stream, Options const & options = Options::Default()) :
121
- OutputArchive<PortableBinaryOutputArchive, AllowEmptyClassElision>(this),
122
- itsStream(stream),
123
- itsConvertEndianness( portable_binary_detail::is_little_endian() ^ options.is_little_endian() )
124
- {
125
- this->operator()( options.is_little_endian() );
126
- }
127
-
128
- ~PortableBinaryOutputArchive() CEREAL_NOEXCEPT = default;
129
-
130
- //! Writes size bytes of data to the output stream
131
- template <std::streamsize DataSize> inline
132
- void saveBinary( const void * data, std::streamsize size )
133
- {
134
- std::streamsize writtenSize = 0;
135
-
136
- if( itsConvertEndianness )
137
- {
138
- for( std::streamsize i = 0; i < size; i += DataSize )
139
- for( std::streamsize j = 0; j < DataSize; ++j )
140
- writtenSize += itsStream.rdbuf()->sputn( reinterpret_cast<const char*>( data ) + DataSize - j - 1 + i, 1 );
141
- }
142
- else
143
- writtenSize = itsStream.rdbuf()->sputn( reinterpret_cast<const char*>( data ), size );
144
-
145
- if(writtenSize != size)
146
- throw Exception("Failed to write " + std::to_string(size) + " bytes to output stream! Wrote " + std::to_string(writtenSize));
147
- }
148
-
149
- private:
150
- std::ostream & itsStream;
151
- const uint8_t itsConvertEndianness; //!< If set to true, we will need to swap bytes upon saving
152
- };
153
-
154
- // ######################################################################
155
- //! An input archive designed to load data saved using PortableBinaryOutputArchive
156
- /*! This archive outputs data to a stream in an extremely compact binary
157
- representation with as little extra metadata as possible.
158
-
159
- This archive will load the endianness of the serialized data and
160
- if necessary transform it to match that of the local machine. This comes
161
- at a significant performance cost compared to non portable archives if
162
- the transformation is necessary, and also causes a small performance hit
163
- even if it is not necessary.
164
-
165
- It is recommended to use portable archives only if you know that you will
166
- be sending binary data to machines with different endianness.
167
-
168
- The archive will do nothing to ensure types are the same size - that is
169
- the responsibility of the user.
170
-
171
- When using a binary archive and a file stream, you must use the
172
- std::ios::binary format flag to avoid having your data altered
173
- inadvertently.
174
-
175
- \warning This archive has not been thoroughly tested across different architectures.
176
- Please report any issues, optimizations, or feature requests at
177
- <a href="www.github.com/USCiLab/cereal">the project github</a>.
178
-
179
- \ingroup Archives */
180
- class PortableBinaryInputArchive : public InputArchive<PortableBinaryInputArchive, AllowEmptyClassElision>
181
- {
182
- public:
183
- //! A class containing various advanced options for the PortableBinaryInput archive
184
- class Options
185
- {
186
- public:
187
- //! Represents desired endianness
188
- enum class Endianness : std::uint8_t
189
- { big, little };
190
-
191
- //! Default options, preserve system endianness
192
- static Options Default(){ return Options(); }
193
-
194
- //! Load into little endian
195
- static Options LittleEndian(){ return Options( Endianness::little ); }
196
-
197
- //! Load into big endian
198
- static Options BigEndian(){ return Options( Endianness::big ); }
199
-
200
- //! Specify specific options for the PortableBinaryInputArchive
201
- /*! @param inputEndian The desired endianness of loaded (input) data */
202
- explicit Options( Endianness inputEndian = getEndianness() ) :
203
- itsInputEndianness( inputEndian ) { }
204
-
205
- private:
206
- //! Gets the endianness of the system
207
- inline static Endianness getEndianness()
208
- { return portable_binary_detail::is_little_endian() ? Endianness::little : Endianness::big; }
209
-
210
- //! Checks if Options is set for little endian
211
- inline std::uint8_t is_little_endian() const
212
- { return itsInputEndianness == Endianness::little; }
213
-
214
- friend class PortableBinaryInputArchive;
215
- Endianness itsInputEndianness;
216
- };
217
-
218
- //! Construct, loading from the provided stream
219
- /*! @param stream The stream to read from. Should be opened with std::ios::binary flag.
220
- @param options The PortableBinary specific options to use. See the Options struct
221
- for the values of default parameters */
222
- PortableBinaryInputArchive(std::istream & stream, Options const & options = Options::Default()) :
223
- InputArchive<PortableBinaryInputArchive, AllowEmptyClassElision>(this),
224
- itsStream(stream),
225
- itsConvertEndianness( false )
226
- {
227
- uint8_t streamLittleEndian;
228
- this->operator()( streamLittleEndian );
229
- itsConvertEndianness = options.is_little_endian() ^ streamLittleEndian;
230
- }
231
-
232
- ~PortableBinaryInputArchive() CEREAL_NOEXCEPT = default;
233
-
234
- //! Reads size bytes of data from the input stream
235
- /*! @param data The data to save
236
- @param size The number of bytes in the data
237
- @tparam DataSize T The size of the actual type of the data elements being loaded */
238
- template <std::streamsize DataSize> inline
239
- void loadBinary( void * const data, std::streamsize size )
240
- {
241
- // load data
242
- auto const readSize = itsStream.rdbuf()->sgetn( reinterpret_cast<char*>( data ), size );
243
-
244
- if(readSize != size)
245
- throw Exception("Failed to read " + std::to_string(size) + " bytes from input stream! Read " + std::to_string(readSize));
246
-
247
- // flip bits if needed
248
- if( itsConvertEndianness )
249
- {
250
- std::uint8_t * ptr = reinterpret_cast<std::uint8_t*>( data );
251
- for( std::streamsize i = 0; i < size; i += DataSize )
252
- portable_binary_detail::swap_bytes<DataSize>( ptr + i );
253
- }
254
- }
255
-
256
- private:
257
- std::istream & itsStream;
258
- uint8_t itsConvertEndianness; //!< If set to true, we will need to swap bytes upon loading
259
- };
260
-
261
- // ######################################################################
262
- // Common BinaryArchive serialization functions
263
-
264
- //! Saving for POD types to portable binary
265
- template<class T> inline
266
- typename std::enable_if<std::is_arithmetic<T>::value, void>::type
267
- CEREAL_SAVE_FUNCTION_NAME(PortableBinaryOutputArchive & ar, T const & t)
268
- {
269
- static_assert( !std::is_floating_point<T>::value ||
270
- (std::is_floating_point<T>::value && std::numeric_limits<T>::is_iec559),
271
- "Portable binary only supports IEEE 754 standardized floating point" );
272
- ar.template saveBinary<sizeof(T)>(std::addressof(t), sizeof(t));
273
- }
274
-
275
- //! Loading for POD types from portable binary
276
- template<class T> inline
277
- typename std::enable_if<std::is_arithmetic<T>::value, void>::type
278
- CEREAL_LOAD_FUNCTION_NAME(PortableBinaryInputArchive & ar, T & t)
279
- {
280
- static_assert( !std::is_floating_point<T>::value ||
281
- (std::is_floating_point<T>::value && std::numeric_limits<T>::is_iec559),
282
- "Portable binary only supports IEEE 754 standardized floating point" );
283
- ar.template loadBinary<sizeof(T)>(std::addressof(t), sizeof(t));
284
- }
285
-
286
- //! Serializing NVP types to portable binary
287
- template <class Archive, class T> inline
288
- CEREAL_ARCHIVE_RESTRICT(PortableBinaryInputArchive, PortableBinaryOutputArchive)
289
- CEREAL_SERIALIZE_FUNCTION_NAME( Archive & ar, NameValuePair<T> & t )
290
- {
291
- ar( t.value );
292
- }
293
-
294
- //! Serializing SizeTags to portable binary
295
- template <class Archive, class T> inline
296
- CEREAL_ARCHIVE_RESTRICT(PortableBinaryInputArchive, PortableBinaryOutputArchive)
297
- CEREAL_SERIALIZE_FUNCTION_NAME( Archive & ar, SizeTag<T> & t )
298
- {
299
- ar( t.size );
300
- }
301
-
302
- //! Saving binary data to portable binary
303
- template <class T> inline
304
- void CEREAL_SAVE_FUNCTION_NAME(PortableBinaryOutputArchive & ar, BinaryData<T> const & bd)
305
- {
306
- typedef typename std::remove_pointer<T>::type TT;
307
- static_assert( !std::is_floating_point<TT>::value ||
308
- (std::is_floating_point<TT>::value && std::numeric_limits<TT>::is_iec559),
309
- "Portable binary only supports IEEE 754 standardized floating point" );
310
-
311
- ar.template saveBinary<sizeof(TT)>( bd.data, static_cast<std::streamsize>( bd.size ) );
312
- }
313
-
314
- //! Loading binary data from portable binary
315
- template <class T> inline
316
- void CEREAL_LOAD_FUNCTION_NAME(PortableBinaryInputArchive & ar, BinaryData<T> & bd)
317
- {
318
- typedef typename std::remove_pointer<T>::type TT;
319
- static_assert( !std::is_floating_point<TT>::value ||
320
- (std::is_floating_point<TT>::value && std::numeric_limits<TT>::is_iec559),
321
- "Portable binary only supports IEEE 754 standardized floating point" );
322
-
323
- ar.template loadBinary<sizeof(TT)>( bd.data, static_cast<std::streamsize>( bd.size ) );
324
- }
325
- } // namespace cereal
326
-
327
- // register archives for polymorphic support
328
- CEREAL_REGISTER_ARCHIVE(cereal::PortableBinaryOutputArchive)
329
- CEREAL_REGISTER_ARCHIVE(cereal::PortableBinaryInputArchive)
330
-
331
- // tie input and output archives together
332
- CEREAL_SETUP_ARCHIVE_TRAITS(cereal::PortableBinaryInputArchive, cereal::PortableBinaryOutputArchive)
333
-
334
- #endif // CEREAL_ARCHIVES_PORTABLE_BINARY_HPP_