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
7static const char *FNAME = "kest_expr_scope.c";
8
10
12{
13 if (!name || !expr)
14 return NULL;
15
17
18 if (!result)
19 return NULL;
20
22 result->name = name;
23 result->val.expr = expr;
24
25 return result;
26}
27
29{
30 if (!param)
31 return NULL;
32
34
35 if (!result)
36 return NULL;
37
39 result->name = param->name_internal;
40 result->val.param = param;
41
42 return result;
43}
44
46{
47 if (!setting)
48 return NULL;
49
50 KEST_PRINTF("kest_new_expr_scope_entry_setting(setting = %p)\n", setting);
52
53 if (!result)
54 return NULL;
55
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
67{
68 if (!scope)
69 return ERR_NULL_PTR;
70
71 scope->entries = NULL;
72
73 return NO_ERROR;
74}
75
77{
79
80 if (!result)
81 return NULL;
82
83 result->entries = NULL;
84
85 return result;
86}
87
88int 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
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
107{
108 if (!scope)
109 return ERR_NULL_PTR;
110
111 if (!param)
112 return ERR_BAD_ARGS;
113
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
125{
126 if (!scope)
127 return ERR_NULL_PTR;
128
129 if (!setting)
130 return ERR_BAD_ARGS;
131
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
142int 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
161int 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
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}
void * kest_alloc(size_t size)
Definition kest_alloc.c:11
#define ERR_ALLOC_FAIL
#define ERR_BAD_ARGS
#define NO_ERROR
#define ERR_NULL_PTR
kest_expr_scope_entry * kest_new_expr_scope_entry_expr(const char *name, struct kest_expression *expr)
int kest_expr_scope_add_settings(kest_expr_scope *scope, kest_setting_pll *settings)
int kest_expr_scope_init(kest_expr_scope *scope)
int kest_expr_scope_add_params(kest_expr_scope *scope, kest_parameter_pll *params)
int kest_expr_scope_add_param(kest_expr_scope *scope, kest_parameter *param)
kest_expr_scope * kest_new_expr_scope()
kest_expr_scope_entry * kest_new_expr_scope_entry_setting(struct kest_setting *setting)
kest_expr_scope_entry * kest_new_expr_scope_entry_param(kest_parameter *param)
kest_expr_scope_entry * kest_expr_scope_fetch(kest_expr_scope *scope, const char *name)
int kest_expr_scope_add_setting(kest_expr_scope *scope, kest_setting *setting)
int kest_expr_scope_add_expr(kest_expr_scope *scope, const char *name, struct kest_expression *expr)
#define KEST_SCOPE_ENTRY_TYPE_PARAM
#define KEST_SCOPE_ENTRY_TYPE_EXPR
#define KEST_SCOPE_ENTRY_TYPE_SETTING
#define IMPLEMENT_LINKED_PTR_LIST(X)
#define KEST_PRINTF(...)
Definition kest_printf.h:10
int type
const char * name
struct kest_expression * expr
struct kest_parameter * param
struct kest_setting * setting
union kest_expr_scope_entry::@246374331353003302125051026062066243300031256272 val
kest_expr_scope_entry_pll * entries
const char * name_internal
const char * name_internal