LCOV - code coverage report
Current view: top level - vset/memory - provider.hpp (source / functions) Hit Total Coverage
Test: v-set-coverage.info Lines: 12 12 100.0 %
Date: 2019-09-12 Functions: 30 38 78.9 %

          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_MEMORY_PROVIDER_HPP
       8             : #define VSET_MEMORY_PROVIDER_HPP
       9             : 
      10             : #include <vset/memory/tags.hpp>
      11             : #include <fas/typemanip/type2type.hpp>
      12             : #include <vset/memory/aspect_maker.hpp>
      13             : #include <fas/system/nullptr.hpp>
      14             : 
      15             : namespace vset { namespace memory{
      16             : 
      17             : template<typename Manager >
      18             : class provider
      19             : {
      20             : public:
      21             :   typedef Manager manager;
      22             : 
      23             :   typedef typename aspect_maker<manager>::value_type      value_type;
      24             :   typedef typename aspect_maker<manager>::buffer_type     buffer_type;
      25             :   typedef typename aspect_maker<manager>::pointer         pointer;
      26             :   typedef typename aspect_maker<manager>::const_pointer   const_pointer;
      27             :   typedef typename aspect_maker<manager>::difference_type difference_type;
      28             :   
      29             :   typedef value_type& reference;
      30             :   typedef const value_type& const_reference;
      31             : 
      32             :   typedef size_t size_type;
      33             : 
      34           2 :   provider(): _manager(fas_nullptr) {}
      35             :   
      36          26 :   explicit provider(Manager* m): _manager(m) {}
      37             : 
      38           2 :   pointer begin()
      39             :   {
      40           2 :     return _manager->get_aspect().template get<_begin_>()(*_manager, fas::type2type<pointer>() );
      41             :   }
      42             : 
      43             :   const_pointer begin() const
      44             :   {
      45             :     return _manager->get_aspect().template get<_begin_>()(*_manager, fas::type2type<const_pointer>() );
      46             :   }
      47             : 
      48           2 :   pointer end()
      49             :   {
      50           2 :     return _manager->get_aspect().template get<_end_>()(*_manager, fas::type2type<pointer>() );
      51             :   }
      52             : 
      53             :   const_pointer end() const
      54             :   {
      55             :     return _manager->get_aspect().template get<_end_>()(*_manager, fas::type2type<const_pointer>() );
      56             :   }
      57             : 
      58          36 :   pointer allocate(size_t num, void *  hint = fas_nullptr)
      59             :   {
      60          36 :     return _manager->get_aspect().template get<_allocate_>()(*_manager, fas::type2type<pointer>(), num, hint );
      61             :   }
      62             : 
      63           2 :   void deallocate(pointer ptr, size_type num)
      64             :   {
      65           2 :     return _manager->get_aspect().template get<_deallocate_>()(*_manager, ptr, num );
      66             :   }
      67             : 
      68           7 :   buffer_type buffer()
      69             :   {
      70           7 :     return buffer_type(_manager);
      71             :   }
      72             : 
      73             :   const buffer_type buffer() const
      74             :   {
      75             :     return buffer_type(_manager);
      76             :   }
      77             : 
      78             :   size_type count() const
      79             :   {
      80             :     return _manager->get_aspect().template get<_count_>()(*_manager);
      81             :   }
      82             : 
      83             :   size_type capacity() const
      84             :   {
      85             :     return _manager->get_aspect().template get<_capacity_>()(*_manager);
      86             :   }
      87             : 
      88             : private:
      89             :   
      90             :   manager* _manager;
      91             : };
      92             : 
      93             : }}
      94             : 
      95             : 
      96             : 
      97             : #endif

Generated by: LCOV version 1.10