Pfligersdorffer, Christian wrote:
boost-users-bounces@lists.boost.org wrote:
Pfligersdorffer, Christian wrote:
Hello all!
I face the problem of partitioning a file that i read with
ifstream into portions that are to be processed by some clients. I want to ensure that a client only views a specific part (window, range) of the stream. So far I store 2 streamoffsets posStart and posEnd, call seekg on the stream, pass it to the client by ref and rely on the client to check when it reached posEnd.
However, I certainly cannot copy the whole range into a new
stream object and pass that one. Efficiency does matter.
Any suggestions? Maybe some iterator-magic can be done?
How about Boost.Spirit file_iterator? That is a read-only RandomAccessIterator for files. http://spirit.sourceforge.net/distrib/spirit_1_8_3/libs/spirit /doc/file_iterator.html
Hello Shunsuke,
that's a good idea but unfortunately I cannot use this class in my case. I have some special decoding ifstreams doing decompression and the like. So I'd really need an iterator that takes an i(f)stream object in it's constructor and wraps that.
Thanks anyway!
How about an iostreams restriction? http://boost.org/libs/iostreams/doc/functions/restrict.html I'm using it to pull data out of a zip file and zlib_decompressor to decompress it. :-) Also, http://www.teslacore.it/wiki/index.php?title=BoostPicks#Restriction has some sample code. Hope this helps! Phillip