isotree 0.2.2 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
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,123 +0,0 @@
1
- #ifndef CEREAL_RAPIDXML_UTILS_HPP_INCLUDED
2
- #define CEREAL_RAPIDXML_UTILS_HPP_INCLUDED
3
-
4
- // Copyright (C) 2006, 2009 Marcin Kalicinski
5
- // Version 1.13
6
- // Revision $DateTime: 2009/05/13 01:46:17 $
7
- //! in certain simple scenarios. They should probably not be used if maximizing performance is the main objective.
8
-
9
- #include "rapidxml.hpp"
10
- #include <vector>
11
- #include <string>
12
- #include <fstream>
13
- #include <stdexcept>
14
-
15
- namespace cereal {
16
- namespace rapidxml
17
- {
18
-
19
- //! Represents data loaded from a file
20
- template<class Ch = char>
21
- class file
22
- {
23
-
24
- public:
25
-
26
- //! Loads file into the memory. Data will be automatically destroyed by the destructor.
27
- //! \param filename Filename to load.
28
- file(const char *filename)
29
- {
30
- using namespace std;
31
-
32
- // Open stream
33
- basic_ifstream<Ch> stream(filename, ios::binary);
34
- if (!stream)
35
- throw runtime_error(string("cannot open file ") + filename);
36
- stream.unsetf(ios::skipws);
37
-
38
- // Determine stream size
39
- stream.seekg(0, ios::end);
40
- size_t size = stream.tellg();
41
- stream.seekg(0);
42
-
43
- // Load data and add terminating 0
44
- m_data.resize(size + 1);
45
- stream.read(&m_data.front(), static_cast<streamsize>(size));
46
- m_data[size] = 0;
47
- }
48
-
49
- //! Loads file into the memory. Data will be automatically destroyed by the destructor
50
- //! \param stream Stream to load from
51
- file(std::basic_istream<Ch> &stream)
52
- {
53
- using namespace std;
54
-
55
- // Load data and add terminating 0
56
- stream.unsetf(ios::skipws);
57
- m_data.assign(istreambuf_iterator<Ch>(stream), istreambuf_iterator<Ch>());
58
- if (stream.fail() || stream.bad())
59
- throw runtime_error("error reading stream");
60
- m_data.push_back(0);
61
- }
62
-
63
- //! Gets file data.
64
- //! \return Pointer to data of file.
65
- Ch *data()
66
- {
67
- return &m_data.front();
68
- }
69
-
70
- //! Gets file data.
71
- //! \return Pointer to data of file.
72
- const Ch *data() const
73
- {
74
- return &m_data.front();
75
- }
76
-
77
- //! Gets file data size.
78
- //! \return Size of file data, in characters.
79
- std::size_t size() const
80
- {
81
- return m_data.size();
82
- }
83
-
84
- private:
85
-
86
- std::vector<Ch> m_data; // File data
87
-
88
- };
89
-
90
- //! Counts children of node. Time complexity is O(n).
91
- //! \return Number of children of node
92
- template<class Ch>
93
- inline std::size_t count_children(xml_node<Ch> *node)
94
- {
95
- xml_node<Ch> *child = node->first_node();
96
- std::size_t count = 0;
97
- while (child)
98
- {
99
- ++count;
100
- child = child->next_sibling();
101
- }
102
- return count;
103
- }
104
-
105
- //! Counts attributes of node. Time complexity is O(n).
106
- //! \return Number of attributes of node
107
- template<class Ch>
108
- inline std::size_t count_attributes(xml_node<Ch> *node)
109
- {
110
- xml_attribute<Ch> *attr = node->first_attribute();
111
- std::size_t count = 0;
112
- while (attr)
113
- {
114
- ++count;
115
- attr = attr->next_attribute();
116
- }
117
- return count;
118
- }
119
-
120
- }
121
- } // namespace cereal
122
-
123
- #endif
@@ -1,154 +0,0 @@
1
- /*! \file macros.hpp
2
- \brief Preprocessor macros that can customise the cereal library
3
-
4
- By default, cereal looks for serialization functions with very
5
- specific names, that is: serialize, load, save, load_minimal,
6
- or save_minimal.
7
-
8
- This file allows an advanced user to change these names to conform
9
- to some other style or preference. This is implemented using
10
- preprocessor macros.
11
-
12
- As a result of this, in internal cereal code you will see macros
13
- used for these function names. In user code, you should name
14
- the functions like you normally would and not use the macros
15
- to improve readability.
16
- \ingroup utility */
17
- /*
18
- Copyright (c) 2014, Randolph Voorhies, Shane Grant
19
- All rights reserved.
20
-
21
- Redistribution and use in source and binary forms, with or without
22
- modification, are permitted provided that the following conditions are met:
23
- * Redistributions of source code must retain the above copyright
24
- notice, this list of conditions and the following disclaimer.
25
- * Redistributions in binary form must reproduce the above copyright
26
- notice, this list of conditions and the following disclaimer in the
27
- documentation and/or other materials provided with the distribution.
28
- * Neither the name of cereal nor the
29
- names of its contributors may be used to endorse or promote products
30
- derived from this software without specific prior written permission.
31
-
32
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
33
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
34
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
35
- DISCLAIMED. IN NO EVENT SHALL RANDOLPH VOORHIES OR SHANE GRANT BE LIABLE FOR ANY
36
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
37
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
38
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
39
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
40
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
41
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
42
- */
43
-
44
- #ifndef CEREAL_MACROS_HPP_
45
- #define CEREAL_MACROS_HPP_
46
-
47
- #ifndef CEREAL_THREAD_SAFE
48
- //! Whether cereal should be compiled for a threaded environment
49
- /*! This macro causes cereal to use mutexes to control access to
50
- global internal state in a thread safe manner.
51
-
52
- Note that even with this enabled you must still ensure that
53
- archives are accessed by only one thread at a time; it is safe
54
- to use multiple archives in paralel, but not to access one archive
55
- from many places simultaneously. */
56
- #define CEREAL_THREAD_SAFE 0
57
- #endif // CEREAL_THREAD_SAFE
58
-
59
- #ifndef CEREAL_SIZE_TYPE
60
- //! Determines the data type used for size_type
61
- /*! cereal uses size_type to ensure that the serialized size of
62
- dynamic containers is compatible across different architectures
63
- (e.g. 32 vs 64 bit), which may use different underlying types for
64
- std::size_t.
65
-
66
- More information can be found in cereal/details/helpers.hpp.
67
-
68
- If you choose to modify this type, ensure that you use a fixed
69
- size type (e.g. uint32_t). */
70
- #define CEREAL_SIZE_TYPE uint64_t
71
- #endif // CEREAL_SIZE_TYPE
72
-
73
- // ######################################################################
74
- #ifndef CEREAL_SERIALIZE_FUNCTION_NAME
75
- //! The serialization/deserialization function name to search for.
76
- /*! You can define @c CEREAL_SERIALIZE_FUNCTION_NAME to be different assuming
77
- you do so before this file is included. */
78
- #define CEREAL_SERIALIZE_FUNCTION_NAME serialize
79
- #endif // CEREAL_SERIALIZE_FUNCTION_NAME
80
-
81
- #ifndef CEREAL_LOAD_FUNCTION_NAME
82
- //! The deserialization (load) function name to search for.
83
- /*! You can define @c CEREAL_LOAD_FUNCTION_NAME to be different assuming you do so
84
- before this file is included. */
85
- #define CEREAL_LOAD_FUNCTION_NAME load
86
- #endif // CEREAL_LOAD_FUNCTION_NAME
87
-
88
- #ifndef CEREAL_SAVE_FUNCTION_NAME
89
- //! The serialization (save) function name to search for.
90
- /*! You can define @c CEREAL_SAVE_FUNCTION_NAME to be different assuming you do so
91
- before this file is included. */
92
- #define CEREAL_SAVE_FUNCTION_NAME save
93
- #endif // CEREAL_SAVE_FUNCTION_NAME
94
-
95
- #ifndef CEREAL_LOAD_MINIMAL_FUNCTION_NAME
96
- //! The deserialization (load_minimal) function name to search for.
97
- /*! You can define @c CEREAL_LOAD_MINIMAL_FUNCTION_NAME to be different assuming you do so
98
- before this file is included. */
99
- #define CEREAL_LOAD_MINIMAL_FUNCTION_NAME load_minimal
100
- #endif // CEREAL_LOAD_MINIMAL_FUNCTION_NAME
101
-
102
- #ifndef CEREAL_SAVE_MINIMAL_FUNCTION_NAME
103
- //! The serialization (save_minimal) function name to search for.
104
- /*! You can define @c CEREAL_SAVE_MINIMAL_FUNCTION_NAME to be different assuming you do so
105
- before this file is included. */
106
- #define CEREAL_SAVE_MINIMAL_FUNCTION_NAME save_minimal
107
- #endif // CEREAL_SAVE_MINIMAL_FUNCTION_NAME
108
-
109
- // ######################################################################
110
- //! Defines the CEREAL_NOEXCEPT macro to use instead of noexcept
111
- /*! If a compiler we support does not support noexcept, this macro
112
- will detect this and define CEREAL_NOEXCEPT as a no-op
113
- @internal */
114
- #if !defined(CEREAL_HAS_NOEXCEPT)
115
- #if defined(__clang__)
116
- #if __has_feature(cxx_noexcept)
117
- #define CEREAL_HAS_NOEXCEPT
118
- #endif
119
- #else // NOT clang
120
- #if defined(__GXX_EXPERIMENTAL_CXX0X__) && __GNUC__ * 10 + __GNUC_MINOR__ >= 46 || \
121
- defined(_MSC_FULL_VER) && _MSC_FULL_VER >= 190023026
122
- #define CEREAL_HAS_NOEXCEPT
123
- #endif // end GCC/MSVC check
124
- #endif // end NOT clang block
125
-
126
- #ifndef CEREAL_NOEXCEPT
127
- #ifdef CEREAL_HAS_NOEXCEPT
128
- #define CEREAL_NOEXCEPT noexcept
129
- #else
130
- #define CEREAL_NOEXCEPT
131
- #endif // end CEREAL_HAS_NOEXCEPT
132
- #endif // end !defined(CEREAL_HAS_NOEXCEPT)
133
- #endif // ifndef CEREAL_NOEXCEPT
134
-
135
- // ######################################################################
136
- //! Checks if C++17 is available
137
- #if __cplusplus >= 201703L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L)
138
- #define CEREAL_HAS_CPP17
139
- #endif
140
-
141
- //! Checks if C++14 is available
142
- #if __cplusplus >= 201402L
143
- #define CEREAL_HAS_CPP14
144
- #endif
145
-
146
- // ######################################################################
147
- //! Defines the CEREAL_ALIGNOF macro to use instead of alignof
148
- #if defined(_MSC_VER) && _MSC_VER < 1900
149
- #define CEREAL_ALIGNOF __alignof
150
- #else // not MSVC 2013 or older
151
- #define CEREAL_ALIGNOF alignof
152
- #endif // end MSVC check
153
-
154
- #endif // CEREAL_MACROS_HPP_
@@ -1,139 +0,0 @@
1
- /*! \file specialize.hpp
2
- \brief Serialization disambiguation */
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
-
30
- #ifndef CEREAL_SPECIALIZE_HPP_
31
- #define CEREAL_SPECIALIZE_HPP_
32
-
33
- namespace cereal
34
- {
35
- // Forward declaration of access class that users can become friends with
36
- class access;
37
-
38
- // ######################################################################
39
- //! A specifier used in conjunction with cereal::specialize to disambiguate
40
- //! serialization in special cases
41
- /*! @relates specialize
42
- @ingroup Access */
43
- enum class specialization
44
- {
45
- member_serialize, //!< Force the use of a member serialize function
46
- member_load_save, //!< Force the use of a member load/save pair
47
- member_load_save_minimal, //!< Force the use of a member minimal load/save pair
48
- non_member_serialize, //!< Force the use of a non-member serialize function
49
- non_member_load_save, //!< Force the use of a non-member load/save pair
50
- non_member_load_save_minimal //!< Force the use of a non-member minimal load/save pair
51
- };
52
-
53
- //! A class used to disambiguate cases where cereal cannot detect a unique way of serializing a class
54
- /*! cereal attempts to figure out which method of serialization (member vs. non-member serialize
55
- or load/save pair) at compile time. If for some reason cereal cannot find a non-ambiguous way
56
- of serializing a type, it will produce a static assertion complaining about this.
57
-
58
- This can happen because you have both a serialize and load/save pair, or even because a base
59
- class has a serialize (public or private with friend access) and a derived class does not
60
- overwrite this due to choosing some other serialization type.
61
-
62
- Specializing this class will tell cereal to explicitly use the serialization type you specify
63
- and it will not complain about ambiguity in its compile time selection. However, if cereal detects
64
- an ambiguity in specializations, it will continue to issue a static assertion.
65
-
66
- @code{.cpp}
67
- class MyParent
68
- {
69
- friend class cereal::access;
70
- template <class Archive>
71
- void serialize( Archive & ar ) {}
72
- };
73
-
74
- // Although serialize is private in MyParent, to cereal::access it will look public,
75
- // even through MyDerived
76
- class MyDerived : public MyParent
77
- {
78
- public:
79
- template <class Archive>
80
- void load( Archive & ar ) {}
81
-
82
- template <class Archive>
83
- void save( Archive & ar ) {}
84
- };
85
-
86
- // The load/save pair in MyDerived is ambiguous because serialize in MyParent can
87
- // be accessed from cereal::access. This looks the same as making serialize public
88
- // in MyParent, making it seem as though MyDerived has both a serialize and a load/save pair.
89
- // cereal will complain about this at compile time unless we disambiguate:
90
-
91
- namespace cereal
92
- {
93
- // This struct specialization will tell cereal which is the right way to serialize the ambiguity
94
- template <class Archive> struct specialize<Archive, MyDerived, cereal::specialization::member_load_save> {};
95
-
96
- // If we only had a disambiguation for a specific archive type, it would look something like this
97
- template <> struct specialize<cereal::BinaryOutputArchive, MyDerived, cereal::specialization::member_load_save> {};
98
- }
99
- @endcode
100
-
101
- You can also choose to use the macros CEREAL_SPECIALIZE_FOR_ALL_ARCHIVES or
102
- CEREAL_SPECIALIZE_FOR_ARCHIVE if you want to type a little bit less.
103
-
104
- @tparam T The type to specialize the serialization for
105
- @tparam S The specialization type to use for T
106
- @ingroup Access */
107
- template <class Archive, class T, specialization S>
108
- struct specialize : public std::false_type {};
109
-
110
- //! Convenient macro for performing specialization for all archive types
111
- /*! This performs specialization for the specific type for all types of archives.
112
- This macro should be placed at the global namespace.
113
-
114
- @code{cpp}
115
- struct MyType {};
116
- CEREAL_SPECIALIZE_FOR_ALL_ARCHIVES( MyType, cereal::specialization::member_load_save );
117
- @endcode
118
-
119
- @relates specialize
120
- @ingroup Access */
121
- #define CEREAL_SPECIALIZE_FOR_ALL_ARCHIVES( Type, Specialization ) \
122
- namespace cereal { template <class Archive> struct specialize<Archive, Type, Specialization> {}; }
123
-
124
- //! Convenient macro for performing specialization for a single archive type
125
- /*! This performs specialization for the specific type for a single type of archive.
126
- This macro should be placed at the global namespace.
127
-
128
- @code{cpp}
129
- struct MyType {};
130
- CEREAL_SPECIALIZE_FOR_ARCHIVE( cereal::XMLInputArchive, MyType, cereal::specialization::member_load_save );
131
- @endcode
132
-
133
- @relates specialize
134
- @ingroup Access */
135
- #define CEREAL_SPECIALIZE_FOR_ARCHIVE( Archive, Type, Specialization ) \
136
- namespace cereal { template <> struct specialize<Archive, Type, Specialization> {}; }
137
- }
138
-
139
- #endif
@@ -1,79 +0,0 @@
1
- /*! \file array.hpp
2
- \brief Support for types found in \<array\>
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_ARRAY_HPP_
31
- #define CEREAL_TYPES_ARRAY_HPP_
32
-
33
- #include "cereal/cereal.hpp"
34
- #include <array>
35
-
36
- namespace cereal
37
- {
38
- //! Saving for std::array primitive types
39
- //! using binary serialization, if supported
40
- template <class Archive, class T, size_t N> inline
41
- typename std::enable_if<traits::is_output_serializable<BinaryData<T>, Archive>::value
42
- && std::is_arithmetic<T>::value, void>::type
43
- CEREAL_SAVE_FUNCTION_NAME( Archive & ar, std::array<T, N> const & array )
44
- {
45
- ar( binary_data( array.data(), sizeof(array) ) );
46
- }
47
-
48
- //! Loading for std::array primitive types
49
- //! using binary serialization, if supported
50
- template <class Archive, class T, size_t N> inline
51
- typename std::enable_if<traits::is_input_serializable<BinaryData<T>, Archive>::value
52
- && std::is_arithmetic<T>::value, void>::type
53
- CEREAL_LOAD_FUNCTION_NAME( Archive & ar, std::array<T, N> & array )
54
- {
55
- ar( binary_data( array.data(), sizeof(array) ) );
56
- }
57
-
58
- //! Saving for std::array all other types
59
- template <class Archive, class T, size_t N> inline
60
- typename std::enable_if<!traits::is_output_serializable<BinaryData<T>, Archive>::value
61
- || !std::is_arithmetic<T>::value, void>::type
62
- CEREAL_SAVE_FUNCTION_NAME( Archive & ar, std::array<T, N> const & array )
63
- {
64
- for( auto const & i : array )
65
- ar( i );
66
- }
67
-
68
- //! Loading for std::array all other types
69
- template <class Archive, class T, size_t N> inline
70
- typename std::enable_if<!traits::is_input_serializable<BinaryData<T>, Archive>::value
71
- || !std::is_arithmetic<T>::value, void>::type
72
- CEREAL_LOAD_FUNCTION_NAME( Archive & ar, std::array<T, N> & array )
73
- {
74
- for( auto & i : array )
75
- ar( i );
76
- }
77
- } // namespace cereal
78
-
79
- #endif // CEREAL_TYPES_ARRAY_HPP_
@@ -1,55 +0,0 @@
1
- /*! \file atomic.hpp
2
- \brief Support for types found in \<atomic\>
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_ATOMIC_HPP_
31
- #define CEREAL_TYPES_ATOMIC_HPP_
32
-
33
- #include <cereal/cereal.hpp>
34
- #include <atomic>
35
-
36
- namespace cereal
37
- {
38
- //! Serializing (save) for std::atomic
39
- template <class Archive, class T> inline
40
- void CEREAL_SAVE_FUNCTION_NAME( Archive & ar, std::atomic<T> const & a )
41
- {
42
- ar( CEREAL_NVP_("atomic_data", a.load()) );
43
- }
44
-
45
- //! Serializing (load) for std::atomic
46
- template <class Archive, class T> inline
47
- void CEREAL_LOAD_FUNCTION_NAME( Archive & ar, std::atomic<T> & a )
48
- {
49
- T tmp;
50
- ar( CEREAL_NVP_("atomic_data", tmp) );
51
- a.store( tmp );
52
- }
53
- } // namespace cereal
54
-
55
- #endif // CEREAL_TYPES_ATOMIC_HPP_