RWFileManagerRWFile
Member Functions |
allocate() deallocate() endData() start() |
typedef long RWoffset ; typedef unsigned long RWspace; // (typically) #include <rw/filemgr.h> RWFileManager f("file.dat");
Class RWFileManager allocates and deallocates storage in a disk file, much like a "freestore" manager. It does this by maintaining a linked list of free space within the file. Note: Class RWFileManager inherits class RWFile as a public base class; hence all the public member functions of RWFile are visible to RWFileManager. They are not listed here.
If a file is managed by an RWFileManager then reading or writing to unallocated space in the file will have undefined results. In particular, overwriting the end of allocated space is a common problem which usually results in corrupted data. One way to encounter this problem is to use binaryStoreSize() to discover the amount of space needed to store an RWCollection. For most purposes, the storage size of an RWCollection is found using the RWCollectable method recursiveStoreSize().
None
RWFileManager(const char* filename, const char* mode = 0);
Constructs an RWFileManager for the file with path name filename using mode mode. The mode is as given by the Standard C library function fopen(). If mode is zero (the default) then the constructor will attempt to open an existing file with the given filename for update (mode "rb+"). If this is not possible, then it will attempt to create a new file with the given filename (mode "wb+"). If the file exists and is not empty, then the constructor assumes it contains an existing file manager; other contents will cause an exception of type RWExternalErr to be thrown. If no file exists or if an existing file is empty, then the constructor will attempt to create the file (if necessary) and initialize it with a new file manager. The resultant object should be checked for validity using function isValid(). A possible exception that could occur is RWFileErr.
RWoffset allocate(RWspace s);
Allocates s bytes of storage in the file. Returns the offset to the start of the storage location. The very first allocation for the file is considered "special" and can be returned at any later time by the function start(). A possible exception that could occur is RWFileErr.
void deallocate(RWoffset t);
Deallocates (frees) the storage space starting at offset t. This space must have been previously allocated by a call to allocate(). The very first allocation ever made in the file is considered "special" and cannot be deallocated. A possible exception that could occur is RWFileErr.
RWoffset endData();
Returns an offset just past the end of the file.
RWoffset start();
Returns the offset of the first space ever allocated for data in this file. If no space has ever been allocated, returns RWNIL. This is typically used to "get started" and find the rest of the data in the file.