HTArray.c
上传用户:zlh9724
上传日期:2007-01-04
资源大小:1991k
文件大小:2k
- /* HTArray.c
- ** ARRAY HANDLING: FLEXIBLE ARRAYS OF POINTERS
- **
- ** (c) COPYRIGHT MIT 1995.
- ** Please first read the full copyright statement in the file COPYRIGH.
- **
- ** history: Sep 95 HFN Written after looking at Hancock Tower
- */
- /* Library include files */
- #include "tcp.h"
- #include "HTUtils.h"
- #include "HTArray.h" /* Implemented here */
- /* Create a array with a certain allocation unit
- ** --------------
- */
- PUBLIC HTArray * HTArray_new (int grow)
- {
- HTArray * array;
- if ((array = (HTArray *) HT_CALLOC(1, sizeof(HTArray))) == NULL)
- HT_OUTOFMEM("HTArray_new");
- array->growby = grow;
- return array;
- }
- /* Clear a array of all data
- ** --------------------------
- */
- PUBLIC BOOL HTArray_clear (HTArray * array)
- {
- if (array) {
- HT_FREE(array->data);
- array->size = 0;
- array->allocated = 0;
- return YES;
- }
- return NO;
- }
- /* Free an array
- ** -------------
- */
- PUBLIC BOOL HTArray_delete (HTArray * array)
- {
- if (array) {
- HT_FREE(array->data);
- HT_FREE(array);
- return YES;
- }
- return NO;
- }
- /* Add an object
- ** -------------
- */
- PUBLIC BOOL HTArray_addObject (HTArray * array, void * object)
- {
- if (array) {
- if (array->size >= array->allocated-1) {
- if (array->data) {
- if ((array->data = (void * *) HT_REALLOC(array->data, (array->allocated+array->growby) * sizeof(void *))) == NULL)
- HT_OUTOFMEM("HTArray_add");
- memset((array->data+array->allocated), ' ', array->growby * sizeof(void *));
- } else {
- if ((array->data = (void * *) HT_CALLOC(array->growby, sizeof(void *))) == NULL)
- HT_OUTOFMEM("HTArray_add");
- }
- array->allocated += array->growby;
- }
- *(array->data+array->size++) = object;
- return YES;
- }
- return NO;
- }
- /* Sort an array
- ** -------------
- */
- PUBLIC BOOL HTArray_sort (HTArray * array, HTComparer * comp)
- {
- if (array && comp) {
- qsort(array->data, array->size, sizeof (void *), comp);
- return YES;
- }
- return NO;
- }