Hmm. I definitely misunderstood what this function was intended to do.
As I understand things now, there are two ways to approach processing graphical information:
1) As a stream of information to be processed in the order it arrives. 2) As an aggregate to be processed all at once.
The PNG format is specifically designed to allow it to be processed as a stream with good efficiency. Processing the aggregate is done by processing the stream and accumulating the aggregated information.
The key interface to the stream approach is to enumerate the blocks and process each one as you come to it. This approach has already been implemented.
The strategy of the aggregate approach is to have an array of blocks and use an index to access the elements of the array. The key elements are getting the number of blocks (this function) and getting access to the block by its index number (using 'GetReaderByIndex'). This approach has not been implemented.
To do this efficiently, it should be possible to validate the correctness of each block WITHOUT getting into any more details about the blocks than possible.
Have I got this right so far?