summaryrefslogtreecommitdiff
path: root/src/include/cctki_Schedule.h
blob: 1a3f59c50a17526e042ca95cf6220f989be7e645 (plain)
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
 /*@@
   @header    cctki_Schedule.h
   @date      Wed Sep 15 22:49:24 1999
   @author    Tom Goodale
   @desc 
   Schedule stuff which can be seen by the rest of the flesh.
   @enddesc 
   @version $Header$
 @@*/

#ifndef _CCTKI_SCHEDULE_H_
#define _CCTKI_SCHEDULE_H_

/* Types needed by other routines. */

typedef enum {sched_mod_none, sched_before, sched_after, sched_while} t_sched_modifier_type;

typedef struct T_SCHED_MODIFIER
{
  struct T_SCHED_MODIFIER *next;

  t_sched_modifier_type type;
  
  char *argument;

} t_sched_modifier;


#ifdef __cplusplus
extern "C" {
#endif

/* Routines to create items */
t_sched_modifier *CCTKi_ScheduleAddModifier(t_sched_modifier *orig, 
                                           const char *modifier, 
                                           const char *argument);

int CCTKi_ScheduleFunction
  (
   void *function,
   const char *name,
   const char *thorn,
   const char *implementation,
   const char *description,
   const char *where,
   const char *language,
   int n_mem_groups,
   int n_comm_groups,
   int n_trigger_groups,
   int n_before,
   int n_after,
   int n_while,
   ...
  );

int CCTKi_ScheduleGroup
  (
   const char *name,
   const char *thorn,
   const char *implementation,
   const char *description,
   const char *where,
   int n_mem_groups,
   int n_comm_groups,
   int n_trigger_groups,
   int n_before,
   int n_after,
   int n_while,
   ...
  );

int CCTKi_ScheduleGroupStorage(const char *group);

int CCTKi_ScheduleGroupComm(const char *group);

int CCTKi_ScheduleTraverse(const char *where, 
			   void *GH,   
			   int (*calling_function)(void *, void *, void *));

int CCTKi_ScheduleGHInit(void *GH);


int CCTKi_DoScheduleFunction
  (
   const char *gname, 
   const char *fname, 
   void *func, 
   t_sched_modifier *modifiers, 
   void *attributes
  );

t_sched_modifier *CCTKi_DoScheduleAddModifier(t_sched_modifier *orig,
					      const char *modifier, 
					      const char *argument);

int CCTKi_DoScheduleGroup
  (
   const char *gname, 
   const char *thisname, 
   t_sched_modifier *modifiers, 
   void *attributes
  );

/* Routine to sort the groups - must be called before traversal. */
int CCTKi_DoScheduleSortAllGroups(void);

/* Traversal routine */
int CCTKi_DoScheduleTraverse
  (
   const char *group_name,
   int (*item_entry)(void *, void *),
   int (*item_exit)(void *, void *),
   int  (*while_check)(int, char **, void *, void *),
   int (*function_process)(void *, void *, void *),
   void *data
  );

#ifdef __cplusplus
}
#endif

#endif /* _CCTKI_SCHEDULE_H_ */