NumeRe v1.1.4
NumeRe: Framework für Numerische Rechnungen
NumeRe::CacheFile Class Reference

This class resembles the cache file used to autosave and recover the tables in memory. It is derived from the NumeRe data file format and uses its functionalities to layout the data in the file: the cache file starts with a header containing the number of tables in the file and the character positions in the file, where each table starts. The tables themselves are written in the NumeRe data file format. More...

#include <file.hpp>

Inheritance diagram for NumeRe::CacheFile:
Collaboration diagram for NumeRe::CacheFile:

Public Member Functions

 CacheFile (const std::string &filename)
 
virtual ~CacheFile ()
 This destructor will write the offsets for the different tables to the file before the file stream will be closed. More...
 
virtual bool read () override
 Pure virtual declaration of the read access method. Has to be implemented in all derived classes and can be used to read the contents of the file to memory. More...
 
virtual bool write () override
 Pure virtual declaration of the write access method. Has to be implemented in all derived classes and can be used to write the contents in memory to the target file. More...
 
void readCacheHeader ()
 This member function will read the cache file header and ensure that the version of the file is not newer than expected. More...
 
void writeCacheHeader ()
 This member function will write the standard cache file header to the cache file. More...
 
size_t getNumberOfTables ()
 Returns the number of tables stored in the referenced cache file. More...
 
void setNumberOfTables (size_t nTables)
 Sets the number of tables to be stored in the referenced cache file. More...
 
size_t getPosition (size_t nthTable)
 Returns the character position of the passed table index. More...
 
- Public Member Functions inherited from NumeRe::NumeReDataFile
 NumeReDataFile (const std::string &filename)
 
 NumeReDataFile (const NumeReDataFile &file)
 This copy constructor extents the copy constructor of the parent class. More...
 
virtual ~NumeReDataFile ()
 
virtual bool read () override
 Pure virtual declaration of the read access method. Has to be implemented in all derived classes and can be used to read the contents of the file to memory. More...
 
virtual bool write () override
 Pure virtual declaration of the write access method. Has to be implemented in all derived classes and can be used to write the contents in memory to the target file. More...
 
NumeReDataFileoperator= (NumeReDataFile &file)
 This member function is an overload for the assignment operator. It extends the already available assingnment operator of the parent class. More...
 
void readFileInformation ()
 Reads only the header of the referenced file. More...
 
__time64_t getTimeStamp ()
 Returns the file timestamp. More...
 
virtual FileHeaderInfo getFileHeaderInformation () override
 Returns the file header information structure. More...
 
std::string getVersionString ()
 This simple member function returns the version string associated with the current file type. More...
 
- Public Member Functions inherited from NumeRe::GenericFile
 GenericFile (const std::string &fileName)
 Constructor from filename. More...
 
 GenericFile (const GenericFile &file)
 Copy constructor. More...
 
virtual ~GenericFile ()
 Virtual destructor: we'll work with instances on the heap, therefore we'll need virtual declared destructors. This destructor will clear the internal memory and closes the file stream, if it is still open. More...
 
bool is_open ()
 Wrapper for fstream::is_open() More...
 
void close ()
 Wrapper for fstream::close(). Will also clear the internal memory. More...
 
bool good ()
 Wrapper for fstream::good() More...
 
size_t tellg ()
 Wrapper for fstream::tellg() More...
 
size_t tellp ()
 Wrapper for fstream::tellp() More...
 
void seekg (size_t pos)
 Wrapper for fstream::seekg() with start from the beginning of the stream. More...
 
void seekp (size_t pos)
 Wrapper for fstream::seekp() with start from the beginning of the stream. More...
 
std::string getExtension ()
 Returns the file extension. More...
 
std::string getFileName ()
 Returns the file name. More...
 
std::string getTableName ()
 Returns the table name referenced in the file. Will default to the file name with non-alnum characters replaced with underscores, if the file does not reference a table name by itself. More...
 
std::string getComment ()
 Returns the comment stored with the referenced file. More...
 
void setComment (const std::string &comment)
 Sets the comment to be written to the referencedfile. More...
 
long long int getRows ()
 Returns the number of rows. More...
 
long long int getCols ()
 Returns the number of columns. More...
 
virtual FileHeaderInfo getFileHeaderInformation ()
 Returns the file header information structure. More...
 
