doc: Add serial to list of ci file reserved words
[charm.git] / src / ck-ldb / LBObj.h
1 /**
2  * \addtogroup CkLdb
3 */
4 /*@{*/
5
6 #ifndef LBOBJ_H
7 #define LBOBJ_H
8
9 #include "lbdb.h"
10
11 class LBDB;
12
13 class LBObj
14 {
15 friend class LBDB;
16
17 public:
18   LBObj(LBDB *_parentDB, const LDObjHandle &_h, void *usr_ptr = NULL, CmiBool _migratable=CmiTrue, CmiBool _asyncArrival = CmiFalse) {
19     data.handle = _h;
20     data.migratable = _migratable;
21     data.asyncArrival = _asyncArrival;
22     Clear();
23 //    data.cpuTime = 0.;
24 //    data.wallTime = 0.;
25 //    data.minWall = 1e6;
26 //    data.maxWall = 0.;
27     userData = usr_ptr;
28     parentDB = _parentDB;
29 //    migratable = _migratable;
30 //    registered = CmiTrue;
31     startWTime = -1.0;
32     lastWallTime = .0;
33 #if CMK_LB_CPUTIMER
34     startCTime = -1.0;
35     lastCpuTime = .0;
36 #endif
37   }
38
39   ~LBObj() { };
40
41 #if 0
42   LBObj(LBDB *_parentDB, LDOMHandle _omhandle, LDObjid _id,
43         void *_userData = 0, CmiBool _migratable=CmiTrue) {
44     parentDB = _parentDB;
45 //    parentOM = _omhandle;
46 //    myhandle.id = _id;
47 //    userData = _userData;
48     migratable = _migratable;
49     registered = CmiFalse;
50   };
51
52   void DepositHandle(const LDObjHandle &_h) {
53 //    CkAssert(_h.id == myhandle.id);
54 //    myhandle = _h;
55     data.handle = _h;
56 //    data.omHandle = _h.omhandle;
57     data.migratable = migratable;
58     data.cpuTime = 0.;
59     data.wallTime = 0.;
60     registered = CmiTrue;
61   };
62 #endif
63
64   void Clear(void);
65
66   void IncrementTime(LBRealType walltime, LBRealType cputime);
67   inline void StartTimer(void) {
68         startWTime = CkWallTimer();
69 #if CMK_LB_CPUTIMER
70         startCTime = CkCpuTimer();
71 #endif
72   }
73   inline void StopTimer(LBRealType* walltime, LBRealType* cputime) {
74         if (startWTime >= 0.0) {        // in case startOn in middle of entry
75           const double endWTime = CkWallTimer();
76           *walltime = endWTime - startWTime;
77 #if CMK_LB_CPUTIMER
78           const double endCTime = CkCpuTimer();
79           *cputime = endCTime - startCTime;
80 #else
81           *cputime = *walltime;
82 #endif
83         }
84         else {
85           *walltime = *cputime = 0.0;
86         }
87   }
88
89   inline void getTime(LBRealType *w, LBRealType *c) {
90     *w = data.wallTime;
91 #if CMK_LB_CPUTIMER
92     *c = data.cpuTime;
93 #else
94     *c = *w;
95 #endif
96   }
97
98   inline void setTiming(LBRealType cputime)
99   {
100     data.wallTime = cputime;
101 #if CMK_LB_CPUTIMER
102     data.cpuTime = cputime;
103 #endif
104   }
105
106   inline LDOMHandle &parentOM() { return data.handle.omhandle; }
107   inline const LDObjHandle &GetLDObjHandle() const { return data.handle; }
108   inline void SetMigratable(CmiBool mig) { data.migratable = mig; }
109   inline void UseAsyncMigrate(CmiBool async) { data.asyncArrival = async; }
110   inline LDObjData &ObjData() { return data; };
111   inline void lastKnownLoad(LBRealType *w, LBRealType *c) {
112     *w = lastWallTime;
113 #if CMK_LB_CPUTIMER
114     *c = lastCpuTime;
115 #else
116     *c = *w;
117 #endif
118   }
119   inline void *getUserData() { return  userData; }
120 private:
121
122   LBDB* parentDB;
123   void *userData;
124 //  LDOMHandle parentOM;
125 //  LDObjHandle myhandle;
126   LDObjData data;
127 //  CmiBool registered;
128   double startWTime;             // needs double precision
129   LBRealType lastWallTime;
130 #if CMK_LB_CPUTIMER
131   double startCTime;
132   LBRealType lastCpuTime;
133 #endif
134 //  CmiBool migratable;   // temp
135 };
136
137 #endif
138
139 /*@}*/