+/* Declaration of new static custom array without support of runtime modifications */
+#define GSA_STATIC_CUST_DEC(cust_prefix, cust_array_t, cust_item_t, cust_key_t,\
+ cust_array_field, cust_item_key, cust_cmp_fnc) \
+\
+GSA_BASE_CUST_DEC(cust_prefix, cust_array_t, cust_item_t, cust_key_t,\
+ cust_array_field, cust_item_key, cust_cmp_fnc) \
+\
+GSA_IT_CUST_DEC(cust_prefix, const cust_array_t, cust_item_t, cust_key_t)
+
+/*** Declaration of dynamic custom array with ***/
+#define GSA_CUST_DEC(cust_prefix, cust_array_t, cust_item_t, cust_key_t,\
+ cust_array_field, cust_item_key, cust_cmp_fnc) \
+\
+GSA_BASE_CUST_DEC(cust_prefix, cust_array_t, cust_item_t, cust_key_t,\
+ cust_array_field, cust_item_key, cust_cmp_fnc) \
+\
+int cust_prefix##_insert(cust_array_t *array, cust_item_t *item);\
+int cust_prefix##_delete(cust_array_t *array, const cust_item_t *item);\
+\
+static inline void \
+cust_prefix##_init_array_field(cust_array_t *array)\
+{\
+ gsa_cust_init_array_field(&array->cust_array_field);\
+}\
+\
+static inline int \
+cust_prefix##_insert_at(cust_array_t *array, cust_item_t *item, unsigned indx)\
+{\
+ return gsa_cust_insert_at(&array->cust_array_field, item, indx);\
+}\
+\
+static inline int \
+cust_prefix##_delete_at(cust_array_t *array, unsigned indx)\
+{\
+ return gsa_cust_delete_at(&array->cust_array_field, indx);\
+}\
+\
+static inline cust_item_t *\
+cust_prefix##_cut_last(cust_array_t *array)\
+{\
+ if(cust_prefix##_is_empty(array)) return NULL;\
+ return (cust_item_t *)array->cust_array_field.items\
+ [--array->cust_array_field.count];\
+}\
+/*** Iterators ***/\
+GSA_IT_CUST_DEC(cust_prefix, cust_array_t, cust_item_t, cust_key_t) \
+\
+static inline void \
+cust_prefix##_delete_it(cust_prefix##_it_t *it)\
+{\
+ cust_prefix##_delete_at(it->container,it->indx);\
+}\
+
+