Apple's desktop operating system was formerly called "Mac OS X" and "OS X", but since 2016 it has been called "macOS" (starting with version 10.12).
Changing across all comments and documentation to use this current terminology, except in cases where the historical versions are explicitly referenced. No code changes are made; we should consider changing those in future PRs.
The pos() method of BufferedWriteStream should return the stream position
but actually returns the buffer position. That completely breaks saving
the game in AGS engine on the platforms using BufferedWriteStream wrapper
for savefile handling, such as Nintendo Switch. AGS engine's save file
writing functions use GetPosition() with later Seek() on stream,
so an invalid return value from GetPosition() results in invalid save files
that cannot be loaded and are skipped by the engine.
After reading directly from the parent stream, the buffer needs to be
filled with the end of the read data so seeking back in the stream into
the buffered area and reading returns data consistent with the parent
stream.
Fixes bug #11342 (PSP port only).
It returns int32, because some complex streams are derived from both
WriteStream and ReadStream, and in ReadStream pos() returns int32,
because -1 means an error.
I had to change MemoryStream's uint32 to int32, which is probably not so
good.
SafeSubReadStream is basically a SeekableSubReadStream that
re-seek()s the parent stream before each read(). That way, more than
one SafeSubReadStream of the same parent stream can be used safely
at the same time, at the cost of increasing IO.
Instead I moved the call to ReadStream::eos into SubReadStream::eos.
fuzzie pointed out that in certain cases this resulted in a lot of eos calls
before. Those were rather needlessly, since checking the eos bit of the
decorated stream in read does not give any advantage over checking it when
the client code really wants to test the eos flag.
This is the only we need right now, and it saves a few bytes per
instance. The template approach I used before has the drawback that it
increases the binary size, which negates the benefit. Thanks to LordHoto
for pointing this out.
svn-id: r54344
The assert() macro may be compiled to be empty. In that case, its
arguments are *NOT* evaluated. Hence, things like
assert(doSomething())
must not be used whenever doSomething() has important side effects.
Also document BufferedWriteStream::flushBuffer() and explain why it
exists parallel to BufferedWriteStream::flush().
svn-id: r54322
I need the write buffering for the new version of the PSP streams and thought the simplest way to implement it would be along the lines of BufferedReadStream. Sadly, I found a nasty little bug in BRS but that's taken care of.
Also, I adapted these streams for target-specific memory allocation by using virtual functions for allocation/deallocation.
svn-id: r52325