2 #ifndef Scheduler_DEFINE
3 #define Scheduler_DEFINE
6 #define SCHEDULER_HIGH_OFFSET_BITS 20
7 #define SCHEDULER_LOW_OFFSET_BITS 8
8 #define SCHEDULER_LAST_OFFSET_BITS 4
10 #define SCHEDULER_HIGH_OFFSET_DEC (SCHEDULER_LOW_OFFSET_BITS+SCHEDULER_LAST_OFFSET_BITS)
11 #define SCHEDULER_LOW_OFFSET_DEC (SCHEDULER_LAST_OFFSET_BITS)
13 #define SCHEDULER_HIGH_OFFSET_MASK ((1<<SCHEDULER_HIGH_OFFSET_BITS)-1)
14 #define SCHEDULER_LOW_OFFSET_MASK ((1<<SCHEDULER_LOW_OFFSET_BITS)-1)
18 typedef int (*UpdateFunc
)(struct Scheduler
*S
, int ObjectIndex
, void *ProjectedValue
);
19 typedef void (*ExecuteFunc
)(struct Scheduler
*S
, int ObjectIndex
);
20 typedef void (*PatternInputFunc
)(struct Scheduler
*S
, long curdate
, long nextdate
);
24 chain_list
**HIGH_OFFSET_Table
[SCHEDULER_HIGH_OFFSET_MASK
+1];
25 HeapAlloc LOW_OFFSET_Table_heap
;
27 AdvancedTableAllocator
*ObjectTable
;
28 } Scheduler_DateSpace
;
30 typedef struct Scheduler
33 HeapAlloc Transaction_heap
;
34 UpdateFunc UpdateFunction
;
35 ExecuteFunc ExecuteFunction
;
36 PatternInputFunc PatternInputFunction
;
38 Scheduler_DateSpace DS
;
41 Scheduler
*Scheduler_CreateSimulator(int datasize
, UpdateFunc UF
, ExecuteFunc EF
, PatternInputFunc PIF
);
42 void Scheduler_DeleteSimulator(Scheduler
*S
);
43 void Scheduler_RunSimulator(Scheduler
*S
, long Date
);
44 void Scheduler_RegisterObject(Scheduler
*S
, int objectindex
, void *object
);
45 void *Scheduler_GetRegisterObject(Scheduler
*S
, int objectindex
);
46 void Scheduler_AddTransaction(Scheduler
*S
, int ObjectIndex
, long Date
, void *data
);
49 void debugtrans(Scheduler
*S
, int objindex
);