00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00036 #include "ctrump/common/varray.h"
00037 #include "ctrump/common/mempool.h"
00038 #include <stdlib.h>
00039 #include <string.h>
00040
00041 void
00042 ctrump_varray_init(struct ctrump_varray *a,
00043 size_t n,
00044 size_t elem_size)
00045 {
00046 size_t sz;
00047 a->nelem = 0;
00048 a->size = n;
00049 a->elem_size = elem_size;
00050 sz = elem_size * n;
00051
00052 a->elements = malloc(sz);
00053 }
00054 void
00055 ctrump_varray_init_pool(struct ctrump_varray *a,
00056 size_t n,
00057 size_t elem_size,
00058 struct ctrump_mempool *p)
00059 {
00060 size_t sz;
00061 a->nelem = 0;
00062 a->size = n;
00063 a->elem_size = elem_size;
00064 sz = elem_size * n;
00065
00066 a->elements = ctrump_mempool_alloc(p, sz);
00067 }
00068
00069 void
00070 ctrump_varray_realloc(struct ctrump_varray *a)
00071 {
00072 a->size *= 2;
00073 a->elements = realloc(a->elements, a->size * a->elem_size);
00074 }
00075
00076 void
00077 ctrump_varray_realloc_pool(struct ctrump_varray *a, struct ctrump_mempool *p)
00078 {
00079 void *old = a->elements;
00080 size_t sz = a->size * a->elem_size;
00081 a->size *= 2;
00082 a->elements = ctrump_mempool_alloc(p, a->size * a->elem_size);
00083 memcpy(a->elements, old, sz);
00084 }
00085
00086 void *
00087 ctrump_varray_copy(struct ctrump_varray *a,
00088 struct ctrump_mempool *p)
00089 {
00090 size_t sz = a->nelem * a->elem_size;
00091 void *ret;
00092
00093 ret = ctrump_mempool_alloc(p, sz);
00094 memcpy(ret, a->elements, sz);
00095
00096 return ret;
00097 }
00098
00099
00100 void *
00101 ctrump_varray_close(struct ctrump_varray *a,
00102 struct ctrump_mempool *p)
00103 {
00104 void *ret = ctrump_varray_copy(a, p);
00105 free(a->elements);
00106 return ret;
00107 }
00108
00109 void
00110 ctrump_varray_discard(struct ctrump_varray *a)
00111 {
00112 free(a->elements);
00113 }
00114