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 the copyright holder 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 THE COPYRIGHT HOLDER OR CONTRIBUTORS 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 200 : CEREAL_SAVE_FUNCTION_NAME( Archive & ar, std::array<T, N> const & array ) 44 : { 45 200 : ar( binary_data( array.data(), sizeof(array) ) ); 46 200 : } 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 200 : CEREAL_LOAD_FUNCTION_NAME( Archive & ar, std::array<T, N> & array ) 54 : { 55 200 : ar( binary_data( array.data(), sizeof(array) ) ); 56 200 : } 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 1800 : CEREAL_SAVE_FUNCTION_NAME( Archive & ar, std::array<T, N> const & array ) 63 : { 64 181800 : for( auto const & i : array ) 65 180000 : ar( i ); 66 1800 : } 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 1800 : CEREAL_LOAD_FUNCTION_NAME( Archive & ar, std::array<T, N> & array ) 73 : { 74 181800 : for( auto & i : array ) 75 180000 : ar( i ); 76 1800 : } 77 : } // namespace cereal 78 : 79 : #endif // CEREAL_TYPES_ARRAY_HPP_