virtual bool read ()=0
 Pure virtual declaration of the read access method. Has to be implemented in all derived classes and can be used to read the contents of the file to memory. More...
 
virtual bool write ()=0
 Pure virtual declaration of the write access method. Has to be implemented in all derived classes and can be used to write the contents in memory to the target file. More...
 
GenericFileoperator= (const GenericFile &file)
 Assignment operator definition. More...
 
void getData (TableColumnArray *data)
 This method copies the internal data to the passed memory address. The target memory must already exist. More...
 
TableColumnArraygetData (long long int &rows, long long int &cols)
 This method returns a pointer to the internal memory with read and write access. This pointer shall not stored for future use, because the referenced memory will be deleted upon destruction of this class instance. More...
 
void setDimensions (long long int rows, long long int cols)
 Sets the dimensions of the data table, which will be used in the future. Clears the internal memory in advance. More...
 
void setTableName (const std::string &name)
 Set the table's name. More...
 
void setTextfilePrecision (unsigned short nPrecision)
 Set the precision, which shall be used to convert the floating point numbers into strings. More...
 
void addData (TableColumnArray *data, long long int rows, long long int cols)
 This method created the internal storage and copies the passed data to this storage. More...
 
void setData (TableColumnArray *data, long long int rows, long long int cols)
 This method refernces the passed external data internally. The data is not copied and must exist as long as thos class exists. More...
 
- Public Member Functions inherited from FileSystem
 FileSystem ()
 Default constructor. More...
 
FileSystemassign (const FileSystem &_fSys)
 Assignment member function to copy the settings from another FileSystem instance. More...
 
std::string ValidFileName (std::string _sFileName, const std::string sExtension=".dat", bool checkExtension=true, bool doCleanPath=true) const
 This member function evaluates, whether the passed filename is a valid filename. One may supply a preferred filename extension. More...
 
std::string ValidFolderName (std::string _sFileName, bool doCleanPath=true, bool appendTrailingSeparator=true) const
 This member function evaluates, whether the passed foldername is a valid foldername. More...
 
std::string ValidizeAndPrepareName (const std::string &_sFileName, const std::string &sExtension=".dat") const
 This member function validizes the passed file name and creates the needed folders on-the-fly. More...
 
int setPath (std::string _sPath, bool bMkDir, std::string _sExePath)
 This member function may be used to set the preferred file path of the current FileSystem instance. More...
 
void createRevisionsFolder ()
 This member function creates the hidden revisions folders for the version control system. More...
 
std::string getPath () const
 Returns the default path of this FileSystem instance. More...
 
std::vector< std::string > getFileParts (const std::string &sFilePath) const
 This member function separates all path parts into single strings: the drive letter, the path, the name and the extension. This function may also handle folder paths and network paths. More...
 
FileInfo getFileInfo (const std::string &sFilePath) const
 Return the file information about the passed file path. More...
 
void setTokens (std::string _sTokens)
 This member function may be used to update the path placeholders of the current FileSystem instance. More...
 
bool isFile (const std::string &_sPath) const
 This function determines, whether a path name indicates a file or a folder. More...
 
void initializeFromKernel ()
 Member function to remote-initialize the class from the kernel. Cannot be used during kernel start-up. More...
 
void setProgramPath (std::string _sExePath)
 
std::string getProgramPath () const
 
void declareFileType (const std::string &sFileType)
 

Private Member Functions

void reset ()
 This member function will reset the string information and the internal storage. This is used before the next table will be read from the cache file to memory. More...
 
void readSome ()
 This member function will read the next table, which is availale in the cache file, to the internal stoage. It uses the readFile() member function from its parent class. More...
 
void writeSome ()
 This member function will write the current contents in the internal storage to the target file. Before writing, the function stores the current byte position in the target file to create the file index. The funciton uses the member function writeFile() from the parent class for writing the data. More...
 

Private Attributes

std::vector< size_t > vFileIndex
 
size_t nIndexPos
 

Additional Inherited Members

- Protected Member Functions inherited from NumeRe::NumeReDataFile
void writeHeader ()
 This member function writest the new standard header for NDAT files. It includes a dummy section, which older versions of NumeRe may read without errors, but which won't contain any reasonable information. More...
 
