HTArray.c
Upload User: zlh9724
Upload Date: 2007-01-04
Package Size: 1991k
Code Size: 2k
Category:

Browser Client

Development Platform:

Unix_Linux

  1. /*       HTArray.c
  2. ** ARRAY HANDLING: FLEXIBLE ARRAYS OF POINTERS
  3. **
  4. ** (c) COPYRIGHT MIT 1995.
  5. ** Please first read the full copyright statement in the file COPYRIGH.
  6. **
  7. ** history: Sep 95 HFN Written after looking at Hancock Tower
  8. */
  9. /* Library include files */
  10. #include "tcp.h"
  11. #include "HTUtils.h"
  12. #include "HTArray.h"          /* Implemented here */
  13. /* Create a array with a certain allocation unit
  14. ** --------------
  15. */
  16. PUBLIC HTArray * HTArray_new (int grow)
  17. {
  18.     HTArray * array;
  19.     if ((array = (HTArray  *) HT_CALLOC(1, sizeof(HTArray))) == NULL)
  20.         HT_OUTOFMEM("HTArray_new");
  21.     array->growby = grow;
  22.     return array;
  23. }
  24. /* Clear a array of all data
  25. ** --------------------------
  26. */
  27. PUBLIC BOOL HTArray_clear (HTArray * array)
  28. {
  29.     if (array) {
  30. HT_FREE(array->data);
  31. array->size = 0;
  32. array->allocated = 0;
  33. return YES;
  34.     }
  35.     return NO;
  36. }
  37. /* Free an array
  38. ** -------------
  39. */
  40. PUBLIC BOOL HTArray_delete (HTArray * array)
  41. {
  42.     if (array) {
  43. HT_FREE(array->data);
  44. HT_FREE(array);
  45. return YES;
  46.     }
  47.     return NO;
  48. }
  49. /* Add an object
  50. ** -------------
  51. */
  52. PUBLIC BOOL HTArray_addObject (HTArray * array, void * object)
  53. {
  54.     if (array) {
  55. if (array->size >= array->allocated-1) {
  56.     if (array->data) {
  57. if ((array->data = (void * *) HT_REALLOC(array->data, (array->allocated+array->growby) * sizeof(void *))) == NULL)
  58.     HT_OUTOFMEM("HTArray_add");
  59. memset((array->data+array->allocated), '', array->growby * sizeof(void *));
  60.     } else {
  61. if ((array->data = (void * *) HT_CALLOC(array->growby, sizeof(void *))) == NULL)
  62.     HT_OUTOFMEM("HTArray_add");
  63.     }
  64.     array->allocated += array->growby;
  65. }
  66. *(array->data+array->size++) = object;
  67. return YES;
  68.     }
  69.     return NO;
  70. }
  71. /* Sort an array
  72. ** -------------
  73. */
  74. PUBLIC BOOL HTArray_sort (HTArray * array, HTComparer * comp)
  75. {
  76.     if (array && comp) {
  77. qsort(array->data, array->size, sizeof (void *), comp);
  78. return YES;
  79.     }
  80.     return NO;
  81. }