1 /*
2  *  Copyright 2001-2004 David Abrahams.
3  *  Distributed under the Boost Software License, Version 1.0.
4  *  (See accompanying file LICENSE_1_0.txt or http://www.boost.org/LICENSE_1_0.txt)
5  */
6 #ifndef MODULES_DWA10182001_H
7 #define MODULES_DWA10182001_H
8 
9 #include "config.h"
10 #include "lists.h"
11 #include "object.h"
12 
13 typedef struct module_t module_t ;
14 struct module_t
15 {
16     OBJECT * name;
17     struct hash * rules;
18     struct hash * variables;
19     struct hash * variable_indices;
20     int num_fixed_variables;
21     LIST * * fixed_variables;
22     struct hash * imported_modules;
23     module_t * class_module;
24     struct hash * native_rules;
25     int user_module;
26 };
27 
28 module_t * bindmodule( OBJECT * name );
29 module_t * root_module();
30 void delete_module( module_t * );
31 
32 void import_module( LIST * module_names, module_t * target_module );
33 LIST * imported_modules( module_t * );
34 
35 struct hash * demand_rules( module_t * );
36 
37 void module_bind_variables( module_t * );
38 
39 /*
40  * After calling module_add_fixed_var, module_set_fixed_variables must be called
41  * before accessing any variables in the module.
42  */
43 int module_add_fixed_var( module_t *, OBJECT * name, int * n );
44 void module_set_fixed_variables( module_t *, int n );
45 
46 /*
47  * Returns the index of the variable or -1 if none exists.
48  */
49 int module_get_fixed_var( module_t *, OBJECT * name );
50 
51 void modules_done();
52 
53 #endif
54