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.
-~----------~----~----~----~------~----~------~--~---

Reply via email to