58 lines
1.8 KiB
C
58 lines
1.8 KiB
C
|
// Copyright (C) 2005, Ondra Kamenik
|
||
|
|
||
|
// $Id: memory_file.h 762 2006-05-22 13:00:07Z kamenik $
|
||
|
|
||
|
#ifndef OGU_MEMORY_FILE
|
||
|
#define OGU_MEMORY_FILE
|
||
|
|
||
|
namespace ogu {
|
||
|
/** This function calculates an offset of a given position in a
|
||
|
* given string. The position is given by the line number and by
|
||
|
* the offset in the line (both starting from 1). */
|
||
|
int calc_pos_offset(int length, const char* str, int line, int col);
|
||
|
/** This function calculates a line number and column number of a
|
||
|
* character given by the offset in the string. It is inverse to
|
||
|
* calc_pos_offset. */
|
||
|
void calc_pos_line_and_col(int length, const char* str, int offset,
|
||
|
int& line, int& col);
|
||
|
|
||
|
/** This class opens a given file and makes its copy in memory and
|
||
|
* appends it with the '\0' character. Since the type of length is
|
||
|
* int, it can store files with size at most 4GB. If the file
|
||
|
* could be opened for reading, data is NULL and length is -1. If
|
||
|
* the file is empty but exists, len is zero and data points to a
|
||
|
* newly allocated memory containing '\0' character at the end. */
|
||
|
class MemoryFile {
|
||
|
protected:
|
||
|
int len;
|
||
|
char* data;
|
||
|
public:
|
||
|
MemoryFile(const char* fname);
|
||
|
virtual ~MemoryFile()
|
||
|
{if (data) delete [] data;}
|
||
|
int length() const
|
||
|
{return len;}
|
||
|
const char* base() const
|
||
|
{return data;}
|
||
|
bool exists() const
|
||
|
{return len != -1;}
|
||
|
/** Return the offset of a character in the given line
|
||
|
* (starting from 1) with the given offset in the line. */
|
||
|
int offset(int line, int lineoff) const
|
||
|
{return calc_pos_offset(len, data, line, lineoff);}
|
||
|
/** Return the line number and column number of the character
|
||
|
* defined by the offset. */
|
||
|
void line_and_col(int offset, int& line, int& col) const
|
||
|
{calc_pos_line_and_col(len, data, offset, line, col);}
|
||
|
};
|
||
|
|
||
|
|
||
|
};
|
||
|
|
||
|
|
||
|
#endif
|
||
|
|
||
|
// Local Variables:
|
||
|
// mode:C++
|
||
|
// End:
|