LCOV - code coverage report
Current view: top level - vset/buffer/persistent/mmap - ad_close.hpp (source / functions) Hit Total Coverage
Test: v-set-coverage.info Lines: 13 14 92.9 %
Date: 2019-09-12 Functions: 8 9 88.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_VSET_BUFFER_PERSISTENT_MMAP_AD_CLOSE_HPP
       8             : #define VSET_VSET_BUFFER_PERSISTENT_MMAP_AD_CLOSE_HPP
       9             : 
      10             : #include <vset/buffer/tags.hpp>
      11             : #include <vset/buffer/persistent/tags.hpp>
      12             : #include <fas/system/nullptr.hpp>
      13             : 
      14             : 
      15             : namespace vset { namespace buffer { namespace persistent{ namespace mmap{
      16             : 
      17           9 : struct ad_close
      18             : {
      19             :   template<typename T>
      20          20 :   void operator()( T& t)
      21             :   {
      22          20 :     char *data = t.get_aspect().template get<_buffer_>();
      23          20 :     size_t size = t.get_aspect().template get<_buffer_size_>();
      24             : 
      25          20 :     if ( data != fas_nullptr )
      26             :     {
      27           9 :       if ( -1 == ::munmap( data, size ) )
      28           0 :         throw std::runtime_error(strerror(errno));
      29             :     }
      30             :     
      31          20 :     t.get_aspect().template get<_close_file_>()(t);
      32          20 :     t.get_aspect().template get<_buffer_>() = fas_nullptr;
      33          20 :     t.get_aspect().template get<_buffer_size_>() = 0;
      34          20 :     t.get_aspect().template get<_size_value_>() = 0;
      35          20 :     t.get_aspect().template get<_capacity_value_>() = 0;
      36          20 :     t.get_aspect().template get<_file_name_>().clear();
      37          20 :   }
      38             : };
      39             : 
      40             : }}}}
      41             : 
      42             : #endif

Generated by: LCOV version 1.10