From: Corey Farrell Date: Tue, 7 Nov 2017 20:00:33 +0000 (-0500) Subject: vectors: Add new macro and a string vector definition. X-Git-Tag: 13.19.0-rc1~132^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2ad6210dd7b9071de3a2d3fb6ebdcb243ec470da;p=thirdparty%2Fasterisk.git vectors: Add new macro and a string vector definition. * AST_VECTOR_STEAL_ELEMENTS - steal the array of elements for use with non-vector code. * struct ast_vector_string - a vector of 'char *'. Change-Id: I104d1b204be03fccf67e02a195596adcb5ab1e42 --- diff --git a/include/asterisk/vector.h b/include/asterisk/vector.h index 8270e25a9f..2ee5e29a6a 100644 --- a/include/asterisk/vector.h +++ b/include/asterisk/vector.h @@ -51,6 +51,9 @@ /*! \brief Integer vector definition */ AST_VECTOR(ast_vector_int, int); +/*! \brief String vector definition */ +AST_VECTOR(ast_vector_string, char *); + /*! * \brief Define a vector structure with a read/write lock * @@ -90,6 +93,26 @@ AST_VECTOR(ast_vector_int, int); (alloc_size == 0 || (vec)->elems != NULL) ? 0 : -1; \ }) +/*! + * \brief Steal the elements from a vector and reinitialize. + * + * \param vec Vector to operate on. + * + * This allows you to use vector.h to construct a list and use the + * data as a bare array. + * + * \note The stolen array must eventually be released using ast_free. + * + * \warning AST_VECTOR_SIZE and AST_VECTOR_MAX_SIZE are both reset + * to 0. If either are needed they must be saved to a local + * variable before stealing the elements. + */ +#define AST_VECTOR_STEAL_ELEMENTS(vec) ({ \ + typeof((vec)->elems) __elems = (vec)->elems; \ + AST_VECTOR_INIT((vec), 0); \ + (__elems); \ +}) + /*! * \brief Initialize a vector with a read/write lock *