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, MemoryStream
s can be streamed into IFile
s, the same is true for the TextStream
s. 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.