Line data Source code
1 : /*! \file chrono.hpp
2 : \brief Support for types found in \<chrono\>
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_CHRONO_HPP_
31 : #define CEREAL_TYPES_CHRONO_HPP_
32 :
33 : #include <chrono>
34 :
35 : namespace cereal
36 : {
37 : //! Saving std::chrono::duration
38 : template <class Archive, class R, class P> inline
39 4800 : void CEREAL_SAVE_FUNCTION_NAME( Archive & ar, std::chrono::duration<R, P> const & dur )
40 : {
41 4800 : ar( CEREAL_NVP_("count", dur.count()) );
42 4800 : }
43 1200 :
44 : //! Loading std::chrono::duration
45 1200 : template <class Archive, class R, class P> inline
46 1200 : void CEREAL_LOAD_FUNCTION_NAME( Archive & ar, std::chrono::duration<R, P> & dur )
47 1200 : {
48 : R count;
49 1200 : ar( CEREAL_NVP_("count", count) );
50 1200 :
51 1200 : dur = std::chrono::duration<R, P>{count};
52 : }
53 1200 :
54 1200 : //! Saving std::chrono::time_point
55 1200 : template <class Archive, class C, class D> inline
56 : void CEREAL_SAVE_FUNCTION_NAME( Archive & ar, std::chrono::time_point<C, D> const & dur )
57 1200 : {
58 1200 : ar( CEREAL_NVP_("time_since_epoch", dur.time_since_epoch()) );
59 : }
60 :
61 : //! Loading std::chrono::time_point
62 4800 : template <class Archive, class C, class D> inline
63 : void CEREAL_LOAD_FUNCTION_NAME( Archive & ar, std::chrono::time_point<C, D> & dur )
64 : {
65 4800 : D elapsed;
66 : ar( CEREAL_NVP_("time_since_epoch", elapsed) );
67 4800 :
68 4800 : dur = std::chrono::time_point<C, D>{elapsed};
69 1200 : }
70 : } // namespace cereal
71 :
72 1200 : #endif // CEREAL_TYPES_CHRONO_HPP_
|