File I/O APIs differ slightly between Windows and Android (POSIX) operating systems, and we have to hide these differences behind a consistent set of C++ interfaces. All libraries we have compiled in Chapter 2, Porting Common Libraries use their own callbacks and interfaces. In order to unify them, we shall write adapters in this and subsequent chapters.
Please make sure you are familiar with the UNIX concept of the file and memory mapping. Wikipedia may be a good start (http://en.wikipedia.org/wiki/Memory-mapped_file).
From now on, our programs will read input data using the following simple interface. The base class
iObject
is used to add an intrusive reference counter to instances of this class:class iIStream: public iObject { public: virtual void Seek( const uint64 Position ) = 0; virtual uint64 Read( void* Buf, const uint64 Size ) = 0; virtual bool Eof() const = 0; virtual uint64 GetSize() const = 0; virtual uint64...