void writeDummyHeader ()
 This member function will write the dummy header, which is readable in older versions of NumeRe. In a nutshell, this is the legacy format of NDAT files for a 1x1 data set. More...
 
void writeFile ()
 This member function will write the data in the internal storage into the target file. More...
 
void writeColumn (const TblColPtr &col)
 Writes a single column to the file. More...
 
void readHeader ()
 This member function will read the header in the selected file. It will automatically detect, whether the file is in legacy format or not. If the file format is newer than expected, it will throw an error. More...
 
void skipDummyHeader ()
 This function jumps over the dummy section in the new file format, because it does not conatin any valid information. More...
 
void readFile ()
 This member function will read the contents of the target file. More...
 
void readColumn (TblColPtr &col)
 Reads a single column from file. More...
 
void readColumnV4 (TblColPtr &col)
 Reads a single column from file in v4 format. More...
 
void readLegacyFormat ()
 This member function reads the data section of the target file in legacy format. The function readHeader() determines, whether the target file is in legacy mode. More...
 
void * readGenericField (std::string &type, long long int &size)
 This member function will read a generic field from the header (the three fields, which can be used in future versions of NumeRe). More...
 
void deleteGenericData (void *data, const std::string &type)
 This member function will delete the data array obtained from the generic fields but convert them into their original type first, because deleting of void* is undefined behavior (the length of the field in memory is not defined). More...
 
- Protected Member Functions inherited from NumeRe::GenericFile
void open (std::ios::openmode mode)
 This method has to be used to open the target file in stream mode. If the file cannot be opened, this method throws an error. More...
 
void stripTrailingSpaces (std::string &_sToStrip)
 This method strips trailing spaces from the passed string. More...
 
void replaceDecimalSign (std::string &_sToReplace)
 This method simply replaces commas with dots in the passed string to enable correct parsing into a double. More...
 
void replaceTabSign (std::string &_sToReplace, bool bAddPlaceholders=false)
 This method replaces tabulator characters with whitespaces to simplify the column determination (the used tokenizer will only have to consider whitespaces as separator characters). Sometimes, replacing tabulators into whitespaces will destroy column information. To avoid this, placeholders (underscores) may be inserted as "empty" column cells. More...
 
std::pair< size_t, size_t > calculateCellExtents (const std::string &sContents)
 This method calculates the extents of the passed string, if it is used as a table column headlines. This method will return a std::pair<> with the maximal number of characters in a line in the first and the number of lines in the second component. More...
 
std::string getLineFromHead (long long int nCol, size_t nLineNumber)
 This method gets the selected line number from the table column headline in the selected column. If the selected text does not contain enough lines, a simple whitespaces is returned. More...
 
template<typename T >
readNumField ()
 This method is a template fo reading a numeric field of the selected template type in binary mode. More...
 
std::string readStringField ()
 This mehtod can be used to read a string field from the file in binary mode. More...
 
std::string getZipFileItem (const std::string &filename)
 This method may be used to get the contents of an embedded file in a zipfile and return the contents as string. More...
 
template<typename T >
T * readNumBlock (long long int &size)
 This method template is for reading a block of numeric data into memory in binary mode. More...
 
template<typename T >
T ** readDataArray (long long int &rows, long long int &cols)
 This method template is for reading a whole two-dimensional array of data into memory in binary mode. More...
 
std::string * readStringBlock (long long int &size)
 This method can be used for reading a block of string data to memory in binary mode. More...
 
std::vector< std::string > readTextFile (bool stripEmptyLines)
 This method may be used to read the file in text mode and to obtain the data as a vector. More...
 
std::vector< std::string > tokenize (std::string sString, const std::string &sSeparators, bool skipEmptyTokens=false)
 This method may be used to separater a line into multiple tokens using a set of separator characters. If empty token shall be skipped, then only tokens with a non-zero length are stored. More...
 
template<typename T >
void writeNumField (T num)
 This method template can be used to write a numeric value to file in binary mode. More...
 
void writeStringField (const std::string &sString)
 This method may be used to write a string to file in binary mode. More...
 
template<typename T >
void writeNumBlock (T *data, long long int size)
 This method template may be used to write a block of data of the selected type to the file in binary mode. More...
 
