postgresql/src/backend/tioga/Varray.c

49 lines
1.2 KiB
C

/* ************************************************************************
*
* Varray.c
*
* routines to provide a generic set of functions to handle variable sized
* arrays. originally by Jiang Wu
* ************************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include "Varray.h"
Varray *
NewVarray(size_t nobj, size_t size)
/*
* NewVarray -- allocate a Varray to contain an array of val each of which
* is size valSize. Returns the Varray if successful,
* returns NULL otherwise.
*/
{
Varray *result;
if (nobj == 0)
nobj = VARRAY_INITIAL_SIZE;
result = (Varray *) malloc(sizeof(Varray));
result->val = (void *) calloc(nobj, size);
if (result == NULL)
return NULL;
result->size = size;
result->nobj = 0;
result->maxObj = nobj;
return result;
}
int
AppendVarray(Varray * array, void *value, CopyingFunct copy)
/*
* AppendVarray -- append value to the end of array. This function
* returns the size of the array after the addition of
* the new element.
*/
{
copy(value, VARRAY_NTH(array->val, array->size, array->nobj));
array->nobj++;
if (array->nobj >= array->maxObj)
ENLARGE_VARRAY(array, array->maxObj / 2);
return array->nobj;
}