27 #ifndef CEREAL_TYPES_QUEUE_HPP_
28 #define CEREAL_TYPES_QUEUE_HPP_
30 #include <cereal/details/helpers.hpp>
35 namespace queue_detail
38 template <
class T,
class C>
inline
39 C
const & container( std::queue<T, C>
const & queue )
41 struct H :
public std::queue<T, C>
43 static C
const &
get( std::queue<T, C>
const & q )
49 return H::get( queue );
53 template <
class T,
class C,
class Comp>
inline
54 C
const & container( std::priority_queue<T, C, Comp>
const & priority_queue )
56 struct H :
public std::priority_queue<T, C, Comp>
58 static C
const &
get( std::priority_queue<T, C, Comp>
const & pq )
64 return H::get( priority_queue );
68 template <
class T,
class C,
class Comp>
inline
69 Comp
const & comparator( std::priority_queue<T, C, Comp>
const & priority_queue )
71 struct H :
public std::priority_queue<T, C, Comp>
73 static Comp
const &
get( std::priority_queue<T, C, Comp>
const & pq )
75 return pq.*(&H::comp);
79 return H::get( priority_queue );
84 template <
class Archive,
class T,
class C>
inline
85 void save( Archive & ar, std::queue<T, C>
const & queue )
87 ar( _CEREAL_NVP(
"container", queue_detail::container( queue )) );
91 template <
class Archive,
class T,
class C>
inline
92 void load( Archive & ar, std::queue<T, C> & queue )
96 queue = std::queue<T, C>( std::move( container ) );
100 template <
class Archive,
class T,
class C,
class Comp>
inline
101 void save( Archive & ar, std::priority_queue<T, C, Comp>
const & priority_queue )
103 ar( _CEREAL_NVP(
"comparator", queue_detail::comparator( priority_queue )) );
104 ar( _CEREAL_NVP(
"container", queue_detail::container( priority_queue )) );
108 template <
class Archive,
class T,
class C,
class Comp>
inline
109 void load( Archive & ar, std::priority_queue<T, C, Comp> & priority_queue )
117 priority_queue = std::priority_queue<T, C, Comp>( comparator, std::move( container ) );
121 #endif // CEREAL_TYPES_QUEUE_HPP_