
Is it possible to read a range of bytes with a single function call? Or would that require one function call per byte?
At the moment, yes. We will implement insert() for range copy using iterators, and also low-level methods read() and write() for block copy. However, the whole sense of random access files is that once the data has been accessed, it is very likely to be in memory, and you rarely have to copy it into separate buffer. Operations can be performed with data in place with no performance degradation (operator [] is inline and incurs virtually no overhead).
And how are IO errors handled if memory mapping is used?
Interesting question. All errors that are received from system routines can, and actually are handled. But when it comes to errors raised by virtual memory manager, i.e I/O errors during paging occurs, or when the storage where the mapped file resides is removed, there seems no way for library code to handle it, since the error has to be handled on the level of memory management. However, we will investigate this case further. -- Svyatoslav Trukhanov, Oleksii Ursulenko