Initial version of donated sources by Avertec, 3.4p5.
[tas-yagle.git] / distrib / sources / scheduler / scheduler_lib.h
1
2 #ifndef Scheduler_DEFINE
3 #define Scheduler_DEFINE
4
5
6 #define SCHEDULER_HIGH_OFFSET_BITS 20
7 #define SCHEDULER_LOW_OFFSET_BITS 8
8 #define SCHEDULER_LAST_OFFSET_BITS 4
9
10 #define SCHEDULER_HIGH_OFFSET_DEC (SCHEDULER_LOW_OFFSET_BITS+SCHEDULER_LAST_OFFSET_BITS)
11 #define SCHEDULER_LOW_OFFSET_DEC (SCHEDULER_LAST_OFFSET_BITS)
12
13 #define SCHEDULER_HIGH_OFFSET_MASK ((1<<SCHEDULER_HIGH_OFFSET_BITS)-1)
14 #define SCHEDULER_LOW_OFFSET_MASK ((1<<SCHEDULER_LOW_OFFSET_BITS)-1)
15
16 struct Scheduler;
17
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);
21
22 typedef struct
23 {
24 chain_list **HIGH_OFFSET_Table[SCHEDULER_HIGH_OFFSET_MASK+1];
25 HeapAlloc LOW_OFFSET_Table_heap;
26 int TransactionCount;
27 AdvancedTableAllocator *ObjectTable;
28 } Scheduler_DateSpace;
29
30 typedef struct Scheduler
31 {
32 int datasize;
33 HeapAlloc Transaction_heap;
34 UpdateFunc UpdateFunction;
35 ExecuteFunc ExecuteFunction;
36 PatternInputFunc PatternInputFunction;
37 long Date;
38 Scheduler_DateSpace DS;
39 } Scheduler;
40
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);
47
48 // debug
49 void debugtrans(Scheduler *S, int objindex);
50
51 #endif