Skip to main content

File system thoughts

I've been working today morning on the file system (today afternoon I'm going to install my new Asus K8N-SLI Premium ;) mobo so my desktop PC will be running again). I've added some generic stream classes: IStream, MemoryStream, TextStream and IFile. Some of them depend on each other, MemoryStreams can be streamed into IFiles, the same is true for the TextStreams. The log uses now the TextStream which means that is basically stores a TextStream and the output file and redirects all incoming data to the TextStream with a bit of formatting (log prepends the current timestamp). This approach has some nice advantages as for example MemoryArchive can wrap around a MemoryStream and does not need to fall back to the C++ I/O streams internally. MemoryArchive provides some serialization functions for primitive data types and hides a bit of MemoryStream's functions (namely, the raw read/write functions, and the seek function). Another nice thing is that MemoryArchive can stream into any kind of stream now, including MemoryStream - which means you can do deep copies "for free" without additional work. Code like this is enough:

MemoryArchive::operator=(MemoryArchive& rhs) {
    MemoryStream stream;
    streamTo (&stream);
    rhs.streamFrom (&stream);

So much for now, I'll post a few more details when the refactoring/rewrite is over.