Line data Source code
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 400 : CEREAL_SAVE_FUNCTION_NAME( Archive & ar, std::array<T, N> const & array )
44 : {
45 400 : ar( binary_data( array.data(), sizeof(array) ) );
46 400 : }
47 200 :
48 : //! Loading for std::array primitive types
49 200 : //! using binary serialization, if supported
50 200 : template <class Archive, class T, size_t N> inline
51 200 : typename std::enable_if<traits::is_input_serializable<BinaryData<T>, Archive>::value
52 : && std::is_arithmetic<T>::value, void>::type
53 200 : CEREAL_LOAD_FUNCTION_NAME( Archive & ar, std::array<T, N> & array )
54 200 : {
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 400 : || !std::is_arithmetic<T>::value, void>::type
62 : CEREAL_SAVE_FUNCTION_NAME( Archive & ar, std::array<T, N> const & array )
63 400 : {
64 400 : for( auto const & i : array )
65 200 : ar( i );
66 : }
67 200 :
68 200 : //! Loading for std::array all other types
69 200 : template <class Archive, class T, size_t N> inline
70 : typename std::enable_if<!traits::is_input_serializable<BinaryData<T>, Archive>::value
71 200 : || !std::is_arithmetic<T>::value, void>::type
72 200 : 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 3600 :
79 : #endif // CEREAL_TYPES_ARRAY_HPP_
|