Lunchbox  1.17.0
Multi-threaded C++ toolbox library for all application developers creating high-performance multi-threaded programs.
lunchbox::MemoryMap Class Reference

Helper to map a file to a memory address (mmap). More...

#include <memoryMap.h>

+ Inheritance diagram for lunchbox::MemoryMap:
+ Collaboration diagram for lunchbox::MemoryMap:

Public Member Functions

 MemoryMap ()
 Construct a new memory map. More...
 
 MemoryMap (const std::string &filename)
 Construct and initialize a new, readonly memory map. More...
 
 MemoryMap (const std::string &filename, const size_t size)
 Construct and initialize a new, read-write memory map. More...
 
 ~MemoryMap ()
 Destruct the memory map. More...
 
const void * map (const std::string &filename)
 Map a file to a memory address. More...
 
const void * remap (const std::string &filename)
 Remap a different file for this memory map. More...
 
void * create (const std::string &filename, const size_t size)
 Create a writable file to a memory address. More...
 
void * recreate (const std::string &filename, size_t size)
 Recreate a different writable file for this memory map. More...
 
void * resize (size_t size)
 Resize a writeable memory map. More...
 
void unmap ()
 Unmap the file. More...
 
const void * getAddress () const
 
void * getAddress ()
 
template<class T >
const T * getAddress () const
 
template<class T >
T * getAddress ()
 
template<class T >
T & get (const size_t i)
 Access the given element in the map. More...
 
template<class T >
const T & get (const size_t i) const
 Access the given element in the map. More...
 
size_t getSize () const
 

Detailed Description

Helper to map a file to a memory address (mmap).

Deprecated:
Use boost::iostreams::mapped_file_source

Example:

