LCOV - code coverage report

Current view: | top level - cereal/types/concepts - pair_associative_container.hpp (source / functions) |  |  | Hit | Total | Coverage
Test: | coverage.info |  | Lines: | 15 | 15 | 100.0 %
Date: | 2022-01-16 21:05:07 |  | Functions: | 184 | 184 | 100.0 %

              Line data    Source code

           1             : /*! \file pair_associative_container.hpp
           2             :     \brief Support for the PairAssociativeContainer refinement of the
           3             :     AssociativeContainer concept.
           4             :     \ingroup TypeConcepts */
           5             : /*
           6             :   Copyright (c) 2014, Randolph Voorhies, Shane Grant
           7             :   All rights reserved.
           8             :
           9             :   Redistribution and use in source and binary forms, with or without
          10             :   modification, are permitted provided that the following conditions are met:
          11             :       * Redistributions of source code must retain the above copyright
          12             :         notice, this list of conditions and the following disclaimer.
          13             :       * Redistributions in binary form must reproduce the above copyright
          14             :         notice, this list of conditions and the following disclaimer in the
          15             :         documentation and/or other materials provided with the distribution.
          16             :       * Neither the name of the copyright holder nor the
          17             :         names of its contributors may be used to endorse or promote products
          18             :         derived from this software without specific prior written permission.
          19             :
          20             :   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
          21             :   ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
          22             :   WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
          23             :   DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY
          24             :   DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
          25             :   (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
          26             :   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
          27             :   ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
          28             :   (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
          29             :   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
          30             : */
          31             : #ifndef CEREAL_CONCEPTS_PAIR_ASSOCIATIVE_CONTAINER_HPP_
          32             : #define CEREAL_CONCEPTS_PAIR_ASSOCIATIVE_CONTAINER_HPP_
          33             :
          34             : #include "cereal/cereal.hpp"
          35             :
          36             : namespace cereal
          37             : {
          38             :   //! Saving for std-like pair associative containers
          39             :   template <class Archive, template <typename...> class Map, typename... Args, typename = typename Map<Args...>::mapped_type> inline
          40        9200 :   void CEREAL_SAVE_FUNCTION_NAME( Archive & ar, Map<Args...> const & map )
          41             :   {
          42        9200 :     ar( make_size_tag( static_cast<size_type>(map.size()) ) );
          43             :
          44     1279376 :     for( const auto & i : map )
          45     1270176 :       ar( make_map_item(i.first, i.second) );
          46        9200 :   }
          47             :
          48             :   //! Loading for std-like pair associative containers
          49             :   template <class Archive, template <typename...> class Map, typename... Args, typename = typename Map<Args...>::mapped_type> inline
          50        9200 :   void CEREAL_LOAD_FUNCTION_NAME( Archive & ar, Map<Args...> & map )
          51             :   {
          52             :     size_type size;
          53        9200 :     ar( make_size_tag( size ) );
          54             :
          55        9200 :     map.clear();
          56             :
          57        9200 :     auto hint = map.begin();
          58     1279376 :     for( size_t i = 0; i < size; ++i )
          59             :     {
          60      240000 :       typename Map<Args...>::key_type key;
          61      950176 :       typename Map<Args...>::mapped_type value;
          62             :
          63     1270176 :       ar( make_map_item(key, value) );
          64             :       #ifdef CEREAL_OLDER_GCC
          65             :       hint = map.insert( hint, std::make_pair(std::move(key), std::move(value)) );
          66             :       #else // NOT CEREAL_OLDER_GCC
          67     1270176 :       hint = map.emplace_hint( hint, std::move( key ), std::move( value ) );
          68             :       #endif // NOT CEREAL_OLDER_GCC
          69             :     }
          70        9200 :   }
          71             : } // namespace cereal
          72             :
          73             : #endif // CEREAL_CONCEPTS_PAIR_ASSOCIATIVE_CONTAINER_HPP_

Generated by: LCOV version 1.14