Mercurial > libavformat.hg
changeset 151:ec4d9190d3b1 libavformat
dynamic array functions
author | bellard |
---|---|
date | Fri, 13 Jun 2003 14:22:23 +0000 |
parents | 46e80c40ab9f |
children | cc03a75cbde4 |
files | avformat.h cutils.c |
diffstat | 2 files changed, 31 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/avformat.h Mon Jun 09 19:11:50 2003 +0000 +++ b/avformat.h Fri Jun 13 14:22:23 2003 +0000 @@ -428,6 +428,16 @@ void pstrcpy(char *buf, int buf_size, const char *str); char *pstrcat(char *buf, int buf_size, const char *s); +void __dynarray_add(unsigned long **tab_ptr, int *nb_ptr, unsigned long elem); + +#define dynarray_add(tab, nb_ptr, elem)\ +do {\ + typeof(tab) _tab = (tab);\ + typeof(elem) _elem = (elem);\ + (void)sizeof(**_tab == _elem); /* check that types are compatible */\ + __dynarray_add((unsigned long **)_tab, nb_ptr, (unsigned long)_elem);\ +} while(0) + struct in_addr; int resolve_host(struct in_addr *sin_addr, const char *hostname);
--- a/cutils.c Mon Jun 09 19:11:50 2003 +0000 +++ b/cutils.c Fri Jun 13 14:22:23 2003 +0000 @@ -108,3 +108,24 @@ } #endif + +/* add one element to a dynamic array */ +void __dynarray_add(unsigned long **tab_ptr, int *nb_ptr, unsigned long elem) +{ + int nb, nb_alloc; + unsigned long *tab; + + nb = *nb_ptr; + tab = *tab_ptr; + if ((nb & (nb - 1)) == 0) { + if (nb == 0) + nb_alloc = 1; + else + nb_alloc = nb * 2; + tab = av_realloc(tab, nb_alloc * sizeof(unsigned long)); + *tab_ptr = tab; + } + tab[nb++] = elem; + *nb_ptr = nb; +} +