Sync with 5.4.0
[deliverable/titan.core.git] / core / Module_list.hh
CommitLineData
970ed795 1///////////////////////////////////////////////////////////////////////////////
3abe9331 2// Copyright (c) 2000-2015 Ericsson Telecom AB
970ed795
EL
3// All rights reserved. This program and the accompanying materials
4// are made available under the terms of the Eclipse Public License v1.0
5// which accompanies this distribution, and is available at
6// http://www.eclipse.org/legal/epl-v10.html
7///////////////////////////////////////////////////////////////////////////////
8#ifndef MODULE_LIST_HH
9#define MODULE_LIST_HH
10
11#include <stdio.h>
12#include "Types.h"
13
14class Text_Buf;
15class TTCN_Module;
16class Module_Param;
3abe9331 17class Module_Param_Name;
970ed795
EL
18class ModuleVersion;
19struct namespace_t;
20
21typedef void (*genericfunc_t)(void);
22
23class Module_List {
24 static TTCN_Module *list_head, *list_tail;
25
26public:
27 static void add_module(TTCN_Module *module_ptr);
28 static void remove_module(TTCN_Module *module_ptr);
29 static TTCN_Module *lookup_module(const char *module_name);
30 static TTCN_Module *single_control_part();
31
32 static void pre_init_modules();
33 static void post_init_modules();
34
35 static void start_function(const char *module_name,
36 const char *function_name, Text_Buf& function_arguments);
37
38 static void initialize_component(const char *module_name,
39 const char *component_type, boolean init_base_comps);
40
41 static void set_param(Module_Param& param);
3abe9331 42 static Module_Param* get_param(Module_Param_Name& param_name);
970ed795
EL
43 static void log_param();
44
45 static void execute_control(const char *module_name);
46 static void execute_testcase(const char *module_name,
47 const char *testcase_name);
48 static void execute_all_testcases(const char *module_name);
49
50 static void print_version();
51 static void send_versions();
52 static void list_testcases();
53 static void push_version(Text_Buf& text_buf);
54
55 static void encode_function(Text_Buf& text_buf,
56 genericfunc_t function_address);
57 static void decode_function(Text_Buf& text_buf,
58 genericfunc_t *function_addr_ptr);
59 static void log_function(genericfunc_t function_address);
60 static void encode_altstep(Text_Buf& text_buf,
61 genericfunc_t altstep_address);
62 static void decode_altstep(Text_Buf& text_buf,
63 genericfunc_t *altstep_addr_ptr);
64 static void log_altstep(genericfunc_t altstep_address);
65 static void encode_testcase(Text_Buf& text_buf,
66 genericfunc_t testcase_address);
67 static void decode_testcase(Text_Buf& text_buf,
68 genericfunc_t *testcase_addr_ptr);
69 static void log_testcase(genericfunc_t testcase_address);
70
71 static genericfunc_t get_fat_null();
72
73 static genericfunc_t lookup_start_by_function_address(
74 genericfunc_t function_address);
75 static genericfunc_t lookup_standalone_address_by_altstep_address(
76 genericfunc_t altstep_address);
77 static genericfunc_t lookup_activate_address_by_altstep_address(
78 genericfunc_t altstep_address);
79
80private:
81 static boolean lookup_function_by_address(genericfunc_t function_address,
82 const char*& module_name, const char*& function_name);
83 static boolean lookup_altstep_by_address(genericfunc_t altstep_address,
84 const char*& module_name, const char*& altstep_name);
85 static boolean lookup_testcase_by_address(genericfunc_t testcase_address,
86 const char*& module_name, const char*& testcase_name);
87};
88
89class TTCN_Module {
90 friend class Module_List;
91public:
92 enum module_type_enum { TTCN3_MODULE, ASN1_MODULE, CPLUSPLUS_MODULE };
93 typedef void (*init_func_t)();
94 typedef boolean (*set_param_func_t)(Module_Param& param);
3abe9331 95 typedef Module_Param* (*get_param_func_t)(Module_Param_Name& param_name);
970ed795
EL
96 typedef void (*log_param_func_t)();
97 typedef boolean (*initialize_component_func_t)(const char *component_type,
98 boolean init_base_comps);
99 typedef boolean (*start_func_t)(const char *function_name,
100 Text_Buf& function_arguments);
101 typedef void (*control_func_t)();
102 typedef verdicttype (*testcase_t)(boolean has_timer, double timer_value);
103
104private:
105 TTCN_Module *list_prev, *list_next;
106 module_type_enum module_type;
107 const char *module_name;
108 const char *compilation_date;
109 const char *compilation_time;
110 const unsigned char *md5_checksum;
111 const char* product_number;
112 unsigned int suffix;
113 unsigned int release;
114 unsigned int patch;
115 unsigned int build;
116 const char* extra;
117 size_t num_namespaces;
118 const namespace_t *xer_namespaces;
119 // FIXME instead of each module having its own list of namespaces with gaps,
120 // it may be better to have one global list in e.g. Module_list.
121 // Trouble is, Module_list is not really a class: there is no instance of it
122 // and it only has static members.
123 init_func_t pre_init_func, post_init_func;
124 boolean pre_init_called, post_init_called;
125 set_param_func_t set_param_func;
3abe9331 126 get_param_func_t get_param_func;
970ed795
EL
127 log_param_func_t log_param_func;
128 initialize_component_func_t initialize_component_func;
129 start_func_t start_func;
130 control_func_t control_func;
131 struct function_list_item;
132 function_list_item *function_head, *function_tail;
133 struct altstep_list_item;
134 altstep_list_item *altstep_head, *altstep_tail;
135 struct testcase_list_item;
136 testcase_list_item *testcase_head, *testcase_tail;
137
138 /// Copy constructor disabled
139 TTCN_Module(const TTCN_Module&);
140 /// Assignment disabled
141 TTCN_Module& operator=(const TTCN_Module&);
142public:
143 TTCN_Module(const char *par_module_name,
144 const char *par_compilation_date,
145 const char *par_compilation_time,
146 const unsigned char *par_md5_checksum,
147 init_func_t par_pre_init_func,
148 const char* par_product_number,
149 unsigned int par_suffix,
150 unsigned int par_release,
151 unsigned int par_patch,
152 unsigned int par_build,
153 const char* par_extra,
154 size_t par_num_namespace,
155 const namespace_t *par_namespaces,
156 init_func_t par_post_init_func,
157 set_param_func_t par_set_param_func,
3abe9331 158 get_param_func_t par_get_param_func,
970ed795
EL
159 log_param_func_t par_log_param_func,
160 initialize_component_func_t par_initialize_component_func,
161 start_func_t par_start_func,
162 control_func_t par_control_func);
163 TTCN_Module(const char *par_module_name,
164 const char *par_compilation_date,
165 const char *par_compilation_time,
166 const unsigned char *par_md5_checksum,
167 init_func_t par_init_func);
168 TTCN_Module(const char *par_module_name,
169 const char *par_compilation_date,
170 const char *par_compilation_time,
171 init_func_t par_init_func = NULL);
172 ~TTCN_Module();
173 const char *get_name() const { return module_name; }
174
175 void pre_init_module();
176 void post_init_module();
177
178 void add_function(const char *function_name, genericfunc_t function_address,
179 genericfunc_t start_address);
180 void add_altstep(const char *altstep_name, genericfunc_t altstep_address,
181 genericfunc_t activate_address, genericfunc_t standalone_address);
182 void add_testcase_nonpard(const char *testcase_name,
183 testcase_t testcase_function);
184 void add_testcase_pard(const char *testcase_name,
185 genericfunc_t testcase_address);
186
187 void execute_testcase(const char *testcase_name);
188 void execute_all_testcases();
189
190 const char *get_function_name_by_address(genericfunc_t function_address);
191 genericfunc_t get_function_address_by_name(const char *function_name);
192 genericfunc_t get_function_start_by_address(genericfunc_t function_address);
193 const char *get_altstep_name_by_address(genericfunc_t altstep_address);
194 genericfunc_t get_altstep_address_by_name(const char *altstep_name);
195 boolean get_altstep_data_by_address(genericfunc_t altstep_address,
196 genericfunc_t& standalone_address, genericfunc_t& activate_address);
197 const char *get_testcase_name_by_address(genericfunc_t testcase_address);
198 genericfunc_t get_testcase_address_by_name(const char *testcase_name);
199
200 void print_version();
201 ModuleVersion* get_version() const;
202 void list_testcases();
203 size_t get_num_ns() const { return num_namespaces; }
204 const namespace_t *get_ns(size_t p_index) const;
205 const namespace_t *get_controlns() const;
206};
207
208#endif
This page took 0.037921 seconds and 5 git commands to generate.