Re: [crc] Simple example please
Daryle, Daryle Walker wrote:
One compiler finished after the above 'fix'. The other (a variant of GCC 3.1) complained about missing symbols at link-time; it could not create the global objects hidden in Boost.CRC. (I haven't worked on the code in a long time; there could be quirks on compilers written after Boost.CRC.)
When I ran the program under the compiler that worked, the "readsome" function always returned zero! There were no suitable substitutes; the "read" function doesn't tell you how many characters it read (bad if the last block isn't full) and the multi-character "get" functions use delimiters. So this program is stuck at single-character reads at the moment. Maybe I should switch to the stream-buffer method you used.
Can you try this out to make sure the problems aren't just mine?
With gcc 3.3 on Linux, 'readsome' variant, 'get' variant and 'sbumpc' variant all produce the same output. However, I'm not sure that 'readsome' variant should work. Here's what "man std::iostream" tells about 'readsome'. if A > 0, extracts min(A,n) [ A = rdbuf()->in_avail() ] ... The goal is to empty the current buffer, and to not request any more from the external input sequence controlled by the streambuf. Concerning 'in_avail()': If a read position is available, returns the number of characters available for reading before the buffer must be refilled. Otherwise returns the derived showmanyc(). Lastly, about 'showmanyc()': Base class version does nothing, returns zero. So, this all leads to conclusion that 'readsome' is required to read all characted currently available in stream buffer, but may ignore anything else. I believe that the right way is to use 'read' function, together with 'gcount()' with tells how many characters were read by the last unformatted input operation. The main loop will become: do { ifs.read(buffer, BLOCK_SIZE); result.process_bytes(buffer, ifs.gcount()); } while(ifs); Of course, this variant produces the same results for me. Can you try with your compiler? - Volodya P.S. In fact, I still don't understand what 'in_avail()' is good for...
participants (1)
-
Vladimir Prus