#ifndef CEREAL_BINARY_ARCHIVE_QUEUE_HPP_ #define CEREAL_BINARY_ARCHIVE_QUEUE_HPP_ #include #include namespace cereal { namespace queue_detail { //! Allows access to the protected container in queue template inline C const & container( std::queue const & queue ) { struct H : public std::queue { static C const & get( std::queue const & q ) { return q.*(&H::c); } }; return H::get( queue ); } //! Allows access to the protected container in priority queue template inline C const & container( std::priority_queue const & priority_queue ) { struct H : public std::priority_queue { static C const & get( std::priority_queue const & pq ) { return pq.*(&H::c); } }; return H::get( priority_queue ); } //! Allows access to the protected comparator in priority queue template inline Comp const & comparator( std::priority_queue const & priority_queue ) { struct H : public std::priority_queue { static Comp const & get( std::priority_queue const & pq ) { return pq.*(&H::comp); } }; return H::get( priority_queue ); } } //! Saving for std::queue to binary template inline void save( BinaryOutputArchive & ar, std::queue const & queue ) { ar & queue_detail::container( queue ); } //! Loading for std::queue to binary template inline void load( BinaryInputArchive & ar, std::queue & queue ) { C container; ar & container; queue = std::queue( std::move( container ) ); } //! Saving for std::priority_queue to binary template inline void save( BinaryOutputArchive & ar, std::priority_queue const & priority_queue ) { ar & queue_detail::comparator( priority_queue ); ar & queue_detail::container( priority_queue ); } //! Loading for std::priority_queue to binary template inline void load( BinaryInputArchive & ar, std::priority_queue & priority_queue ) { Comp comparator; ar & comparator; C container; ar & container; priority_queue = std::priority_queue( comparator, std::move( container ) ); } } // namespace cereal #endif // CEREAL_BINARY_ARCHIVE_QUEUE_HPP_