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











SourceForge.net Logo

CoPipe

 

Demonstrates using CoWork pipe for pipeline threaded processing

 

 

CoPipe.cpp

 

#include <Core/Core.h>

 

using namespace Upp;

 

struct ReadIds {

    CoWork        co;

    Index<String> out;

    

    enum {

        PROCESSLINE,

        PROCESSID,

    };

 

    void Do(const char *path)

    {

        FileIn in(path);

        if(!in)

            return;

        while(!in.IsEof()) {

            String line = in.GetLine();

            co.Pipe(PROCESSLINE, [=] { SplitLine(line); });

        }

        co.Finish();

    }

    

    void SplitLine(const String& l)

    {

        const char *s = l;

        while(*s)

            if(IsAlpha(*s)) {

                const char *b = s++;

                while(IsAlNum(*s))

                    s++;

                String w(b, s);

                co.Pipe(PROCESSID, [=] { ProcessId(w); });

            }

            else

                s++;

    }

    

    void ProcessId(const String& w)

    {

        out.FindAdd(w);

    }

};

 

CONSOLE_APP_MAIN

{

    StdLogSetup(LOG_COUT|LOG_FILE);

 

    String fn;

    int argc = CommandLine().GetCount();

    const Vector<String>& argv = CommandLine();

    if(argc < 1)

        fn = GetDataFile("CoPipe.cpp");

    else

        fn = argv[0];

    

    ReadIds h;

    h.Do(fn);

    

    LOG(h.out);

}

 

 

 

 

Do you want to contribute?