#include #include extern func_malloc ds_malloc; extern func_free ds_free; ds_array_t* ds_array_init(func_destroyer destroyer, int size) { ds_array_t* arr = (ds_array_t*)ds_malloc(sizeof(ds_array_t)); if (!arr) { return NULL; } if(size <= 0) { size = DEF_ARRAY_SIZE; } arr->ptr = (ds_data_t*)ds_malloc(sizeof(ds_data_t) * size); if(!arr->ptr) { ds_free(arr); return NULL; } arr->destroyer = destroyer; return arr; } void ds_array_destroy(ds_array_t* arr) { int i; if(!arr) { return; } for(i=0; isize; i++) { if(arr->destroyer) { arr->destroyer(arr->ptr+i); } } } int ds_array_get(ds_array_t* arr, int pos, ds_data_t* data) { if(!arr) { return DS_ERR_PARAMS; } if(pos >= arr->size){ return DS_ERR_PARAMS; } if(data){ *data = arr->ptr + pos; } return DS_ERR_OK; } int ds_array_set(ds_array_t* arr, int pos, ds_data_t data) { if(!arr) { return DS_ERR_PARAMS; } if(pos >= arr->size){ return DS_ERR_PARAMS; } arr->ptr[pos] = data; return DS_ERR_OK; } int ds_array_fill(ds_array_t* arr, ds_data_t data) { if(!arr) { return DS_ERR_PARAMS; } int i; for (i=0; isize; i++){ arr->ptr[i] = data; } return DS_ERR_OK; }