Merge branch 'charm' of charmgit:charm into charm
[charm.git] / examples / pose / ChunkSim / Worker.h
1 // Distribution types
2 #define RANDOM 0
3 #define IMBALANCED 1
4 #define UNIFORM 2
5
6 // Connectivity types
7 #define SPARSE 0
8 #define HEAVY 1
9 #define FULL 2
10
11 #define WORKER_SZ 1000
12
13 class TeamData {
14  public:
15   int teamID, numTeams, numWorkers;
16   TeamData& operator=(const TeamData& obj) {
17     eventMsg::operator=(obj);
18     teamID = obj.teamID;
19     numTeams = obj.numTeams;
20     numWorkers = obj.numWorkers;
21     return *this;
22   }
23 };
24
25 class WorkMsg {
26  public:
27   int workerID;
28   int data[10];
29   WorkMsg& operator=(const WorkMsg& obj) {
30     eventMsg::operator=(obj);
31     workerID = obj.workerID;
32     for (int i=0; i<10; i++) data[i] = obj.data[i];
33     return *this;
34   }
35 };
36
37
38 class worker {
39  public:
40   int workerID;
41   int data[WORKER_SZ];
42   worker();
43   void set(int wid); 
44   worker& operator=(const worker& obj);
45   void pup(PUP::er &p) { p(workerID); p(data, WORKER_SZ); }
46 };
47
48 class team {
49  public:
50   int teamID, numTeams, numWorkers;
51   worker *myWorkers;
52   team() { }
53   team(TeamData *m);
54   ~team() { delete[] myWorkers; }
55   team& operator=(const team& obj) {
56     rep::operator=(obj);
57     teamID = obj.teamID;
58     numTeams = obj.numTeams;
59     numWorkers = obj.numWorkers;
60     myWorkers = new worker[numWorkers/numTeams];
61     for (int i=0; i<numWorkers/numTeams; i++) myWorkers[i] = obj.myWorkers[i];
62     return *this;
63   }
64   void pup(PUP::er &p) { 
65     chpt<state_team>::pup(p); 
66     p(teamID); p(numTeams); p(numWorkers);
67     if (p.isUnpacking()) myWorkers = new worker[numWorkers/numTeams];
68     p(myWorkers, numWorkers/numTeams);
69   }
70   void work(WorkMsg *sm);
71   void work_anti(WorkMsg *sm);
72   void work_commit(WorkMsg *sm);
73   void doWork(int k);
74 };