| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- #include <ds/array.h>
- #include <ds/err.h>
- 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; i<arr->size; 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; i<arr->size; i++){
- arr->ptr[i] = data;
- }
- return DS_ERR_OK;
- }
|