Adding ptr_array data structure.
This commit is contained in:
@@ -455,6 +455,13 @@ struct early_opt {
|
||||
boolean valallowed;
|
||||
};
|
||||
|
||||
struct ptr_array {
|
||||
size_t length;
|
||||
size_t max_length;
|
||||
void ** elements;
|
||||
};
|
||||
typedef struct ptr_array ptr_array_t;
|
||||
|
||||
#undef E
|
||||
|
||||
#endif /* DECL_H */
|
||||
|
||||
@@ -968,6 +968,8 @@ E void FDECL(strbuf_append, (strbuf_t *, const char *));
|
||||
E void FDECL(strbuf_reserve, (strbuf_t *, int));
|
||||
E void FDECL(strbuf_empty, (strbuf_t *));
|
||||
E void FDECL(strbuf_nl_to_crlf, (strbuf_t *));
|
||||
E struct ptr_array * FDECL(ptr_array_new, (size_t length));
|
||||
E void FDECL(ptr_array_free, (struct ptr_array *));
|
||||
|
||||
/* ### invent.c ### */
|
||||
|
||||
|
||||
@@ -1223,4 +1223,38 @@ strbuf_t *strbuf;
|
||||
}
|
||||
}
|
||||
|
||||
ptr_array_t *
|
||||
ptr_array_new(max_length)
|
||||
size_t max_length;
|
||||
{
|
||||
size_t esize = max_length * sizeof(void *);
|
||||
ptr_array_t * a = (ptr_array_t *) malloc(sizeof(ptr_array_t) + esize);
|
||||
a->elements = (void **)(a + 1);
|
||||
a->length = 0;
|
||||
a->max_length = max_length;
|
||||
memset(a->elements, 0, esize);
|
||||
return a;
|
||||
}
|
||||
|
||||
void
|
||||
ptr_array_free(a)
|
||||
ptr_array_t * a;
|
||||
{
|
||||
size_t i;
|
||||
|
||||
nhassert(a->length <= a->max_length);
|
||||
|
||||
for(i = 0; i < a->length; i++)
|
||||
if(a->elements[i])
|
||||
free(a->elements[i]);
|
||||
|
||||
for (i = a->length; i < a->max_length; i++) {
|
||||
nhassert(a->elements[i] == NULL);
|
||||
if(a->elements[i])
|
||||
free(a->elements[i]);
|
||||
}
|
||||
|
||||
free(a);
|
||||
}
|
||||
|
||||
/*hacklib.c*/
|
||||
|
||||
Reference in New Issue
Block a user