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,103 +0,0 @@
1
- /*! \file set.hpp
2
- \brief Support for types found in \<set\>
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_SET_HPP_
31
- #define CEREAL_TYPES_SET_HPP_
32
-
33
- #include "cereal/cereal.hpp"
34
- #include <set>
35
-
36
- namespace cereal
37
- {
38
- namespace set_detail
39
- {
40
- //! @internal
41
- template <class Archive, class SetT> inline
42
- void save( Archive & ar, SetT const & set )
43
- {
44
- ar( make_size_tag( static_cast<size_type>(set.size()) ) );
45
-
46
- for( const auto & i : set )
47
- ar( i );
48
- }
49
-
50
- //! @internal
51
- template <class Archive, class SetT> inline
52
- void load( Archive & ar, SetT & set )
53
- {
54
- size_type size;
55
- ar( make_size_tag( size ) );
56
-
57
- set.clear();
58
-
59
- auto hint = set.begin();
60
- for( size_type i = 0; i < size; ++i )
61
- {
62
- typename SetT::key_type key;
63
-
64
- ar( key );
65
- #ifdef CEREAL_OLDER_GCC
66
- hint = set.insert( hint, std::move( key ) );
67
- #else // NOT CEREAL_OLDER_GCC
68
- hint = set.emplace_hint( hint, std::move( key ) );
69
- #endif // NOT CEREAL_OLDER_GCC
70
- }
71
- }
72
- }
73
-
74
- //! Saving for std::set
75
- template <class Archive, class K, class C, class A> inline
76
- void CEREAL_SAVE_FUNCTION_NAME( Archive & ar, std::set<K, C, A> const & set )
77
- {
78
- set_detail::save( ar, set );
79
- }
80
-
81
- //! Loading for std::set
82
- template <class Archive, class K, class C, class A> inline
83
- void CEREAL_LOAD_FUNCTION_NAME( Archive & ar, std::set<K, C, A> & set )
84
- {
85
- set_detail::load( ar, set );
86
- }
87
-
88
- //! Saving for std::multiset
89
- template <class Archive, class K, class C, class A> inline
90
- void CEREAL_SAVE_FUNCTION_NAME( Archive & ar, std::multiset<K, C, A> const & multiset )
91
- {
92
- set_detail::save( ar, multiset );
93
- }
94
-
95
- //! Loading for std::multiset
96
- template <class Archive, class K, class C, class A> inline
97
- void CEREAL_LOAD_FUNCTION_NAME( Archive & ar, std::multiset<K, C, A> & multiset )
98
- {
99
- set_detail::load( ar, multiset );
100
- }
101
- } // namespace cereal
102
-
103
- #endif // CEREAL_TYPES_SET_HPP_
@@ -1,76 +0,0 @@
1
- /*! \file stack.hpp
2
- \brief Support for types found in \<stack\>
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_STACK_HPP_
31
- #define CEREAL_TYPES_STACK_HPP_
32
-
33
- #include "cereal/cereal.hpp"
34
- #include <stack>
35
-
36
- // The default container for stack is deque, so let's include that too
37
- #include "cereal/types/deque.hpp"
38
-
39
- namespace cereal
40
- {
41
- namespace stack_detail
42
- {
43
- //! Allows access to the protected container in stack
44
- template <class T, class C> inline
45
- C const & container( std::stack<T, C> const & stack )
46
- {
47
- struct H : public std::stack<T, C>
48
- {
49
- static C const & get( std::stack<T, C> const & s )
50
- {
51
- return s.*(&H::c);
52
- }
53
- };
54
-
55
- return H::get( stack );
56
- }
57
- }
58
-
59
- //! Saving for std::stack
60
- template <class Archive, class T, class C> inline
61
- void CEREAL_SAVE_FUNCTION_NAME( Archive & ar, std::stack<T, C> const & stack )
62
- {
63
- ar( CEREAL_NVP_("container", stack_detail::container( stack )) );
64
- }
65
-
66
- //! Loading for std::stack
67
- template <class Archive, class T, class C> inline
68
- void CEREAL_LOAD_FUNCTION_NAME( Archive & ar, std::stack<T, C> & stack )
69
- {
70
- C container;
71
- ar( CEREAL_NVP_("container", container) );
72
- stack = std::stack<T, C>( std::move( container ) );
73
- }
74
- } // namespace cereal
75
-
76
- #endif // CEREAL_TYPES_STACK_HPP_
@@ -1,61 +0,0 @@
1
- /*! \file string.hpp
2
- \brief Support for types found in \<string\>
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_STRING_HPP_
31
- #define CEREAL_TYPES_STRING_HPP_
32
-
33
- #include "cereal/cereal.hpp"
34
- #include <string>
35
-
36
- namespace cereal
37
- {
38
- //! Serialization for basic_string types, if binary data is supported
39
- template<class Archive, class CharT, class Traits, class Alloc> inline
40
- typename std::enable_if<traits::is_output_serializable<BinaryData<CharT>, Archive>::value, void>::type
41
- CEREAL_SAVE_FUNCTION_NAME(Archive & ar, std::basic_string<CharT, Traits, Alloc> const & str)
42
- {
43
- // Save number of chars + the data
44
- ar( make_size_tag( static_cast<size_type>(str.size()) ) );
45
- ar( binary_data( str.data(), str.size() * sizeof(CharT) ) );
46
- }
47
-
48
- //! Serialization for basic_string types, if binary data is supported
49
- template<class Archive, class CharT, class Traits, class Alloc> inline
50
- typename std::enable_if<traits::is_input_serializable<BinaryData<CharT>, Archive>::value, void>::type
51
- CEREAL_LOAD_FUNCTION_NAME(Archive & ar, std::basic_string<CharT, Traits, Alloc> & str)
52
- {
53
- size_type size;
54
- ar( make_size_tag( size ) );
55
- str.resize(static_cast<std::size_t>(size));
56
- ar( binary_data( const_cast<CharT *>( str.data() ), static_cast<std::size_t>(size) * sizeof(CharT) ) );
57
- }
58
- } // namespace cereal
59
-
60
- #endif // CEREAL_TYPES_STRING_HPP_
61
-
@@ -1,123 +0,0 @@
1
- /*! \file tuple.hpp
2
- \brief Support for types found in \<tuple\>
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_TUPLE_HPP_
31
- #define CEREAL_TYPES_TUPLE_HPP_
32
-
33
- #include "cereal/cereal.hpp"
34
- #include <tuple>
35
-
36
- namespace cereal
37
- {
38
- namespace tuple_detail
39
- {
40
- //! Creates a c string from a sequence of characters
41
- /*! The c string created will always be prefixed by "tuple_element"
42
- Based on code from: http://stackoverflow/a/20973438/710791
43
- @internal */
44
- template<char...Cs>
45
- struct char_seq_to_c_str
46
- {
47
- static const int size = 14;// Size of array for the word: tuple_element
48
- typedef const char (&arr_type)[sizeof...(Cs) + size];
49
- static const char str[sizeof...(Cs) + size];
50
- };
51
-
52
- // the word tuple_element plus a number
53
- //! @internal
54
- template<char...Cs>
55
- const char char_seq_to_c_str<Cs...>::str[sizeof...(Cs) + size] =
56
- {'t','u','p','l','e','_','e','l','e','m','e','n','t', Cs..., '\0'};
57
-
58
- //! Converts a number into a sequence of characters
59
- /*! @tparam Q The quotient of dividing the original number by 10
60
- @tparam R The remainder of dividing the original number by 10
61
- @tparam C The sequence built so far
62
- @internal */
63
- template <size_t Q, size_t R, char ... C>
64
- struct to_string_impl
65
- {
66
- using type = typename to_string_impl<Q/10, Q%10, static_cast<char>(R+std::size_t{'0'}), C...>::type;
67
- };
68
-
69
- //! Base case with no quotient
70
- /*! @internal */
71
- template <size_t R, char ... C>
72
- struct to_string_impl<0, R, C...>
73
- {
74
- using type = char_seq_to_c_str<static_cast<char>(R+std::size_t{'0'}), C...>;
75
- };
76
-
77
- //! Generates a c string for a given index of a tuple
78
- /*! Example use:
79
- @code{cpp}
80
- tuple_element_name<3>::c_str();// returns "tuple_element3"
81
- @endcode
82
- @internal */
83
- template<size_t T>
84
- struct tuple_element_name
85
- {
86
- using type = typename to_string_impl<T/10, T%10>::type;
87
- static const typename type::arr_type c_str(){ return type::str; }
88
- };
89
-
90
- // unwinds a tuple to save it
91
- //! @internal
92
- template <size_t Height>
93
- struct serialize
94
- {
95
- template <class Archive, class ... Types> inline
96
- static void apply( Archive & ar, std::tuple<Types...> & tuple )
97
- {
98
- serialize<Height - 1>::template apply( ar, tuple );
99
- ar( CEREAL_NVP_(tuple_element_name<Height - 1>::c_str(),
100
- std::get<Height - 1>( tuple )) );
101
- }
102
- };
103
-
104
- // Zero height specialization - nothing to do here
105
- //! @internal
106
- template <>
107
- struct serialize<0>
108
- {
109
- template <class Archive, class ... Types> inline
110
- static void apply( Archive &, std::tuple<Types...> & )
111
- { }
112
- };
113
- }
114
-
115
- //! Serializing for std::tuple
116
- template <class Archive, class ... Types> inline
117
- void CEREAL_SERIALIZE_FUNCTION_NAME( Archive & ar, std::tuple<Types...> & tuple )
118
- {
119
- tuple_detail::serialize<std::tuple_size<std::tuple<Types...>>::value>::template apply( ar, tuple );
120
- }
121
- } // namespace cereal
122
-
123
- #endif // CEREAL_TYPES_TUPLE_HPP_
@@ -1,36 +0,0 @@
1
- /*! \file unordered_map.hpp
2
- \brief Support for types found in \<unordered_map\>
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_UNORDERED_MAP_HPP_
31
- #define CEREAL_TYPES_UNORDERED_MAP_HPP_
32
-
33
- #include "cereal/types/concepts/pair_associative_container.hpp"
34
- #include <unordered_map>
35
-
36
- #endif // CEREAL_TYPES_UNORDERED_MAP_HPP_
@@ -1,99 +0,0 @@
1
- /*! \file unordered_set.hpp
2
- \brief Support for types found in \<unordered_set\>
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_UNORDERED_SET_HPP_
31
- #define CEREAL_TYPES_UNORDERED_SET_HPP_
32
-
33
- #include "cereal/cereal.hpp"
34
- #include <unordered_set>
35
-
36
- namespace cereal
37
- {
38
- namespace unordered_set_detail
39
- {
40
- //! @internal
41
- template <class Archive, class SetT> inline
42
- void save( Archive & ar, SetT const & set )
43
- {
44
- ar( make_size_tag( static_cast<size_type>(set.size()) ) );
45
-
46
- for( const auto & i : set )
47
- ar( i );
48
- }
49
-
50
- //! @internal
51
- template <class Archive, class SetT> inline
52
- void load( Archive & ar, SetT & set )
53
- {
54
- size_type size;
55
- ar( make_size_tag( size ) );
56
-
57
- set.clear();
58
- set.reserve( static_cast<std::size_t>( size ) );
59
-
60
- for( size_type i = 0; i < size; ++i )
61
- {
62
- typename SetT::key_type key;
63
-
64
- ar( key );
65
- set.emplace( std::move( key ) );
66
- }
67
- }
68
- }
69
-
70
- //! Saving for std::unordered_set
71
- template <class Archive, class K, class H, class KE, class A> inline
72
- void CEREAL_SAVE_FUNCTION_NAME( Archive & ar, std::unordered_set<K, H, KE, A> const & unordered_set )
73
- {
74
- unordered_set_detail::save( ar, unordered_set );
75
- }
76
-
77
- //! Loading for std::unordered_set
78
- template <class Archive, class K, class H, class KE, class A> inline
79
- void CEREAL_LOAD_FUNCTION_NAME( Archive & ar, std::unordered_set<K, H, KE, A> & unordered_set )
80
- {
81
- unordered_set_detail::load( ar, unordered_set );
82
- }
83
-
84
- //! Saving for std::unordered_multiset
85
- template <class Archive, class K, class H, class KE, class A> inline
86
- void CEREAL_SAVE_FUNCTION_NAME( Archive & ar, std::unordered_multiset<K, H, KE, A> const & unordered_multiset )
87
- {
88
- unordered_set_detail::save( ar, unordered_multiset );
89
- }
90
-
91
- //! Loading for std::unordered_multiset
92
- template <class Archive, class K, class H, class KE, class A> inline
93
- void CEREAL_LOAD_FUNCTION_NAME( Archive & ar, std::unordered_multiset<K, H, KE, A> & unordered_multiset )
94
- {
95
- unordered_set_detail::load( ar, unordered_multiset );
96
- }
97
- } // namespace cereal
98
-
99
- #endif // CEREAL_TYPES_UNORDERED_SET_HPP_
@@ -1,47 +0,0 @@
1
- /*! \file utility.hpp
2
- \brief Support for types found in \<utility\>
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_UTILITY_HPP_
31
- #define CEREAL_TYPES_UTILITY_HPP_
32
-
33
- #include "cereal/cereal.hpp"
34
- #include <utility>
35
-
36
- namespace cereal
37
- {
38
- //! Serializing for std::pair
39
- template <class Archive, class T1, class T2> inline
40
- void CEREAL_SERIALIZE_FUNCTION_NAME( Archive & ar, std::pair<T1, T2> & pair )
41
- {
42
- ar( CEREAL_NVP_("first", pair.first),
43
- CEREAL_NVP_("second", pair.second) );
44
- }
45
- } // namespace cereal
46
-
47
- #endif // CEREAL_TYPES_UTILITY_HPP_
@@ -1,89 +0,0 @@
1
- /*! \file valarray.hpp
2
- \brief Support for types found in \<valarray\>
3
- \ingroup STLSupport */
4
-
5
- /*
6
- Copyright (c) 2014, Randolph Voorhies, Shane Grant
7
- All rights reserved.
8
-
9
- Redistribution and use in source and binary forms, with or without
10
- modification, are permitted provided that the following conditions are met:
11
- * Redistributions of source code must retain the above copyright
12
- notice, this list of conditions and the following disclaimer.
13
- * Redistributions in binary form must reproduce the above copyright
14
- notice, this list of conditions and the following disclaimer in the
15
- documentation and/or other materials provided with the distribution.
16
- * Neither the name of cereal nor the
17
- names of its contributors may be used to endorse or promote products
18
- derived from this software without specific prior written permission.
19
-
20
- THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
21
- ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
22
- WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
23
- DISCLAIMED. IN NO EVENT SHALL RANDOLPH VOORHIES OR SHANE GRANT BE LIABLE FOR ANY
24
- DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
25
- (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
26
- LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
27
- ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
28
- (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
29
- SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
30
- */
31
-
32
- #ifndef CEREAL_TYPES_VALARRAY_HPP_
33
- #define CEREAL_TYPES_VALARRAY_HPP_
34
-
35
- #include "cereal/cereal.hpp"
36
- #include <valarray>
37
-
38
- namespace cereal
39
- {
40
- //! Saving for std::valarray arithmetic types, using binary serialization, if supported
41
- template <class Archive, class T> inline
42
- typename std::enable_if<traits::is_output_serializable<BinaryData<T>, Archive>::value
43
- && std::is_arithmetic<T>::value, void>::type
44
- CEREAL_SAVE_FUNCTION_NAME( Archive & ar, std::valarray<T> const & valarray )
45
- {
46
- ar( make_size_tag( static_cast<size_type>(valarray.size()) ) ); // number of elements
47
- ar( binary_data( &valarray[0], valarray.size() * sizeof(T) ) ); // &valarray[0] ok since guaranteed contiguous
48
- }
49
-
50
- //! Loading for std::valarray arithmetic types, using binary serialization, if supported
51
- template <class Archive, class T> inline
52
- typename std::enable_if<traits::is_input_serializable<BinaryData<T>, Archive>::value
53
- && std::is_arithmetic<T>::value, void>::type
54
- CEREAL_LOAD_FUNCTION_NAME( Archive & ar, std::valarray<T> & valarray )
55
- {
56
- size_type valarraySize;
57
- ar( make_size_tag( valarraySize ) );
58
-
59
- valarray.resize( static_cast<std::size_t>( valarraySize ) );
60
- ar( binary_data( &valarray[0], static_cast<std::size_t>( valarraySize ) * sizeof(T) ) );
61
- }
62
-
63
- //! Saving for std::valarray all other types
64
- template <class Archive, class T> inline
65
- typename std::enable_if<!traits::is_output_serializable<BinaryData<T>, Archive>::value
66
- || !std::is_arithmetic<T>::value, void>::type
67
- CEREAL_SAVE_FUNCTION_NAME( Archive & ar, std::valarray<T> const & valarray )
68
- {
69
- ar( make_size_tag( static_cast<size_type>(valarray.size()) ) ); // number of elements
70
- for(auto && v : valarray)
71
- ar(v);
72
- }
73
-
74
- //! Loading for std::valarray all other types
75
- template <class Archive, class T> inline
76
- typename std::enable_if<!traits::is_input_serializable<BinaryData<T>, Archive>::value
77
- || !std::is_arithmetic<T>::value, void>::type
78
- CEREAL_LOAD_FUNCTION_NAME( Archive & ar, std::valarray<T> & valarray )
79
- {
80
- size_type valarraySize;
81
- ar( make_size_tag( valarraySize ) );
82
-
83
- valarray.resize( static_cast<size_t>( valarraySize ) );
84
- for(auto && v : valarray)
85
- ar(v);
86
- }
87
- } // namespace cereal
88
-
89
- #endif // CEREAL_TYPES_VALARRAY_HPP_