libStatGen Software
1
|
Public Member Functions | |
void | constructorClear () |
const std::string & | getErrorString () |
arrayHeaderClass & | getHeader () |
void | setContentCookie (uint32_t c) |
void | setContentVersion (uint32_t v) |
elementT | operator[] (indexT i) |
void | set (indexT i, elementT v) |
int | create (const char *file, indexT elementCount, int optionalHeaderCount=0) |
Create a vector with elementCount memebers. | |
int | create (indexT elementCount, int optionalHeaderCount=0) |
allow anonymous (malloc) create. | |
bool | open (const char *file, int flags=O_RDONLY) |
open a previously created mapped vector | |
bool | close () |
void | debugPrint (FILE *f) |
size_t | getElementCount () const |
Protected Attributes | |
arrayHeaderClass * | header |
char * | data |
std::string | errorStr |
Definition at line 141 of file MemoryMapArray.h.
int MemoryMapArray< elementT, indexT, cookieVal, versionVal, accessorFunc, setterFunc, elementCount2BytesFunc, arrayHeaderClass >::create | ( | const char * | file, |
indexT | elementCount, | ||
int | optionalHeaderCount = 0 |
||
) | [inline] |
Create a vector with elementCount memebers.
Does administrative setup of the header and populating this class members. User will need to finish populating the contents of the metaData and data sections.
If file==NULL, the underlying allocation is done via malloc(), so that the results of write access to this vecor are not saved in a file.
If file!=NULL, a file will be created on disk, and all write accesses done via the method ::set will be persistent in that file.
Definition at line 208 of file MemoryMapArray.h.
Referenced by MemoryMapArray< elementT, indexT, cookieVal, versionVal, accessorFunc, setterFunc, elementCount2BytesFunc, arrayHeaderClass >::create(), and GenomeSequence::loadDBSNP().
{ size_t len = elementCount2BytesFunc(elementCount) + header->getHeaderSize(optionalHeaderCount); int rc; rc = MemoryMap::create(file, len); if (rc) { std::ostringstream buf; buf << file << ": failed to create file"; errorStr = buf.str(); close(); return rc; } header = (arrayHeaderClass *) MemoryMap::data; header->constructorClear(); header->typeCookie = cookieVal; header->typeVersion = versionVal; header->headerSize = header->getHeaderSize(optionalHeaderCount); header->elementCount = elementCount; data = (char *)((char *) MemoryMap::data + header->headerSize); const char *env; char hostname[256]; env = getenv("USER"); if (env) header->setCreationUser(env); header->creationDate = time(NULL); #if defined(_WIN32) hostname[0] = '\0'; #else gethostname(hostname, sizeof(hostname)); #endif header->setCreationHost(hostname); return 0; }
int MemoryMapArray< elementT, indexT, cookieVal, versionVal, accessorFunc, setterFunc, elementCount2BytesFunc, arrayHeaderClass >::create | ( | indexT | elementCount, |
int | optionalHeaderCount = 0 |
||
) | [inline] |
allow anonymous (malloc) create.
we do this when we don't expect to save the results.
The single use case so far is in GenomeSequence::populateDBSNP.
Definition at line 250 of file MemoryMapArray.h.
{ return create(NULL, elementCount, optionalHeaderCount); }
bool MemoryMapArray< elementT, indexT, cookieVal, versionVal, accessorFunc, setterFunc, elementCount2BytesFunc, arrayHeaderClass >::open | ( | const char * | file, |
int | flags = O_RDONLY |
||
) | [inline, virtual] |
open a previously created mapped vector
useMemoryMapFlag will determine whether it uses mmap() or malloc()/read() to populate the memory
Reimplemented from MemoryMap.
Reimplemented in GenomeSequence.
Definition at line 269 of file MemoryMapArray.h.
Referenced by GenomeSequence::loadDBSNP().
{ int rc = MemoryMap::open(file, flags); if (rc) { std::ostringstream buf; buf << file << ": open() failed (error=" << strerror(errno) << ")."; errorStr = buf.str(); return true; } header = (arrayHeaderClass *) MemoryMap::data; data = (char *)((char *) MemoryMap::data + header->headerSize); if (header->typeCookie!=cookieVal) { std::ostringstream buf; buf << file << ": wrong type of file (expected type " << cookieVal << " but got " << header->typeCookie << ")"; errorStr = buf.str(); // XXX insert better error handling close(); return true; } if (header->typeVersion!=versionVal) { std::ostringstream buf; buf << file << ": wrong version of file (expected version " << versionVal << " but got " << header->typeVersion << ")"; errorStr = buf.str(); // XXX insert better error handling close(); return true; } return false; }