LCOV - code coverage report
Current view: top level - vset/vtree/aspect - ad_erase_value.hpp (source / functions) Hit Total Coverage
Test: v-set-coverage.info Lines: 7 7 100.0 %
Date: 2019-09-12 Functions: 7 8 87.5 %

          Line data    Source code
       1             : //
       2             : // Author: Vladimir Migashko <migashko@gmail.com>, (C) 2012
       3             : //
       4             : // Copyright: See COPYING file that comes with this distribution
       5             : //
       6             : 
       7             : #ifndef VSET_VTREE_ASPECT_AD_ERASE_VALUE_HPP
       8             : #define VSET_VTREE_ASPECT_AD_ERASE_VALUE_HPP
       9             : 
      10             : #include <vset/vtree/aspect/tags.hpp>
      11             : 
      12             : namespace vset{ namespace vtree{
      13             : 
      14             : #ifdef __GXX_EXPERIMENTAL_CXX0X__
      15             : 
      16          29 : struct ad_erase_value
      17             : {
      18             :   template<typename T>
      19       16847 :   typename T::size_type operator()(T& t, const typename T::key_type& value)
      20             :   {
      21             :     typedef typename T::size_type size_type;
      22             :     typedef typename T::const_iterator iterator_type;
      23       16847 :     iterator_type lower( t.get_aspect().template get<_lower_bound_>()(t, value) );
      24       16847 :     iterator_type upper( t.get_aspect().template get<_upper_bound_>()(t, value) );
      25       16847 :     size_type result = static_cast<size_type>( std::distance(lower, upper) );
      26             :  
      27       16847 :     t.get_aspect().template get<_erase_range_>()( t, lower, upper );
      28       16847 :     return result;
      29             :   }
      30             : };
      31             : 
      32             : #else
      33             : 
      34             : struct ad_erase_value
      35             : {
      36             :   template<typename T>
      37             :   typename T::size_type operator()(T& t, const typename T::key_type& value)
      38             :   {
      39             :     typedef typename T::size_type size_type;
      40             :     typename T::iterator lower = t.get_aspect().template get<_lower_bound_>()(t, value);
      41             :     typename T::iterator upper = t.get_aspect().template get<_upper_bound_>()(t, value);
      42             :     size_type result = static_cast<size_type>( std::distance(lower, upper) );
      43             : 
      44             :     t.get_aspect().template get<_erase_range_>()( t, lower, upper );
      45             :     return result;
      46             :   }
      47             : };
      48             : 
      49             : 
      50             : #endif
      51             :   
      52             : 
      53             :   
      54             : }}
      55             : 
      56             : #endif

Generated by: LCOV version 1.10