20 #include "dynamic_encoding.h" 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 57 #define DYN_MOVE(from, to) *to = *from; DYN_INIT(from) 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] 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 239 #define DYN_FCT_SYS 1 240 #define DYN_FCT_PROC 2 242 #define DYN_FCT_GET_CODE(dyn) dyn->data.fct->ptr 245 void dyn_fct_free (
dyn_c* dyn);
const char * dyn_const_str
Standard dynamic C const string.
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.
int32_t dyn_int
32bit signed integer, standard Integer type.
trilean dyn_op_le(dyn_c *dyn1, dyn_c *dyn2)
Relational Less Than or Equal.
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.
trilean dyn_op_ge(dyn_c *dyn1, dyn_c *dyn2)
Relational Greater Than or Equal.
trilean dyn_op_b_not(dyn_c *dyn)
Binary complement.
trilean dyn_op_b_shift_r(dyn_c *dyn1, dyn_c *dyn2)
Binary shift right.
void dyn_set_extern(dyn_c *dyn, const void *v)
Set dynamic element to point to an arbitrary value.
trilean dyn_op_id(dyn_c *dyn1, dyn_c *dyn2)
Type and Value Equality.
dyn_list * list
pointer to dynamic list
void dyn_set_none(dyn_c *dyn)
Set dynamic element to NONE.
trilean dyn_list_remove(dyn_c *list, dyn_ushort i)
Delete the ith element from a list.
dyn_c * dyn_dict_insert(dyn_c *dict, dyn_const_str key, dyn_c *value)
Insert a new key-value pair into the dictionary.
dyn_c value
dynamic element of type dyn_list
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.
dyn_c * dyn_dict_get(const dyn_c *dict, dyn_const_str key)
Get the reference to value stored at key.
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.
uint32_t dyn_uint
32bit unsigned integer
void dyn_dict_string_add(const dyn_c *dict, dyn_str string)
Add the dict-string representation to string.
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.
void dyn_dict_empty(dyn_c *dict)
todo
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)
trilean dyn_set_insert(dyn_c *set, dyn_c *element)
Insert new element into set, if and only if it is not included yet.
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
trilean dyn_set_string(dyn_c *dyn, dyn_const_str v)
Set dynamic element to STRING.
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.
trilean dyn_op_mod(dyn_c *dyn1, dyn_c *dyn2)
dyn1 Modulo dyn2
trilean dyn_list_popi(dyn_c *list, const dyn_short i)
Pop i elements from the end of a list.
trilean dyn_op_or(dyn_c *dyn1, dyn_c *dyn2)
Logical (trinary) OR operation.
trilean dyn_op_eq(dyn_c *dyn1, dyn_c *dyn2)
Relational Equality.
trilean dyn_op_add(dyn_c *dyn1, dyn_c *dyn2)
Add dyn2 to dyn1.
dyn_c * dyn_list_push_none(dyn_c *list)
Push NONE element to the end of a list.
dyn_c * dyn_dict_get_i_ref(const dyn_c *dict, const dyn_ushort i)
Get the reference to ith value in dict.
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.
trilean dyn_op_neg(dyn_c *dyn)
Negate dynamic value in param dyn.
void * ptr
pointer to function
dyn_ushort dyn_dict_string_len(const dyn_c *dict)
Calculate the required string length.
dyn_uint dyn_size(const dyn_c *dyn)
Return the number of allocated bytes.
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.
trilean dyn_get_bool(const dyn_c *dyn)
Return boolean value of an dynamic element.
trilean dyn_op_ne(dyn_c *dyn1, dyn_c *dyn2)
Relational Not Equal.
dyn_ushort length
elements in use
char dyn_char
Basic 8bit signed integer.
Basic SelectScript definitions.
trilean dyn_op_b_xor(dyn_c *dyn1, dyn_c *dyn2)
Binary XOR.
int16_t dyn_short
16bit signed integer
trilean dyn_op_div(dyn_c *dyn1, dyn_c *dyn2)
Divide dyn1 by dyn2.
uint16_t dyn_ushort
16bit unsigned integer
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
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)
TYPE
Basic data type definitions.
dyn_c * container
pointer to an array of dynamic elements
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.
void dyn_set_float(dyn_c *dyn, const dyn_float v)
Set dynamic element to FLOAT.
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.
trilean dyn_op_pow(dyn_c *dyn1, dyn_c *dyn2)
dyn1 to the power of dyn2
trilean dyn_list_pop(dyn_c *list, dyn_c *element)
Pop the last element from the list and move it to param element.
dyn_c * dyn_list_push(dyn_c *list, const dyn_c *element)
Push new element to the end of a list.
trilean dyn_op_gt(dyn_c *dyn1, dyn_c *dyn2)
Relational Greater Than.
dyn_str * key
array to C strings used as identifiers
trilean dyn_dict_copy(const dyn_c *dict, dyn_c *copy)
Copy the entire dict.
trilean dyn_op_lt(dyn_c *dyn1, dyn_c *dyn2)
Relational Less Than.
dyn_c * ref
reference pointer to dynamic elements
trilean
basic return type for truth values
trilean dyn_get_bool_3(const dyn_c *dyn)
Returns the trinary truth value (DYN_TRUE|DYN_FALSE|DYN_NONE) of an element.
trilean dyn_dict_resize(dyn_c *dict, const dyn_ushort size)
Set the available space for elements.
trilean dyn_list_copy(const dyn_c *list, dyn_c *copy)
Make a deep copy of the entire list.
trilean dyn_op_b_shift_l(dyn_c *dyn1, dyn_c *dyn2)
Binary shift left.
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.
void dyn_set_ref(dyn_c *ref, dyn_c *orig)
Set dynamic element as reference to another dynamic element.
void dyn_dict_free(dyn_c *dict)
Free all allocated memory.
void dyn_list_string_add(const dyn_c *list, dyn_str str)
Add string representation of a list to str.
trilean dyn_set_dict(dyn_c *dyn, const dyn_ushort length)
Set dyn to a dictionary with a max. length of elements.
float dyn_float
basic float definition (32 bit)
void dyn_free(dyn_c *dyn)
free allocated memory
trilean dyn_op_sub(dyn_c *dyn1, dyn_c *dyn2)
Subtract dyn2 from dyn1.
void dyn_list_free(dyn_c *list)
Free the allocated memory of the entire list and set it to NONE.
trilean dyn_list_resize(dyn_c *list, const dyn_ushort size)
Change the maximal space of a list.
trilean dyn_op_xor(dyn_c *dyn1, dyn_c *dyn2)
Logical (trinary) XOR operation.
trilean dyn_op_mul(dyn_c *dyn1, dyn_c *dyn2)
Multiply dyn1 with dyn2.
char * dyn_str
Standard dynamic C string.
void dyn_set_int(dyn_c *dyn, const dyn_int v)
Set dynamic element to INTEGER.
trilean dyn_op_b_and(dyn_c *dyn1, dyn_c *dyn2)
Binary AND.
TYPE dyn_type(const dyn_c *dyn)
Return type value of a dynamic element.
dyn_ushort dyn_list_string_len(const dyn_c *list)
Return the length of the string representation of a list.
trilean dyn_set_list_len(dyn_c *dyn, dyn_ushort len)
Set dynamic element to list with maximal length.
Basic container for dynamic data types.