array.c 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. #include <ds/array.h>
  2. #include <ds/err.h>
  3. extern func_malloc ds_malloc;
  4. extern func_free ds_free;
  5. ds_array_t* ds_array_init(func_destroyer destroyer, int size)
  6. {
  7. ds_array_t* arr = (ds_array_t*)ds_malloc(sizeof(ds_array_t));
  8. if (!arr) {
  9. return NULL;
  10. }
  11. if(size <= 0) {
  12. size = DEF_ARRAY_SIZE;
  13. }
  14. arr->ptr = (ds_data_t*)ds_malloc(sizeof(ds_data_t) * size);
  15. if(!arr->ptr) {
  16. ds_free(arr);
  17. return NULL;
  18. }
  19. arr->destroyer = destroyer;
  20. return arr;
  21. }
  22. void ds_array_destroy(ds_array_t* arr)
  23. {
  24. int i;
  25. if(!arr) {
  26. return;
  27. }
  28. for(i=0; i<arr->size; i++) {
  29. if(arr->destroyer) {
  30. arr->destroyer(arr->ptr+i);
  31. }
  32. }
  33. }
  34. int ds_array_get(ds_array_t* arr, int pos, ds_data_t* data)
  35. {
  36. if(!arr) {
  37. return DS_ERR_PARAMS;
  38. }
  39. if(pos >= arr->size){
  40. return DS_ERR_PARAMS;
  41. }
  42. if(data){
  43. *data = arr->ptr + pos;
  44. }
  45. return DS_ERR_OK;
  46. }
  47. int ds_array_set(ds_array_t* arr, int pos, ds_data_t data)
  48. {
  49. if(!arr) {
  50. return DS_ERR_PARAMS;
  51. }
  52. if(pos >= arr->size){
  53. return DS_ERR_PARAMS;
  54. }
  55. arr->ptr[pos] = data;
  56. return DS_ERR_OK;
  57. }
  58. int ds_array_fill(ds_array_t* arr, ds_data_t data)
  59. {
  60. if(!arr) {
  61. return DS_ERR_PARAMS;
  62. }
  63. int i;
  64. for (i=0; i<arr->size; i++){
  65. arr->ptr[i] = data;
  66. }
  67. return DS_ERR_OK;
  68. }