author | Jens Alfke <jens@mooseyard.com> |
Sun Sep 20 20:39:24 2009 -0700 (2009-09-20) | |
changeset 1 | 6cbad782d16a |
parent 0 | include/MemoryMap.h@31a43d94cc26 |
permissions | -rw-r--r-- |
jens@0 | 1 |
/* |
jens@0 | 2 |
* MemoryMap.h |
jens@0 | 3 |
* Ottoman |
jens@0 | 4 |
* |
jens@0 | 5 |
* Created by Jens Alfke on 9/17/09. |
jens@0 | 6 |
* Copyright 2009 Jens Alfke. All rights reserved. |
jens@0 | 7 |
* BSD-Licensed: See the file "LICENSE.txt" for details. |
jens@0 | 8 |
*/ |
jens@0 | 9 |
|
jens@0 | 10 |
#include "File.h" |
jens@0 | 11 |
|
jens@0 | 12 |
namespace Mooseyard { |
jens@0 | 13 |
|
jens@0 | 14 |
/** A flexible memory-map on a file, which can handle multiple discontiguous mapped regions. |
jens@0 | 15 |
Clients usually access this functionality through File, which delegates to it. */ |
jens@0 | 16 |
class MemoryMap { |
jens@0 | 17 |
public: |
jens@0 | 18 |
MemoryMap (File* file) :_file(file), _nRegions(0), _regions(NULL) { } |
jens@0 | 19 |
~MemoryMap(); |
jens@0 | 20 |
|
jens@0 | 21 |
void mapRegion (off_t position, size_t length); |
jens@0 | 22 |
const void* mappedPosition (off_t position) const; |
jens@0 | 23 |
|
jens@0 | 24 |
private: |
jens@0 | 25 |
UNCOPYABLE(MemoryMap); |
jens@0 | 26 |
class Region; |
jens@0 | 27 |
const void* _at (off_t) const; |
jens@0 | 28 |
|
jens@0 | 29 |
File *_file; |
jens@0 | 30 |
int _nRegions; |
jens@0 | 31 |
Region **_regions; |
jens@0 | 32 |
}; |
jens@0 | 33 |
|
jens@0 | 34 |
|
jens@0 | 35 |
class MemoryMap::Region { |
jens@0 | 36 |
public: |
jens@0 | 37 |
Region (File*, off_t position, size_t length); |
jens@0 | 38 |
~Region(); |
jens@0 | 39 |
off_t position() const {return _position;} |
jens@0 | 40 |
size_t length() const {return _length;} |
jens@0 | 41 |
off_t end() const {return _position + _length;} |
jens@0 | 42 |
bool setLength (size_t); // Returns false if it failed |
jens@0 | 43 |
const void* mappedPosition(off_t); |
jens@0 | 44 |
private: |
jens@0 | 45 |
UNCOPYABLE(Region); |
jens@0 | 46 |
File* const _file; |
jens@0 | 47 |
const off_t _position; |
jens@0 | 48 |
size_t _length; |
jens@0 | 49 |
const uint8_t *_start; |
jens@0 | 50 |
}; |
jens@0 | 51 |
|
jens@0 | 52 |
|
jens@0 | 53 |
} |