Kestrel Interface
Loading...
Searching...
No Matches
kest_expr_scope.c
Go to the documentation of this file.
1
#include "
kest_int.h
"
2
3
#ifndef PRINTLINES_ALLOWED
4
#define PRINTLINES_ALLOWED 0
5
#endif
6
7
static
const
char
*FNAME =
"kest_expr_scope.c"
;
8
9
IMPLEMENT_LINKED_PTR_LIST
(
kest_expr_scope_entry
);
10
11
kest_expr_scope_entry
*
kest_new_expr_scope_entry_expr
(
const
char
*name,
struct
kest_expression
*expr)
12
{
13
if
(!name || !expr)
14
return
NULL;
15
16
kest_expr_scope_entry
*result =
kest_alloc
(
sizeof
(
kest_expr_scope_entry
));
17
18
if
(!result)
19
return
NULL;
20
21
result->
type
=
KEST_SCOPE_ENTRY_TYPE_EXPR
;
22
result->
name
= name;
23
result->
val
.
expr
= expr;
24
25
return
result;
26
}
27
28
kest_expr_scope_entry
*
kest_new_expr_scope_entry_param
(
kest_parameter
*param)
29
{
30
if
(!param)
31
return
NULL;
32
33
kest_expr_scope_entry
*result =
kest_alloc
(
sizeof
(
kest_expr_scope_entry
));
34
35
if
(!result)
36
return
NULL;
37
38
result->
type
=
KEST_SCOPE_ENTRY_TYPE_PARAM
;
39
result->
name
= param->
name_internal
;
40
result->
val
.
param
= param;
41
42
return
result;
43
}
44
45
kest_expr_scope_entry
*
kest_new_expr_scope_entry_setting
(
struct
kest_setting
*setting)
46
{
47
if
(!setting)
48
return
NULL;
49
50
KEST_PRINTF
(
"kest_new_expr_scope_entry_setting(setting = %p)\n"
, setting);
51
kest_expr_scope_entry
*result =
kest_alloc
(
sizeof
(
kest_expr_scope_entry
));
52
53
if
(!result)
54
return
NULL;
55
56
result->
type
=
KEST_SCOPE_ENTRY_TYPE_SETTING
;
57
result->
name
= setting->
name_internal
;
58
result->
val
.
setting
= setting;
59
60
KEST_PRINTF
(
"\tresult->type = %d\n\tresult->name = \"%s\"\n\tresult->val.setting = %p\n"
,
61
result->
type
, result->
name
, result->
val
.
setting
);
62
63
return
result;
64
}
65
66
int
kest_expr_scope_init
(
kest_expr_scope
*scope)
67
{
68
if
(!scope)
69
return
ERR_NULL_PTR
;
70
71
scope->
entries
= NULL;
72
73
return
NO_ERROR
;
74
}
75
76
kest_expr_scope
*
kest_new_expr_scope
()
77
{
78
kest_expr_scope
*result =
kest_alloc
(
sizeof
(
kest_expr_scope
));
79
80
if
(!result)
81
return
NULL;
82
83
result->
entries
= NULL;
84
85
return
result;
86
}
87
88
int
kest_expr_scope_add_expr
(
kest_expr_scope
*scope,
const
char
*name,
struct
kest_expression
*expr)
89
{
90
if
(!scope)
91
return
ERR_NULL_PTR
;
92
93
if
(!name || !expr)
94
return
ERR_BAD_ARGS
;
95
96
kest_expr_scope_entry
*entry =
kest_new_expr_scope_entry_expr
(name, expr);
97
98
if
(!entry)
99
return
ERR_ALLOC_FAIL
;
100
101
int
ret_val = kest_expr_scope_entry_pll_safe_append(&scope->
entries
, entry);
102
103
return
ret_val;
104
}
105
106
int
kest_expr_scope_add_param
(
kest_expr_scope
*scope,
kest_parameter
*param)
107
{
108
if
(!scope)
109
return
ERR_NULL_PTR
;
110
111
if
(!param)
112
return
ERR_BAD_ARGS
;
113
114
kest_expr_scope_entry
*entry =
kest_new_expr_scope_entry_param
(param);
115
116
if
(!entry)
117
return
ERR_ALLOC_FAIL
;
118
119
int
ret_val = kest_expr_scope_entry_pll_safe_append(&scope->
entries
, entry);
120
121
return
ret_val;
122
}
123
124
int
kest_expr_scope_add_setting
(
kest_expr_scope
*scope,
kest_setting
*setting)
125
{
126
if
(!scope)
127
return
ERR_NULL_PTR
;
128
129
if
(!setting)
130
return
ERR_BAD_ARGS
;
131
132
kest_expr_scope_entry
*entry =
kest_new_expr_scope_entry_setting
(setting);
133
134
if
(!entry)
135
return
ERR_ALLOC_FAIL
;
136
137
int
ret_val = kest_expr_scope_entry_pll_safe_append(&scope->
entries
, entry);
138
139
return
ret_val;
140
}
141
142
int
kest_expr_scope_add_params
(
kest_expr_scope
*scope, kest_parameter_pll *params)
143
{
144
if
(!scope)
145
return
ERR_NULL_PTR
;
146
147
int
ret_val;
148
kest_parameter_pll *current = params;
149
150
while
(current)
151
{
152
if
((ret_val =
kest_expr_scope_add_param
(scope, current->data)) !=
NO_ERROR
)
153
return
ret_val;
154
155
current = current->next;
156
}
157
158
return
NO_ERROR
;
159
}
160
161
int
kest_expr_scope_add_settings
(
kest_expr_scope
*scope, kest_setting_pll *settings)
162
{
163
if
(!scope)
164
return
ERR_NULL_PTR
;
165
166
KEST_PRINTF
(
"kest_expr_scope_add_settings(scope = %p, settings = %p)\n"
, scope, settings);
167
168
int
ret_val;
169
kest_setting_pll *current = settings;
170
171
KEST_PRINTF
(
"current = %p\n"
, current);
172
while
(current)
173
{
174
KEST_PRINTF
(
"current->data = %p\n"
, current->data);
175
KEST_PRINTF
(
"Adding setting \"%s\"...\n"
, current->data ? current->data->name_internal :
"(NULL)"
);
176
if
((ret_val =
kest_expr_scope_add_setting
(scope, current->data)) !=
NO_ERROR
)
177
{
178
179
return
ret_val;
180
}
181
182
current = current->next;
183
KEST_PRINTF
(
"current = %p\n"
, current);
184
}
185
186
return
NO_ERROR
;
187
}
188
189
kest_expr_scope_entry
*
kest_expr_scope_fetch
(
kest_expr_scope
*scope,
const
char
*name)
190
{
191
KEST_PRINTF
(
"kest_expr_scope_fetch(scope = %p, name = %p = %s)\n"
, scope, name, name ? name :
"(NULL)"
);
192
if
(!scope || !name)
193
return
NULL;
194
195
kest_expr_scope_entry_pll *current = scope->
entries
;
196
197
int
i = 0;
198
while
(current)
199
{
200
KEST_PRINTF
(
"Entry %d "
, i);
201
if
(current->data)
202
{
203
KEST_PRINTF
(
"exists "
);
204
if
(current->data->name)
205
{
206
KEST_PRINTF
(
"has name \"%s\"\n"
, current->data->name);
207
if
(strcmp(current->data->name, name) == 0)
208
{
209
return
current->data;
210
}
211
}
212
else
213
{
214
KEST_PRINTF
(
"has no name. Moving on..."
);
215
}
216
}
217
else
218
{
219
KEST_PRINTF
(
"does not exist. Moving on..."
);
220
}
221
222
KEST_PRINTF
(
"\n"
);
223
current = current->next;
224
}
225
226
return
NULL;
227
}
kest_alloc
void * kest_alloc(size_t size)
Definition
kest_alloc.c:11
ERR_ALLOC_FAIL
#define ERR_ALLOC_FAIL
Definition
kest_error_codes.h:9
ERR_BAD_ARGS
#define ERR_BAD_ARGS
Definition
kest_error_codes.h:6
NO_ERROR
#define NO_ERROR
Definition
kest_error_codes.h:4
ERR_NULL_PTR
#define ERR_NULL_PTR
Definition
kest_error_codes.h:5
kest_new_expr_scope_entry_expr
kest_expr_scope_entry * kest_new_expr_scope_entry_expr(const char *name, struct kest_expression *expr)
Definition
kest_expr_scope.c:11
kest_expr_scope_add_settings
int kest_expr_scope_add_settings(kest_expr_scope *scope, kest_setting_pll *settings)
Definition
kest_expr_scope.c:161
kest_expr_scope_init
int kest_expr_scope_init(kest_expr_scope *scope)
Definition
kest_expr_scope.c:66
kest_expr_scope_add_params
int kest_expr_scope_add_params(kest_expr_scope *scope, kest_parameter_pll *params)
Definition
kest_expr_scope.c:142
kest_expr_scope_add_param
int kest_expr_scope_add_param(kest_expr_scope *scope, kest_parameter *param)
Definition
kest_expr_scope.c:106
kest_new_expr_scope
kest_expr_scope * kest_new_expr_scope()
Definition
kest_expr_scope.c:76
kest_new_expr_scope_entry_setting
kest_expr_scope_entry * kest_new_expr_scope_entry_setting(struct kest_setting *setting)
Definition
kest_expr_scope.c:45
kest_new_expr_scope_entry_param
kest_expr_scope_entry * kest_new_expr_scope_entry_param(kest_parameter *param)
Definition
kest_expr_scope.c:28
kest_expr_scope_fetch
kest_expr_scope_entry * kest_expr_scope_fetch(kest_expr_scope *scope, const char *name)
Definition
kest_expr_scope.c:189
kest_expr_scope_add_setting
int kest_expr_scope_add_setting(kest_expr_scope *scope, kest_setting *setting)
Definition
kest_expr_scope.c:124
kest_expr_scope_add_expr
int kest_expr_scope_add_expr(kest_expr_scope *scope, const char *name, struct kest_expression *expr)
Definition
kest_expr_scope.c:88
KEST_SCOPE_ENTRY_TYPE_PARAM
#define KEST_SCOPE_ENTRY_TYPE_PARAM
Definition
kest_expr_scope.h:5
KEST_SCOPE_ENTRY_TYPE_EXPR
#define KEST_SCOPE_ENTRY_TYPE_EXPR
Definition
kest_expr_scope.h:4
KEST_SCOPE_ENTRY_TYPE_SETTING
#define KEST_SCOPE_ENTRY_TYPE_SETTING
Definition
kest_expr_scope.h:6
kest_int.h
IMPLEMENT_LINKED_PTR_LIST
#define IMPLEMENT_LINKED_PTR_LIST(X)
Definition
kest_linked_list.h:234
KEST_PRINTF
#define KEST_PRINTF(...)
Definition
kest_printf.h:10
kest_expr_scope_entry
Definition
kest_expr_scope.h:12
kest_expr_scope_entry::type
int type
Definition
kest_expr_scope.h:14
kest_expr_scope_entry::name
const char * name
Definition
kest_expr_scope.h:13
kest_expr_scope_entry::expr
struct kest_expression * expr
Definition
kest_expr_scope.h:16
kest_expr_scope_entry::param
struct kest_parameter * param
Definition
kest_expr_scope.h:17
kest_expr_scope_entry::setting
struct kest_setting * setting
Definition
kest_expr_scope.h:18
kest_expr_scope_entry::val
union kest_expr_scope_entry::@246374331353003302125051026062066243300031256272 val
kest_expr_scope
Definition
kest_expr_scope.h:31
kest_expr_scope::entries
kest_expr_scope_entry_pll * entries
Definition
kest_expr_scope.h:32
kest_expression
Definition
kest_expression.h:40
kest_parameter
Definition
kest_parameter.h:22
kest_parameter::name_internal
const char * name_internal
Definition
kest_parameter.h:44
kest_setting
Definition
kest_parameter.h:76
kest_setting::name_internal
const char * name_internal
Definition
kest_parameter.h:96
components
core
kest_expr_scope.c
Generated by
1.14.0