template<typename T >
void writeDataArray (T **data, long long int rows, long long int cols)
 This method may be used to write a two-dimensional array of data to the file in binary mode. More...
 
void writeStringBlock (std::string *data, long long int size)
 This method may be used to write a block of strings into the file in binary mode. More...
 
void createStorage ()
 This method prepares the internal storage, so that it may contain the read data. This method is only used for textual files. More...
 
void clearStorage ()
 This method cleares the internal storage. This method is called by the destructor automatically. More...
 
template<typename T >
void copyDataArray (T **from, T **to, long long int rows, long long int cols)
 This method may be used to copy two- dimensional arrays of data. Both source and target arrays have to exist in advance. More...
 
void copyStringArray (std::string *from, std::string *to, long long int nElements)
 This method may be used to copy string arrays. Both source and target arrays have to exist in advance. More...
 
template<typename T >
void copyArray (T *from, T *to, long long int nElements)
 This method template may be used to copy arrays of data of the selected type. Both source and target arrays have to exist in advance. More...
 
bool isNumeric (const std::string &sString)
 This method may be used to determine, whether a string contains only numeric data. More...
 
void assign (const GenericFile &file)
 This method is used by the assignment operator and the copy constructor to copy the contents of the passed GenericFile instance. More...
 
- Protected Member Functions inherited from FileSystem
int createFolders (const std::string &_sPath) const
 This member function creates all missing directories in the passed path. More...
 
- Protected Attributes inherited from NumeRe::NumeReDataFile
bool isLegacy
 
__time64_t timeStamp
 
long int versionMajor
 
long int versionMinor
 
long int versionBuild
 
const short fileSpecVersionMajor = 4
 
const short fileSpecVersionMinor = 0
 
float fileVersionRead
 
size_t checkPos
 
size_t checkStart
 
- Protected Attributes inherited from NumeRe::GenericFile
std::fstream fFileStream
 
std::string sFileExtension
 
std::string sFileName
 
std::string sTableName
 
std::string sComment
 
long long int nRows
 
long long int nCols
 
unsigned short nPrecFields
 
bool useExternalData
 
std::ios::openmode openMode
 
TableColumnArrayfileData
 
- Protected Attributes inherited from FileSystem
std::string sPath
 
std::string sExecutablePath
 
std::string sTokens [7][2]
 
std::string sValidExtensions
 

Detailed Description

This class resembles the cache file used to autosave and recover the tables in memory. It is derived from the NumeRe data file format and uses its functionalities to layout the data in the file: the cache file starts with a header containing the number of tables in the file and the character positions in the file, where each table starts. The tables themselves are written in the NumeRe data file format.

Definition at line 1575 of file file.hpp.

Constructor & Destructor Documentation

◆ CacheFile()

NumeRe::CacheFile::CacheFile ( const std::string &  filename)

Definition at line 1630 of file file.cpp.

◆ ~CacheFile()

NumeRe::CacheFile::~CacheFile ( )
virtual

This destructor will write the offsets for the different tables to the file before the file stream will be closed.

Definition at line 1641 of file file.cpp.

References nIndexPos, NumeRe::GenericFile::seekp(), vFileIndex, and NumeRe::GenericFile::writeNumBlock().

Here is the call graph for this function:

Member Function Documentation

◆ getNumberOfTables()

size_t NumeRe::CacheFile::getNumberOfTables ( )
inline

Returns the number of tables stored in the referenced cache file.

Returns
size_t

Definition at line 1612 of file file.hpp.

References vFileIndex.

Referenced by MemoryManager::loadFromNewCacheFile().

◆ getPosition()

size_t NumeRe::CacheFile::getPosition ( size_t  nthTable)
inline

Returns the character position of the passed table index.

Parameters
nthTablesize_t
Returns
size_t

Definition at line 1638 of file file.hpp.

References vFileIndex.

◆ read()

virtual bool NumeRe::CacheFile::read ( )
inlineoverridevirtual

Pure virtual declaration of the read access method. Has to be implemented in all derived classes and can be used to read the contents of the file to memory.

Returns
bool

Reimplemented from NumeRe::NumeReDataFile.

Definition at line 1590 of file file.hpp.

References readSome().

Referenced by MemoryManager::loadFromNewCacheFile().

Here is the call graph for this function:

◆ readCacheHeader()

