diff options
author | wm4 <wm4@nowhere> | 2012-11-10 16:19:53 +0100 |
---|---|---|
committer | wm4 <wm4@nowhere> | 2012-11-12 20:08:57 +0100 |
commit | a6c4f2646fda50e5661acdb8739d1b54ddb38ede (patch) | |
tree | 3d234fd8a5291baed09efc85c9843283371cce06 /core/mp_talloc.h | |
parent | 20e9d06a2fef17a80369fd6c0b911e60c243172d (diff) | |
download | mpv-a6c4f2646fda50e5661acdb8739d1b54ddb38ede.tar.bz2 mpv-a6c4f2646fda50e5661acdb8739d1b54ddb38ede.tar.xz |
mp_common.h: split parts into mp_talloc.h and compiler.h
Put MP_EXPAND_ARGS() in compiler.h, even though it's not compiler
dependent. Both mp_talloc.h and mp_common.h need it, while mp_common.h
includes mp_talloc.h. This is the least annoying solution.
Diffstat (limited to 'core/mp_talloc.h')
-rw-r--r-- | core/mp_talloc.h | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/core/mp_talloc.h b/core/mp_talloc.h new file mode 100644 index 0000000000..ff2b808125 --- /dev/null +++ b/core/mp_talloc.h @@ -0,0 +1,51 @@ +/* + * This file is part of mpv. + * + * mpv is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * mpv is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with mpv; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + */ + +#ifndef MPV_TALLOC_H +#define MPV_TALLOC_H + +#include "talloc.h" +#include "compat/compiler.h" + +#define MP_TALLOC_ELEMS(p) (talloc_get_size(p) / sizeof((p)[0])) +#define MP_GROW_ARRAY(p, nextidx) do { \ + if ((nextidx) == MP_TALLOC_ELEMS(p)) \ + p = talloc_realloc_size(NULL, p, talloc_get_size(p) * 2); } while (0) +#define MP_RESIZE_ARRAY(ctx, p, count) do { \ + p = talloc_realloc_size((ctx), p, (count) * sizeof(p[0])); } while (0) + +#define MP_TARRAY_GROW(ctx, p, nextidx) \ + do { \ + size_t nextidx_ = (nextidx); \ + size_t nelems_ = MP_TALLOC_ELEMS(p); \ + if (nextidx_ >= nelems_) \ + p = talloc_realloc_size((ctx), p, \ + (nextidx_ + 1) * sizeof((p)[0]) * 2);\ + } while (0) + +#define MP_TARRAY_APPEND(ctx, p, idxvar, ...) \ + do { \ + MP_TARRAY_GROW(ctx, p, idxvar); \ + p[idxvar] = (MP_EXPAND_ARGS(__VA_ARGS__)); \ + idxvar++; \ + } while (0) + +#define talloc_struct(ctx, type, ...) \ + talloc_memdup(ctx, &(type) MP_EXPAND_ARGS(__VA_ARGS__), sizeof(type)) + +#endif |