xingzilong
2017-08-18 9e5babf9db52e64bdae60137be7696e56241fca6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#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