LCOV - code coverage report
Current view: top level - vset/buffer - persistent_provider.hpp (source / functions) Hit Total Coverage
Test: v-set-coverage.info Lines: 18 18 100.0 %
Date: 2019-09-12 Functions: 20 24 83.3 %

          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_BUFFER_PERSISTENT_PROVIDER_HPP
       8             : #define VSET_BUFFER_PERSISTENT_PROVIDER_HPP
       9             : 
      10             : #include <vset/buffer/provider.hpp>
      11             : #include <vset/buffer/persistent/tags.hpp>
      12             : 
      13             : 
      14             : namespace vset { namespace buffer{
      15             : 
      16             : template<typename T>
      17             : class persistent_provider
      18             :   : public provider<T>
      19             : {
      20             :   using provider<T>::_target;
      21             : public:
      22             :   typedef typename T::aspect::template advice_cast<_data_type_>::type data_type;
      23             :   typedef typename T::aspect::template advice_cast<_size_type_>::type size_type;
      24             : 
      25          23 :   explicit persistent_provider(T* target)
      26          23 :     : provider<T>(target)
      27             :   {
      28          23 :   }
      29             : 
      30           6 :   void close()
      31             :   {
      32           6 :     _target->get_aspect().template gete< persistent::_before_close_ >()(*_target);
      33           6 :     _target->get_aspect().template get< persistent::_close_ >()(*_target);
      34           6 :     _target->get_aspect().template gete< persistent::_after_close_ >()(*_target);
      35           6 :   }
      36             : 
      37           9 :   void open(const char* path)
      38             :   {
      39           9 :     _target->get_aspect().template gete< persistent::_before_open_>()(*_target);
      40           9 :     _target->get_aspect().template get< persistent::_open_>()(*_target, path);
      41           9 :     _target->get_aspect().template gete< persistent::_after_open_>()(*_target);
      42           9 :   }
      43             : 
      44           2 :   size_type sync()
      45             :   {
      46           2 :     _target->get_aspect().template gete< persistent::_before_sync_ >()(*_target);
      47           2 :     size_type result = _target->get_aspect().template get<persistent::_sync_>()(*_target);
      48           2 :     _target->get_aspect().template gete< persistent::_after_sync_>()(*_target, result);
      49           2 :     return result;
      50             :   }
      51             :  
      52             :   size_type sync(size_type offset, size_type size )
      53             :   {
      54             :     _target->get_aspect().template gete< persistent::_before_sync_ >()(*_target, offset, size);
      55             :     size_type result = _target->get_aspect().template get<persistent::_sync_>()(*_target, offset, size);
      56             :     _target->get_aspect().template gete< persistent::_after_sync_>()(*_target, result);
      57             :     return result;
      58             :   }
      59             : 
      60             :   size_type sync(bool async)
      61             :   {
      62             :     _target->get_aspect().template gete< persistent::_before_sync_ >()(*_target, async);
      63             :     size_type result = _target->get_aspect().template get<persistent::_sync_>()(*_target, async);
      64             :     _target->get_aspect().template gete< persistent::_after_sync_>()(*_target, result, async);
      65             :     return result;
      66             :   }
      67             : 
      68             :   size_type sync(size_type offset, size_type size, bool async )
      69             :   {
      70             :     _target->get_aspect().template gete< persistent::_before_sync_ >()(*_target, offset, size, async);
      71             :     size_type result = _target->get_aspect().template get<persistent::_sync_>()(*_target, offset, size, async);
      72             :     _target->get_aspect().template gete< persistent::_after_sync_>()(*_target, result, async);
      73             :     return result;
      74             :   }
      75             : };
      76             : 
      77             : }}
      78             : 
      79             : #endif

Generated by: LCOV version 1.10