#ifndef _PL_FORK1_H_
|
#define _PL_FORK1_H_
|
|
#include "PipeLine.h"
|
|
// p1e1 p1e2<fork> p1e3 ... p1eN
|
// p2e1 p2e2... p2eN
|
class PL_Fork1 : public PipeLineElem
|
{
|
public:
|
enum ForkBy
|
{
|
// do nothing
|
FB_NONE,
|
|
// time 1: p1e1 p1e2 [p1e3 ... p1eN]
|
// time 2: p1e1 p1e2 [p2e1 p2e2... p2eN]
|
FB_TURNS,
|
|
// p1e1 p1e2 [p1e3 ... p1eN]|[p2e1 p2e2... p2eN]
|
FB_RANDOM,
|
|
// supported now!
|
// p1e1 p1e2 TYPE1[p1e3 ... p1eN] TYPE2[p2e1 p2e2... p2eN]
|
// Sync behavior depends on ForkSync
|
FB_PM_TYPE,
|
|
// supported now!
|
FB_MB_TYPE,
|
|
// FS_MAIN_PL_FIRST: p1e1 p1e2 [p1e3 p2e1] [p1e4 p2e2] ...
|
// FS_MAIN_PL_LAST : p1e1 p1e2 [p2e1 p1e3] [p2e2 p1e4] ...
|
FB_ALTERNATE
|
};
|
|
enum ForkSync
|
{
|
// do nothing
|
FS_NONE,
|
|
// supported now!
|
FS_PARALLEL,
|
|
// Result of main pl will be paid to branch pl
|
FS_MAIN_PL_FIRST,
|
|
// Result of branch pl will be paid to main pl
|
FS_BRANCH_PL_FIRST
|
};
|
|
public:
|
PL_Fork1();
|
virtual ~PL_Fork1();
|
|
virtual bool init(void* args);
|
virtual void finit();
|
|
virtual bool pay(const PipeMaterial& pm);
|
virtual bool gain(PipeMaterial& pm);
|
|
void attach_pipe_line(PipeLine* pl);
|
|
private:
|
void* internal;
|
PipeLine* pl;
|
};
|
|
struct PL_Fork1_Config
|
{
|
PL_Fork1::ForkBy forkBy;
|
PL_Fork1::ForkSync forkSync;
|
|
int mainPLType;
|
int branchPLType;
|
|
PL_Fork1_Config() :
|
forkBy(PL_Fork1::FB_NONE), forkSync(PL_Fork1::FS_NONE), mainPLType(0), branchPLType(0)
|
{ }
|
};
|
|
PipeLineElem* create_PL_Fork1();
|
|
#endif
|