LCOV - code coverage report
Current view: top level - vset/memory/fsb - offset_provider.hpp (source / functions) Hit Total Coverage
Test: v-set-coverage.info Lines: 23 23 100.0 %
Date: 2019-09-12 Functions: 61 72 84.7 %

          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_VSET_MEMORY_FSB_OFFSET_PROVIDER_HPP
       8             : #define VSET_VSET_MEMORY_FSB_OFFSET_PROVIDER_HPP
       9             : 
      10             : #include <fas/system/nullptr.hpp>
      11             : #include <vset/memory/fsb/tags.hpp>
      12             : #include <cassert>
      13             : #include <stdexcept>
      14             : 
      15             : namespace vset { namespace memory{ namespace fsb{
      16             : 
      17             : template<typename T>
      18             : class offset_provider
      19             : {
      20             : public:
      21             :   typedef typename T::aspect::template advice_cast<_value_type_>::type value_type;
      22             :   typedef value_type* pointer;
      23             :   typedef const value_type* const_pointer;
      24             :   typedef value_type& reference;
      25             :   typedef const value_type& const_reference;
      26             :   
      27           4 :   offset_provider()
      28           4 :     : _target(fas_nullptr)
      29           4 :   {}
      30             :   
      31       61696 :   offset_provider(T* off, size_t=static_cast<size_t>(-1))
      32       61696 :     : _target(off)
      33       61696 :   {}
      34             : 
      35        4407 :   const value_type* get(size_t off) const
      36             :   {
      37        4407 :     assert(_target!=fas_nullptr);
      38        4407 :     return _target->get_aspect().template get<_ptr_by_offset_>()(*_target, off);
      39             :   }
      40             : 
      41     2749202 :   value_type* get(size_t off)
      42             :   {
      43     2749202 :     assert(_target!=fas_nullptr);
      44     2749202 :     return _target->get_aspect().template get<_ptr_by_offset_>()(*_target, off);
      45             :   }
      46             : 
      47       11622 :   size_t offset(value_type* p) const
      48             :   {
      49       11622 :     assert(_target!=fas_nullptr);
      50       11622 :     return _target->get_aspect().template get<_offset_by_ptr_>()(*_target, p);
      51             :   }
      52             : 
      53      114060 :   size_t next(size_t off, size_t cnt = 1) const
      54             :   {
      55      114060 :     assert(_target!=fas_nullptr);
      56      114060 :     return _target->get_aspect().template get<_next_offset_>()(*_target, off, cnt);
      57             :   }
      58             : 
      59       22347 :   size_t pred(size_t off, size_t cnt = 1) const
      60             :   {
      61       22347 :     assert(_target!=fas_nullptr);
      62       22347 :     return _target->get_aspect().template get<_pred_offset_>()(*_target, off, cnt);
      63             :   }
      64             : 
      65       20225 :   bool operator == (const offset_provider<T> right) const
      66             :   {
      67       20225 :     return _target==right._target;
      68             :   }
      69             : 
      70             : private:
      71             :   T *_target;
      72             : };
      73             : 
      74             : 
      75             : }}}
      76             : 
      77             : #endif

Generated by: LCOV version 1.10