Adding ptr_array data structure.
This commit is contained in:
@@ -455,6 +455,13 @@ struct early_opt {
|
|||||||
boolean valallowed;
|
boolean valallowed;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct ptr_array {
|
||||||
|
size_t length;
|
||||||
|
size_t max_length;
|
||||||
|
void ** elements;
|
||||||
|
};
|
||||||
|
typedef struct ptr_array ptr_array_t;
|
||||||
|
|
||||||
#undef E
|
#undef E
|
||||||
|
|
||||||
#endif /* DECL_H */
|
#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_reserve, (strbuf_t *, int));
|
||||||
E void FDECL(strbuf_empty, (strbuf_t *));
|
E void FDECL(strbuf_empty, (strbuf_t *));
|
||||||
E void FDECL(strbuf_nl_to_crlf, (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 ### */
|
/* ### 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*/
|
/*hacklib.c*/
|
||||||
|
|||||||
Reference in New Issue
Block a user