diff options
author | Fabrice Bellard <fabrice@bellard.org> | 2003-06-13 14:22:23 +0000 |
---|---|---|
committer | Fabrice Bellard <fabrice@bellard.org> | 2003-06-13 14:22:23 +0000 |
commit | 39f472c3b6dd8405b33ad3c59f0b52046a393938 (patch) | |
tree | c173fc0b8904e494ba60783c6f2f588c9b99601d | |
parent | 124ba5836fb896e580de0ed5d2f2b0b2daee4a27 (diff) | |
download | ffmpeg-39f472c3b6dd8405b33ad3c59f0b52046a393938.tar.gz |
dynamic array functions
Originally committed as revision 1955 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavformat/avformat.h | 10 | ||||
-rw-r--r-- | libavformat/cutils.c | 21 |
2 files changed, 31 insertions, 0 deletions
diff --git a/libavformat/avformat.h b/libavformat/avformat.h index 3267cba7b1..e7dab88671 100644 --- a/libavformat/avformat.h +++ b/libavformat/avformat.h @@ -428,6 +428,16 @@ int stristart(const char *str, const char *val, const char **ptr); 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); diff --git a/libavformat/cutils.c b/libavformat/cutils.c index 3e46533c6b..28f40b0e2f 100644 --- a/libavformat/cutils.c +++ b/libavformat/cutils.c @@ -108,3 +108,24 @@ char *pstrcat(char *buf, int buf_size, const char *s) } #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; +} + |