On Jan 25, 5:34 pm, "Jorge Marques Pelizzoni" <[EMAIL PROTECTED]>
wrote:
> One way to do it is exemplified below.
...
> string rslt;
> {
> FileSource fs(is, true /* automatically call PumpAll */,
It reads whole file into the rslt, all goes into memory. I try to avoid
it.
For instance, if I have a big file, say 500mb and want to read a line
number 12345 I don't need to read whole file into memory, I may just
skip 12344 lines.
I feel it's impossible... :(
I have only idea something like this, may be it's best possible
solution:
struct InputReadCallbackContext
{
CryptoPP::Source *pump;
CryptoPP::BufferedTransformation *source;
};
static int xmlInputReadFromStreamCallback(void *_ctx, char *buffer, int
len)
{
using namespace CryptoPP;
InputReadCallbackContext *ctx = (InputReadCallbackContext *)_ctx;
try
{
ctx->pump->Pump(1234);// Just a random number!!! And difficult
to
understand what should be here.
return ctx->source->Get((byte *)buffer, (size_t) len);
}
catch(Exception &e)
{
return -1;
}
}
...
FileSource source("a file", false);
InputReadCallbackContext ctx;
ctx.pump = &source;
source.Detach(ctx.source = new ZlibDecompressor);
xmlDocPtr doc = xmlReadIO(xmlInputReadFromStreamCallback, ... &ctx,
...);
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the "Crypto++ Users"
Google Group.
To unsubscribe, send an email to [EMAIL PROTECTED]
More information about Crypto++ and this group is available at
http://www.cryptopp.com.
-~----------~----~----~----~------~----~------~--~---