dynamiC  0.1
dynamic.h
Go to the documentation of this file.
1 
12 #ifndef DYN_C_H
13 #define DYN_C_H
14 
15 #include <stdlib.h>
16 
17 #include "dynamic_types.h"
18 #include "dynamic_defines.h"
19 #include "dynamic_string.h"
20 #include "dynamic_encoding.h"
21 
22 
37 #define DYN_INIT(dyn) (dyn)->type=NONE
39 #define DYN_TYPE(dyn) (dyn)->type
41 #define DYN_IS_NONE(dyn) !DYN_TYPE(dyn)
43 #define DYN_NOT_NONE(dyn) DYN_TYPE(dyn)
45 #define DYN_IS_REFERENCE(dyn) \
47  DYN_TYPE(dyn)==REFERENCE || DYN_TYPE(dyn)==REFERENCE2
48 
50 TYPE dyn_type (const dyn_c* dyn);
52 void dyn_free (dyn_c* dyn);
54 trilean dyn_copy (const dyn_c* dyn, dyn_c* copy);
56 void dyn_move (dyn_c* from, dyn_c* to);
57 #define DYN_MOVE(from, to) *to = *from; DYN_INIT(from)
58 
64 dyn_ushort dyn_length (const dyn_c* dyn);
66 dyn_uint dyn_size (const dyn_c* dyn);
67 
69 void dyn_set_none (dyn_c* dyn);
71 void dyn_set_bool (dyn_c* dyn, const dyn_char v);
73 void dyn_set_int (dyn_c* dyn, const dyn_int v);
75 void dyn_set_float (dyn_c* dyn, const dyn_float v);
77 void dyn_set_extern (dyn_c* dyn, const void* v);
81 void dyn_set_ref (dyn_c* ref, dyn_c* orig);
82 
84 trilean dyn_get_bool (const dyn_c* dyn);
96 trilean dyn_get_bool_3 (const dyn_c* dyn);
98 dyn_int dyn_get_int (const dyn_c* dyn);
100 dyn_float dyn_get_float (const dyn_c* dyn);
102 dyn_str dyn_get_string (const dyn_c* dyn);
104 const void* dyn_get_extern (const dyn_c* dyn);
106 void dyn_string_add (const dyn_c* dyn, dyn_str string);
108 dyn_ushort dyn_string_len (const dyn_c* dyn);
120 #define DYN_SET_LIST(dyn) dyn_set_list_len(dyn, LIST_DEFAULT)
122 #define DYN_LIST_LEN(dyn) (dyn)->data.list->length
124 #define DYN_LIST_GET_REF(dyn,i) &(dyn)->data.list->container[i]
126 #define DYN_LIST_GET_END(dyn) \
128  &(dyn)->data.list->container[DYN_LIST_LEN(dyn)-1]
129 #define DYN_LIST_GET_REF_END(dyn,i) \
131  &(dyn)->data.list->container[DYN_LIST_LEN(dyn)-i]
132 
136 dyn_c* dyn_list_push (dyn_c* list, const dyn_c* element);
140 trilean dyn_list_pop (dyn_c* list, dyn_c* element);
142 trilean dyn_list_get (const dyn_c* list, dyn_c* element, const dyn_short i);
144 dyn_c* dyn_list_get_ref (const dyn_c* list, const dyn_short i);
148 void dyn_list_free (dyn_c* list);
150 trilean dyn_list_copy (const dyn_c* list, dyn_c* copy);
154 trilean dyn_list_insert (dyn_c* list, dyn_c* element, const dyn_ushort i);
160 void dyn_list_string_add (const dyn_c* list, dyn_str str);
171 #ifdef S2_SET
172 trilean dyn_set_set_len (dyn_c* set, const dyn_ushort len);
175 trilean dyn_set_insert (dyn_c* set, dyn_c* element);
176 // Delete element from a set
177 //dyn_char dyn_set_remove (dyn_c* set, dyn_c* element);
178 #endif
179 
187 #define DYN_DICT_LEN(dyn) \
189  dyn->data.dict->value.data.list->length
190 #define DYN_DICT_GET_I_REF(dyn,i) \
192  &(dyn)->data.dict->value.data.list->container[i]
193 #define DYN_DICT_GET_I_KEY(dyn,i) (dyn)->data.dict->key[i]
195 #define DYN_DICT_SPACE(dyn) dyn->value.data.list->space
197 #define DYN_DICT_LENGTH(dyn) dyn->value.data.list->length
199 
212 
214 dyn_c* dyn_dict_get_i_ref (const dyn_c* dict, const dyn_ushort i);
217 
221 void dyn_dict_empty (dyn_c* dict);
223 void dyn_dict_free (dyn_c* dict);
225 trilean dyn_dict_copy (const dyn_c* dict, dyn_c* copy);
226 
230 void dyn_dict_string_add(const dyn_c* dict, dyn_str string);
238 #define DYN_FCT_C 0
239 #define DYN_FCT_SYS 1
240 #define DYN_FCT_PROC 2
241 
242 #define DYN_FCT_GET_CODE(dyn) dyn->data.fct->ptr
243 
244 trilean dyn_set_fct (dyn_c* dyn, void *ptr, const dyn_ushort type, dyn_const_str info);
245 void dyn_fct_free (dyn_c* dyn);
246 trilean dyn_fct_copy (const dyn_c* dyn, dyn_c* copy);
296 trilean dyn_op_neg(dyn_c *dyn);
299 trilean dyn_op_add(dyn_c *dyn1, dyn_c *dyn2);
301 trilean dyn_op_sub(dyn_c *dyn1, dyn_c *dyn2);
303 trilean dyn_op_mul(dyn_c *dyn1, dyn_c *dyn2);
305 trilean dyn_op_div(dyn_c *dyn1, dyn_c *dyn2);
307 trilean dyn_op_mod(dyn_c *dyn1, dyn_c *dyn2);
309 trilean dyn_op_pow(dyn_c *dyn1, dyn_c *dyn2);
310 
312 trilean dyn_op_and(dyn_c *dyn1, dyn_c *dyn2);
314 trilean dyn_op_or (dyn_c *dyn1, dyn_c *dyn2);
316 trilean dyn_op_xor(dyn_c *dyn1, dyn_c *dyn2);
318 trilean dyn_op_not(dyn_c *dyn);
319 
321 trilean dyn_op_id (dyn_c *dyn1, dyn_c *dyn2);
323 trilean dyn_op_eq (dyn_c *dyn1, dyn_c *dyn2);
325 trilean dyn_op_ne (dyn_c *dyn1, dyn_c *dyn2);
327 trilean dyn_op_lt (dyn_c *dyn1, dyn_c *dyn2);
329 trilean dyn_op_le (dyn_c *dyn1, dyn_c *dyn2);
331 trilean dyn_op_gt (dyn_c *dyn1, dyn_c *dyn2);
333 trilean dyn_op_ge (dyn_c *dyn1, dyn_c *dyn2);
334 
336 trilean dyn_op_in (dyn_c *element, dyn_c *container);
337 
341 trilean dyn_op_b_and(dyn_c *dyn1, dyn_c *dyn2);
343 trilean dyn_op_b_or (dyn_c *dyn1, dyn_c *dyn2);
345 trilean dyn_op_b_xor(dyn_c *dyn1, dyn_c *dyn2);
347 trilean dyn_op_b_shift_l(dyn_c *dyn1, dyn_c *dyn2);
349 trilean dyn_op_b_shift_r(dyn_c *dyn1, dyn_c *dyn2);
352 #endif //DYN_C_H
const char * dyn_const_str
Standard dynamic C const string.
Definition: dynamic_types.h:39
Definition of C string manipulation functions.
trilean dyn_set_set_len(dyn_c *set, const dyn_ushort len)
Initialize dynamic element as empty set with maximal length.
Definition: dynamic_set.c:29
int32_t dyn_int
32bit signed integer, standard Integer type.
Definition: dynamic_types.h:49
trilean dyn_op_le(dyn_c *dyn1, dyn_c *dyn2)
Relational Less Than or Equal.
Definition: dynamic_op.c:932
dyn_float dyn_get_float(const dyn_c *dyn)
Return float value of a dynamic element.
trilean dyn_dict_remove(dyn_c *dict, dyn_const_str key)
Remove key-value pair from dictionary.
Definition: dynamic_dict.c:199
trilean dyn_op_ge(dyn_c *dyn1, dyn_c *dyn2)
Relational Greater Than or Equal.
Definition: dynamic_op.c:898
trilean dyn_op_b_not(dyn_c *dyn)
Binary complement.
Definition: dynamic_op.c:969
trilean dyn_op_b_shift_r(dyn_c *dyn1, dyn_c *dyn2)
Binary shift right.
Definition: dynamic_op.c:1041
void dyn_set_extern(dyn_c *dyn, const void *v)
Set dynamic element to point to an arbitrary value.
Definition: dynamic.c:112
trilean dyn_op_id(dyn_c *dyn1, dyn_c *dyn2)
Type and Value Equality.
Definition: dynamic_op.c:834
dyn_list * list
pointer to dynamic list
Definition: dynamic_types.h:62
void dyn_set_none(dyn_c *dyn)
Set dynamic element to NONE.
Definition: dynamic.c:67
trilean dyn_list_remove(dyn_c *list, dyn_ushort i)
Delete the ith element from a list.
Definition: dynamic_list.c:172
dyn_c * dyn_dict_insert(dyn_c *dict, dyn_const_str key, dyn_c *value)
Insert a new key-value pair into the dictionary.
Definition: dynamic_dict.c:65
dyn_c value
dynamic element of type dyn_list
Definition: dynamic_types.h:57
trilean dyn_dict_change(dyn_c *dict, const dyn_ushort i, const dyn_c *value)
Replace the ith element in a dictionary with a new value.
Definition: dynamic_dict.c:128
dyn_c * dyn_dict_get(const dyn_c *dict, dyn_const_str key)
Get the reference to value stored at key.
Definition: dynamic_dict.c:264
trilean dyn_list_insert(dyn_c *list, dyn_c *element, const dyn_ushort i)
Insert a new element at the ith position into a list.
Definition: dynamic_list.c:199
uint32_t dyn_uint
32bit unsigned integer
Definition: dynamic_types.h:52
void dyn_dict_string_add(const dyn_c *dict, dyn_str string)
Add the dict-string representation to string.
Definition: dynamic_dict.c:311
dyn_int dyn_get_int(const dyn_c *dyn)
Return integer value of a dynamic element.
dyn_str dyn_dict_get_i_key(const dyn_c *dict, const dyn_ushort i)
Get the reference to ith key in dict.
Definition: dynamic_dict.c:183
void dyn_dict_empty(dyn_c *dict)
todo
Definition: dynamic_dict.c:229
dyn_ushort dyn_dict_has_key(const dyn_c *dict, dyn_const_str key)
Check if dict has key and return its position - 1 (returns 0 if not found)
Definition: dynamic_dict.c:145
trilean dyn_set_insert(dyn_c *set, dyn_c *element)
Insert new element into set, if and only if it is not included yet.
Definition: dynamic_set.c:48
const void * dyn_get_extern(const dyn_c *dyn)
Return pointer, stored in dyn->data.ex.
Definition of internal settings and applied data types.
dyn_dict * dict
pointer to dynamic dictionary
Definition: dynamic_types.h:63
trilean dyn_set_string(dyn_c *dyn, dyn_const_str v)
Set dynamic element to STRING.
Definition: dynamic.c:128
dyn_int i
basic integer
Definition: dynamic_types.h:59
trilean dyn_copy(const dyn_c *dyn, dyn_c *copy)
Deep copy dynamic element.
trilean dyn_op_in(dyn_c *element, dyn_c *container)
Check if dyn2 is element of dyn1.
Definition: dynamic_op.c:949
trilean dyn_op_mod(dyn_c *dyn1, dyn_c *dyn2)
dyn1 Modulo dyn2
Definition: dynamic_op.c:388
trilean dyn_list_popi(dyn_c *list, const dyn_short i)
Pop i elements from the end of a list.
Definition: dynamic_list.c:242
trilean dyn_op_or(dyn_c *dyn1, dyn_c *dyn2)
Logical (trinary) OR operation.
Definition: dynamic_op.c:582
trilean dyn_op_eq(dyn_c *dyn1, dyn_c *dyn2)
Relational Equality.
Definition: dynamic_op.c:850
trilean dyn_op_add(dyn_c *dyn1, dyn_c *dyn2)
Add dyn2 to dyn1.
Definition: dynamic_op.c:124
dyn_c * dyn_list_push_none(dyn_c *list)
Push NONE element to the end of a list.
Definition: dynamic_list.c:146
dyn_c * dyn_dict_get_i_ref(const dyn_c *dict, const dyn_ushort i)
Get the reference to ith value in dict.
Definition: dynamic_dict.c:168
trilean dyn_list_get(const dyn_c *list, dyn_c *element, const dyn_short i)
Copy the ith element of a list to param element.
Definition: dynamic_list.c:264
trilean dyn_op_neg(dyn_c *dyn)
Negate dynamic value in param dyn.
Definition: dynamic_op.c:72
void * ptr
pointer to function
Definition: dynamic_types.h:57
dyn_ushort dyn_dict_string_len(const dyn_c *dict)
Calculate the required string length.
Definition: dynamic_dict.c:293
dyn_uint dyn_size(const dyn_c *dyn)
Return the number of allocated bytes.
Definition: dynamic.c:164
dyn_str dyn_get_string(const dyn_c *dyn)
Return string representation value of a dynamic element.
trilean dyn_op_and(dyn_c *dyn1, dyn_c *dyn2)
Logical (trinary) AND operation.
Definition: dynamic_op.c:542
trilean dyn_get_bool(const dyn_c *dyn)
Return boolean value of an dynamic element.
Definition: dynamic.c:241
trilean dyn_op_ne(dyn_c *dyn1, dyn_c *dyn2)
Relational Not Equal.
Definition: dynamic_op.c:864
dyn_ushort length
elements in use
Definition: dynamic_types.h:56
char dyn_char
Basic 8bit signed integer.
Definition: dynamic_types.h:30
Basic SelectScript definitions.
trilean dyn_op_b_xor(dyn_c *dyn1, dyn_c *dyn2)
Binary XOR.
Definition: dynamic_op.c:1014
int16_t dyn_short
16bit signed integer
Definition: dynamic_types.h:46
trilean dyn_op_div(dyn_c *dyn1, dyn_c *dyn2)
Divide dyn1 by dyn2.
Definition: dynamic_op.c:356
uint16_t dyn_ushort
16bit unsigned integer
Definition: dynamic_types.h:43
void dyn_string_add(const dyn_c *dyn, dyn_str string)
Add string representation of dynamic element to string.
dyn_str str
pointer to character-array
Definition: dynamic_types.h:61
void dyn_move(dyn_c *from, dyn_c *to)
Move dynamic element to new reference, from is of type NONE afterwards.
void dyn_set_bool(dyn_c *dyn, const dyn_char v)
Set dynamic element to BOOL (DYN_TRUE or DYN_FALSE)
Definition: dynamic.c:77
TYPE
Basic data type definitions.
Definition: dynamic_types.h:60
dyn_c * container
pointer to an array of dynamic elements
Definition: dynamic_types.h:58
dyn_c * dyn_list_get_ref(const dyn_c *list, const dyn_short i)
Return a reference to the ith element within list, negative values are allowed.
Definition: dynamic_list.c:289
void dyn_set_float(dyn_c *dyn, const dyn_float v)
Set dynamic element to FLOAT.
Definition: dynamic.c:99
dyn_ushort dyn_string_len(const dyn_c *dyn)
Calculate length of string representation of dynamic element.
trilean dyn_op_not(dyn_c *dyn)
Logical (trinary) Negation.
Definition: dynamic_op.c:658
trilean dyn_op_pow(dyn_c *dyn1, dyn_c *dyn2)
dyn1 to the power of dyn2
Definition: dynamic_op.c:453
trilean dyn_list_pop(dyn_c *list, dyn_c *element)
Pop the last element from the list and move it to param element.
Definition: dynamic_list.c:225
dyn_c * dyn_list_push(dyn_c *list, const dyn_c *element)
Push new element to the end of a list.
Definition: dynamic_list.c:124
trilean dyn_op_gt(dyn_c *dyn1, dyn_c *dyn2)
Relational Greater Than.
Definition: dynamic_op.c:912
dyn_str * key
array to C strings used as identifiers
Definition: dynamic_types.h:56
trilean dyn_dict_copy(const dyn_c *dict, dyn_c *copy)
Copy the entire dict.
Definition: dynamic_dict.c:274
trilean dyn_op_lt(dyn_c *dyn1, dyn_c *dyn2)
Relational Less Than.
Definition: dynamic_op.c:878
dyn_c * ref
reference pointer to dynamic elements
Definition: dynamic_types.h:66
trilean
basic return type for truth values
Definition: dynamic_types.h:22
trilean dyn_get_bool_3(const dyn_c *dyn)
Returns the trinary truth value (DYN_TRUE|DYN_FALSE|DYN_NONE) of an element.
Definition: dynamic_op.c:509
trilean dyn_dict_resize(dyn_c *dict, const dyn_ushort size)
Set the available space for elements.
Definition: dynamic_dict.c:108
trilean dyn_list_copy(const dyn_c *list, dyn_c *copy)
Make a deep copy of the entire list.
Definition: dynamic_list.c:308
trilean dyn_op_b_shift_l(dyn_c *dyn1, dyn_c *dyn2)
Binary shift left.
Definition: dynamic_op.c:1028
dyn_ushort dyn_length(const dyn_c *dyn)
Reterns the length of an element.
trilean dyn_op_b_or(dyn_c *dyn1, dyn_c *dyn2)
Binary OR.
Definition: dynamic_op.c:1000
void dyn_set_ref(dyn_c *ref, dyn_c *orig)
Set dynamic element as reference to another dynamic element.
Definition: dynamic.c:149
void dyn_dict_free(dyn_c *dict)
Free all allocated memory.
Definition: dynamic_dict.c:245
void dyn_list_string_add(const dyn_c *list, dyn_str str)
Add string representation of a list to str.
Definition: dynamic_list.c:351
trilean dyn_set_dict(dyn_c *dyn, const dyn_ushort length)
Set dyn to a dictionary with a max. length of elements.
Definition: dynamic_dict.c:25
float dyn_float
basic float definition (32 bit)
Definition: dynamic_types.h:55
void dyn_free(dyn_c *dyn)
free allocated memory
Definition: dynamic.c:30
trilean dyn_op_sub(dyn_c *dyn1, dyn_c *dyn2)
Subtract dyn2 from dyn1.
Definition: dynamic_op.c:211
void dyn_list_free(dyn_c *list)
Free the allocated memory of the entire list and set it to NONE.
Definition: dynamic_list.c:67
trilean dyn_list_resize(dyn_c *list, const dyn_ushort size)
Change the maximal space of a list.
Definition: dynamic_list.c:91
trilean dyn_op_xor(dyn_c *dyn1, dyn_c *dyn2)
Logical (trinary) XOR operation.
Definition: dynamic_op.c:623
char type
type definition
Definition: dynamic_types.h:69
trilean dyn_op_mul(dyn_c *dyn1, dyn_c *dyn2)
Multiply dyn1 with dyn2.
Definition: dynamic_op.c:271
char * dyn_str
Standard dynamic C string.
Definition: dynamic_types.h:36
void dyn_set_int(dyn_c *dyn, const dyn_int v)
Set dynamic element to INTEGER.
Definition: dynamic.c:88
trilean dyn_op_b_and(dyn_c *dyn1, dyn_c *dyn2)
Binary AND.
Definition: dynamic_op.c:987
TYPE dyn_type(const dyn_c *dyn)
Return type value of a dynamic element.
Definition: dynamic.c:56
dyn_ushort dyn_list_string_len(const dyn_c *list)
Return the length of the string representation of a list.
Definition: dynamic_list.c:333
trilean dyn_set_list_len(dyn_c *dyn, dyn_ushort len)
Set dynamic element to list with maximal length.
Definition: dynamic_list.c:37
dyn_str info
info string
Definition: dynamic_types.h:58
Basic container for dynamic data types.
Definition: dynamic_types.h:98