Overview
Examples
Screenshots
Comparisons
Applications
Download
Documentation
Bazaar
Status & Roadmap
FAQ
Authors & License
Forums
Funding Ultimate++
Search on this site











SourceForge.net Logo

FilterStream

 

Demonstrates usage of InFilterStream and OutFilterStream for compression

 

 

FilterStream.cpp

 

#include <Core/Core.h>

 

using namespace Upp;

 

String data;

 

void AnythingPut(const void *ptr, int count)

{

    data.Cat((const char *)ptr, count);    

}

 

void AnythingEnd()

{

    LOG("----- STREAM CLOSED");

}

 

struct ProgressFilter { // Simple filter example just prints amount of data processed

    Callback2<const void *, int> WhenOut;

    void Put(const void *ptr, int size) {

        DLOG("#### Loaded " << size << " bytes");

        WhenOut(ptr, size);

    }

    void End() {}

};

 

CONSOLE_APP_MAIN

{

    String path = GetHomeDirFile("test.gz");

    {

        FileOut fout(path);

        Zlib zlib;

        OutFilterStream out(fout, zlib);

        zlib.GZip().Compress();

        out.Put("Hello world!");

        out.Close();

    }

 

    {

        FileIn fin(path);

        Zlib zlib;

        InFilterStream in(fin, zlib);

        zlib.GZip().Decompress();

        LOG(in.GetLine());

    }

    

    {

        FileIn fin(GetDataFile("FilterStream.cpp"));

        ProgressFilter pf;

        InFilterStream in(fin, pf);

        in.SetBufferSize(64); // Set it small to demonstrate the example

        LOG("==================================");

        while(!in.IsEof())

            LOG(in.GetLine());

    }

 

    { // In this case we are using InFilterStream without input stream to represent HttpRequest as input stream

        HttpRequest http("www.ultimatepp.org");

        InFilterStream in;

        http.WhenContent = callback(&in, &InFilterStream::Out);

        in.More = callback(&http, &HttpRequest::Do);

        http.Blocking();

        LOG("==================================");

        while(!in.IsEof())

            LOG(in.GetLine());

    }

 

    { // In this case we are using OutFilterStream without out stream to represent anything with Put as stream

        OutFilterStream out;

        out.Filter = callback(AnythingPut);

        out.End = callback(AnythingEnd);

        out << "Hello world!";

    }

    LOG(data);

}

 

 

 

 

Do you want to contribute?