/* Copyright (c) 2013-2017 Stefan.Eilemann@epfl.ch
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License version 2.1 as published
* by the Free Software Foundation.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this library; if not, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#define BOOST_TEST_MODULE MemoryMap
#include <boost/test/unit_test.hpp>
#include <lunchbox/memoryMap.h>
#include <lunchbox/types.h>
#define MAP_SIZE LB_10MB
#define STRIDE 23721
BOOST_AUTO_TEST_CASE(write_read)
{
lunchbox::MemoryMap map("foo.mmap", MAP_SIZE);
BOOST_CHECK_EQUAL(map.getSize(), MAP_SIZE);
BOOST_CHECK(map.recreate("foo.mmap", MAP_SIZE / 2));
uint8_t* writePtr = map.getAddress<uint8_t>();
BOOST_CHECK(writePtr);
size_t i = 0;
for (; i < MAP_SIZE / 2; i += STRIDE)
writePtr[i] = uint8_t(i);
BOOST_CHECK(map.resize(MAP_SIZE));
writePtr = map.getAddress<uint8_t>();
for (; i < MAP_SIZE; i += STRIDE)
writePtr[i] = uint8_t(i);
map.unmap();
const void* noPtr = map.map("foo.map");
BOOST_CHECK(!noPtr);
BOOST_CHECK_EQUAL(map.getSize(), 0);
BOOST_CHECK(map.map("foo.mmap"));
BOOST_CHECK(!map.map("foo.mmap"));
BOOST_CHECK(map.remap("foo.mmap"));
const uint8_t* readPtr = map.getAddress<uint8_t>();
BOOST_CHECK(readPtr);
BOOST_CHECK_EQUAL(map.getSize(), MAP_SIZE);
for (i = 0; i < MAP_SIZE; i += STRIDE)
BOOST_CHECK_EQUAL(readPtr[i], uint8_t(i));
}
BOOST_AUTO_TEST_CASE(exceptions)
{
BOOST_CHECK_THROW(lunchbox::MemoryMap("doesnotexist"), std::runtime_error);
BOOST_CHECK_THROW(lunchbox::MemoryMap("/doesnotexist", 42),
std::runtime_error);
}

Definition at line 39 of file memoryMap.h.

Constructor & Destructor Documentation

lunchbox::MemoryMap::MemoryMap ( )

Construct a new memory map.

Version
1.0
lunchbox::MemoryMap::MemoryMap ( const std::string &  filename)
explicit

Construct and initialize a new, readonly memory map.

Exceptions
std::runtime_errorif file can't be mapped.
Version
1.7.1
lunchbox::MemoryMap::MemoryMap ( const std::string &  filename,
const size_t  size 
)

Construct and initialize a new, read-write memory map.

Exceptions
std::runtime_errorif file can't be created.
Version
1.9.1
lunchbox::MemoryMap::~MemoryMap ( )

Destruct the memory map.

Unmaps the file, if it is still mapped.

See also
unmap()
Version
1.0

Member Function Documentation

void* lunchbox::MemoryMap::create ( const std::string &  filename,
const size_t  size 
)

Create a writable file to a memory address.

The file is mapped read-write. An existing file will be overwritten. The file is automatically unmapped when the memory map is deleted.

Parameters
filenameThe filename of the file to map.
sizethis size of the file.
Returns
the pointer to the mapped file, or 0 upon error.
Version
1.9.1
template<class T >
T& lunchbox::MemoryMap::get ( const size_t  i)
inline

Access the given element in the map.

Version
1.16

Definition at line 154 of file memoryMap.h.

template<class T >
const T& lunchbox::MemoryMap::get ( const size_t  i) const
inline

Access the given element in the map.

Version
1.16

Definition at line 161 of file memoryMap.h.

References getAddress(), getSize(), and lunchbox::operator<<().

+ Here is the call graph for this function:

const void* lunchbox::MemoryMap::getAddress ( ) const
Returns
the pointer to the memory map.
Version
1.0

Referenced by get().

+ Here is the caller graph for this function:

void* lunchbox::MemoryMap::getAddress ( )
Returns
the pointer to the memory map.
Version
1.9.1
template<class T >
const T* lunchbox::MemoryMap::getAddress ( ) const
inline
Returns
the pointer to the memory map.
Version
1.9.1

Definition at line 140 of file memoryMap.h.

template<class T >
T* lunchbox::MemoryMap::getAddress ( )
inline
Returns
the pointer to the memory map.
Version
1.9.1

Definition at line 147 of file memoryMap.h.

size_t lunchbox::MemoryMap::getSize ( ) const
Returns
the size of the memory map.
Version
1.0

Referenced by get().

+ Here is the caller graph for this function:

const void* lunchbox::MemoryMap::map ( const std::string &  filename)

Map a file to a memory address.

The file is only mapped read-only. The file is automatically unmapped when the memory map is deleted.

Parameters
filenameThe filename of the file to map.
Returns
the pointer to the mapped file, or 0 upon error.
Version
1.0
void* lunchbox::MemoryMap::recreate ( const std::string &  filename,
size_t  size 
)

Recreate a different writable file for this memory map.

The file is only mapped read-write. An existing map is unmapped.

Parameters
filenameThe filename of the file to map.
sizethis size of the file.
Returns
the pointer to the mapped file, or nullptr upon error.
Version
1.0
const void* lunchbox::MemoryMap::remap ( const std::string &  filename)

Remap a different file for this memory map.

The file is only mapped read-only. An existing map is unmapped.

Parameters
filenameThe filename of the file to map.
Returns
the pointer to the mapped file, or 0 upon error.
Version
1.9.1
void* lunchbox::MemoryMap::resize ( size_t  size)

Resize a writeable memory map.

The mapping address may change. An existing read-only map will result in an error. On error, the existing map is unmapped.

Parameters
sizethe new size.
Returns
the new mapping address, or nullptr on error.
Version
1.16
void lunchbox::MemoryMap::unmap ( )

Unmap the file.

Version
1.0

The documentation for this class was generated from the following file: