New I/O subsystem progress

It’s been a while since my last commit. I have been really busy with my private life (work, studies, and my family). But I’ve invested the last two weeks in rewriting the I/O subsystem of the engine. The purpose of this change is that the old subsystem inherited from Casandra was quite limited, and with poor error handling.

The new subsystem has a stronger error handling architecture, it’s hardly object-oriented, offers better support for Unicode strings, and uses much less memory than the ancient one, including a really efficient object reference count algorithm which prevents buffer overflows and memory leaking in almost any case.

The new subsystem is also thread safe, including support for multithread implementations (parallel loading of resources), high precision timers, mutex, auto-locking mutex, and fast atomic mutex (spin locks).

Finally, support for zip files has been extended, adding support to “bzip2” and LZMA algorithms to the existing “deflate” one.

I’m actually documenting the code to push the first snapshot in the mercurial repository. After that, I’ll start working with the render subsystem.

OpenWatcom compatibility

I’ve also been trying to add support for the OpenWatcom c++ compiler, but the problem is that the STL implementation of OW is incomplete; and Cassini makes a heavy use of STL. So after a lot of research, I’ve found some blogs where people says it’s possible to use STLPORT with OpenWatcom, so my porting strategy will be focused on STLPORT compatibility rather than OpenWatcom’s STL implementation. Anyway, the official supported compilers will still be GCC, MingW-GCC and Visual C++ (2002, 2003, 2005, 2008 and 2010).