10 #if __cplusplus < 201103L
11 #error "mmap_v2 is only supported with c++11 or newer"
19 #ifndef WIBBLE_SYS_MMAP_V2
20 #define WIBBLE_SYS_MMAP_V2
32 #define DEFAULT_MODE (ProtectMode::Read | ProtectMode::Shared)
47 size_t size() {
return _size; }
48 explicit operator bool() {
return bool( _ptr ); }
49 bool valid() {
return bool( _ptr ); }
53 template<
typename T >
54 T &
get(
size_t offset ) {
55 return *
reinterpret_cast< T *
>(
56 reinterpret_cast< char *
>( _ptr.get() ) + offset );
59 template<
typename T >
60 const T &
cget(
size_t offset )
const {
61 return *
reinterpret_cast< T *
>(
62 reinterpret_cast< char *
>( _ptr.get() ) + offset );
65 template<
typename T >
66 const T &
get(
size_t offset )
const {
return cget< T >( offset ); }
68 template<
typename T >
70 return reinterpret_cast< T *
>( _ptr.get() );
73 template<
typename T >
75 return reinterpret_cast< const T *
>( _ptr.get() );
78 template<
typename T >
80 return asConstArrayOf< T >();
84 return asArrayOf< char >()[ offset ];
88 return asArrayOf< char >()[ offset ];
92 std::shared_ptr< void > _ptr;
96 void _map(
const std::string & );
103 #endif // WIBBLE_SYS_MMAP_V2