(In reply to Adrian Johnson from comment #78)
> I agree that the two calls to doGetChars and updateHash should be merged but
> I don't think a for loop is the best way to process loops where the
> increment is not exactly the same on each iteration. Maybe something like
> this:
>
> void FormFieldSignature::hashSignedByteRange(SignatureHandler *handler,
> Goffset start, Goffset len)
> {
> const int CHUNK_SIZE = 4096;
> unsigned char buffer[CHUNK_SIZE];
> Goffset i = 0;
> int byte_count = CHUNK_SIZE;
>
> doc->getBaseStream()->setPos(start);
> while (i < len)
> {
> if (i + CHUNK_SIZE > len)
> byte_count = len - i;
>
> doc->getBaseStream()->doGetChars(byte_count, buffer);
> handler->updateHash(buffer, byte_count);
> i += byte_count;
> }
> }
I was thinking of something like
doc->getBaseStream()->setPos(start);
for (Goffset offset = 0; offset < len; offset += CHUNK_SIZE)
{
const int byte_count = min(CHUNK_SIZE, len - offset);
to make the loop more regular as we don't care if offset > len instead of offset == len after the last iteration. (That code was not tested or even compiled.)
> I don't mind if we fix all this later. It doesn't have to hold up the
> initial release.
Maybe if there is some external pressure to release this, but otherwise I'd propose polishing it now, since there is a certain momentum not to touch working code once it is released.
(In reply to Adrian Johnson from comment #78) ure::hashSigned ByteRange( SignatureHandle r *handler, eam()-> setPos( start); eam()-> doGetChars( byte_count, buffer); >updateHash( buffer, byte_count);
> I agree that the two calls to doGetChars and updateHash should be merged but
> I don't think a for loop is the best way to process loops where the
> increment is not exactly the same on each iteration. Maybe something like
> this:
>
> void FormFieldSignat
> Goffset start, Goffset len)
> {
> const int CHUNK_SIZE = 4096;
> unsigned char buffer[CHUNK_SIZE];
> Goffset i = 0;
> int byte_count = CHUNK_SIZE;
>
> doc->getBaseStr
> while (i < len)
> {
> if (i + CHUNK_SIZE > len)
> byte_count = len - i;
>
> doc->getBaseStr
> handler-
> i += byte_count;
> }
> }
I was thinking of something like
doc->getBaseStr eam()-> setPos( start);
for (Goffset offset = 0; offset < len; offset += CHUNK_SIZE)
{
const int byte_count = min(CHUNK_SIZE, len - offset);
doc-> getBaseStream( )->doGetChars( byte_count, buffer); >updateHash( buffer, byte_count);
handler-
}
to make the loop more regular as we don't care if offset > len instead of offset == len after the last iteration. (That code was not tested or even compiled.)
> I don't mind if we fix all this later. It doesn't have to hold up the
> initial release.
Maybe if there is some external pressure to release this, but otherwise I'd propose polishing it now, since there is a certain momentum not to touch working code once it is released.
Best regards, Adam.