aboutsummaryrefslogtreecommitdiff
path: root/src/backend/tioga/Varray.c
blob: 3ed45c665615df785833cf79dcd442766b24895c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
/* ************************************************************************
 *
 * 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;
}