void NumeRe::CacheFile::readCacheHeader ( )

This member function will read the cache file header and ensure that the version of the file is not newer than expected.

Returns
void

Definition at line 1732 of file file.cpp.

References SyntaxError::CANNOT_READ_FILE, NumeRe::GenericFile::copyArray(), NumeRe::NumeReDataFile::fileSpecVersionMajor, SyntaxError::INSUFFICIENT_NUMERE_VERSION, SyntaxError::invalid_position, NumeRe::GenericFile::open(), NumeRe::GenericFile::readStringField(), NumeRe::GenericFile::sFileName, NumeRe::NumeReDataFile::timeStamp, NumeRe::NumeReDataFile::versionBuild, NumeRe::NumeReDataFile::versionMajor, NumeRe::NumeReDataFile::versionMinor, and vFileIndex.

Referenced by MemoryManager::loadFromNewCacheFile().

Here is the call graph for this function:

◆ readSome()

void NumeRe::CacheFile::readSome ( )
private

This member function will read the next table, which is availale in the cache file, to the internal stoage. It uses the readFile() member function from its parent class.

Returns
void

Definition at line 1679 of file file.cpp.

References SyntaxError::CANNOT_READ_FILE, NumeRe::GenericFile::fFileStream, NumeRe::NumeReDataFile::readFile(), reset(), NumeRe::GenericFile::tellg(), and vFileIndex.

Referenced by read().

Here is the call graph for this function:

◆ reset()

void NumeRe::CacheFile::reset ( )
private

This member function will reset the string information and the internal storage. This is used before the next table will be read from the cache file to memory.

Returns
void

Definition at line 1661 of file file.cpp.

References NumeRe::GenericFile::clearStorage(), NumeRe::GenericFile::sComment, and NumeRe::GenericFile::sTableName.

Referenced by readSome().

Here is the call graph for this function:

◆ setNumberOfTables()

void NumeRe::CacheFile::setNumberOfTables ( size_t  nTables)
inline

Sets the number of tables to be stored in the referenced cache file.

Parameters
nTablessize_t
Returns
void

Definition at line 1625 of file file.hpp.

References vFileIndex.

Referenced by MemoryManager::saveToCacheFile().

◆ write()

virtual bool NumeRe::CacheFile::write ( )
inlineoverridevirtual

Pure virtual declaration of the write access method. Has to be implemented in all derived classes and can be used to write the contents in memory to the target file.

Returns
bool

Reimplemented from NumeRe::NumeReDataFile.

Definition at line 1596 of file file.hpp.

References writeSome().

Referenced by MemoryManager::saveToCacheFile().

Here is the call graph for this function:

◆ writeCacheHeader()

void NumeRe::CacheFile::writeCacheHeader ( )

This member function will write the standard cache file header to the cache file.

Returns
void

Definition at line 1784 of file file.cpp.

References AutoVersion::BUILD, NumeRe::NumeReDataFile::fileSpecVersionMajor, NumeRe::NumeReDataFile::fileSpecVersionMinor, AutoVersion::MAJOR, AutoVersion::MINOR, nIndexPos, NumeRe::GenericFile::open(), NumeRe::GenericFile::tellp(), date::detail::trunc(), vFileIndex, NumeRe::GenericFile::writeNumBlock(), NumeRe::GenericFile::writeNumField(), and NumeRe::GenericFile::writeStringField().

Referenced by MemoryManager::saveToCacheFile().

Here is the call graph for this function:

◆ writeSome()

void NumeRe::CacheFile::writeSome ( )
private

This member function will write the current contents in the internal storage to the target file. Before writing, the function stores the current byte position in the target file to create the file index. The funciton uses the member function writeFile() from the parent class for writing the data.

Returns
void

Definition at line 1704 of file file.cpp.

References NumeRe::GenericFile::tellp(), vFileIndex, and NumeRe::NumeReDataFile::writeFile().

Referenced by write().

Here is the call graph for this function:

Member Data Documentation

◆ nIndexPos

size_t NumeRe::CacheFile::nIndexPos
private

Definition at line 1579 of file file.hpp.

Referenced by writeCacheHeader(), and ~CacheFile().

◆ vFileIndex

std::vector<size_t> NumeRe::CacheFile::vFileIndex
private

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