LCOV - code coverage report
Current view: top level - vset/vtree/aspect - ad_erase_range.hpp (source / functions) Hit Total Coverage
Test: v-set-coverage.info Lines: 10 10 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_RANGE_HPP
       8             : #define VSET_VTREE_ASPECT_AD_ERASE_RANGE_HPP
       9             : 
      10             : #include <vset/vtree/aspect/tags.hpp>
      11             : 
      12             : namespace vset{ namespace vtree{
      13             : 
      14             : 
      15             : #ifdef __GXX_EXPERIMENTAL_CXX0X__
      16             : 
      17          29 : struct ad_erase_range
      18             : {
      19             :   template<typename T>
      20             :   typename T::iterator
      21       16847 :   operator()(T& t, typename T::const_iterator beg, typename T::const_iterator end)
      22             :   {
      23             :     typedef typename T::difference_type difference_type;
      24       16847 :     typename T::iterator last = t.end();
      25             :     
      26       16847 :     difference_type dist = std::distance(beg, end);
      27       16847 :     if (dist!=0)
      28             :     {
      29       16846 :       last = t.get_aspect().template get<_erase_iterator_>()(t, beg, false);
      30       16852 :       for ( --dist; dist != 0; --dist)
      31             :       {
      32           6 :         last = t.get_aspect().template get<_erase_iterator_>()(t, last, false);
      33             :       }
      34             :     }
      35             :     
      36       16847 :     t.get_aspect().template get<_defrag_container_>()(t, last);
      37       16847 :     return last;
      38             :   }
      39             : };
      40             : 
      41             : #else
      42             : 
      43             : struct ad_erase_range
      44             : {
      45             :   template<typename T>
      46             :   void operator()(T& t, typename T::iterator beg, typename T::iterator end)
      47             :   {
      48             :     typedef typename T::difference_type difference_type;
      49             :     difference_type dist = std::distance(beg, end);
      50             :     for ( ;dist!=0; --dist)
      51             :     {
      52             :       beg = t.get_aspect().template get<_erase_iterator_>()(t, beg, false);
      53             :     }
      54             :     t.get_aspect().template get<_defrag_container_>()(t, beg);
      55             :   }
      56             : };
      57             : 
      58             : #endif
      59             : 
      60             : }}
      61             : 
      62             : #endif

Generated by: LCOV version 1.10