diff options
author | Corey Farrell <git@cfware.com> | 2016-07-14 14:51:42 -0400 |
---|---|---|
committer | Corey Farrell <git@cfware.com> | 2016-07-15 05:34:29 -0400 |
commit | be36bd7ca565531c09ca444e59b6d057131a9ab0 (patch) | |
tree | 85595a26df4bbfcfc39a78c5c2474984c8c894ce /include/asterisk | |
parent | 273052f40498378d3f2d3548347a243df68ee9a4 (diff) |
pbx: Create pbx_include.c for management of 'struct ast_include'.
This changes context includes from a linked list to a vector, makes
'struct ast_include' opaque to pbx.c.
Although ast_walk_context_includes is maintained the procedure is no
longer efficient except for the first call (inc==NULL). This
functionality is replaced by two new functions implemented by vector
macros.
* ast_context_includes_count (AST_VECTOR_SIZE)
* ast_context_includes_get (AST_VECTOR_GET)
As with ast_walk_context_includes callers of these functions are
expected to have locked contexts. Only a few places in Asterisk walked
the includes, they have been converted to use the new functions.
const have been applied where possible to parameters for ast_include
functions.
Change-Id: Ib5c882e27cf96fb2aec67a39c18b4c71c9c83b60
Diffstat (limited to 'include/asterisk')
-rw-r--r-- | include/asterisk/pbx.h | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/include/asterisk/pbx.h b/include/asterisk/pbx.h index afdcc8da4..378bb556d 100644 --- a/include/asterisk/pbx.h +++ b/include/asterisk/pbx.h @@ -1227,7 +1227,7 @@ int pbx_checkcondition(const char *condition); const char *ast_get_context_name(struct ast_context *con); const char *ast_get_extension_name(struct ast_exten *exten); struct ast_context *ast_get_extension_context(struct ast_exten *exten); -const char *ast_get_include_name(struct ast_include *include); +const char *ast_get_include_name(const struct ast_include *include); const char *ast_get_ignorepat_name(struct ast_ignorepat *ip); const char *ast_get_switch_name(struct ast_sw *sw); const char *ast_get_switch_data(struct ast_sw *sw); @@ -1249,7 +1249,7 @@ void *ast_get_extension_app_data(struct ast_exten *e); /*! @{ */ const char *ast_get_context_registrar(struct ast_context *c); const char *ast_get_extension_registrar(struct ast_exten *e); -const char *ast_get_include_registrar(struct ast_include *i); +const char *ast_get_include_registrar(const struct ast_include *i); const char *ast_get_ignorepat_registrar(struct ast_ignorepat *ip); const char *ast_get_switch_registrar(struct ast_sw *sw); /*! @} */ @@ -1261,13 +1261,19 @@ struct ast_exten *ast_walk_context_extensions(struct ast_context *con, struct ast_exten *priority); struct ast_exten *ast_walk_extension_priorities(struct ast_exten *exten, struct ast_exten *priority); -struct ast_include *ast_walk_context_includes(struct ast_context *con, - struct ast_include *inc); +const struct ast_include *ast_walk_context_includes(const struct ast_context *con, + const struct ast_include *inc); struct ast_ignorepat *ast_walk_context_ignorepats(struct ast_context *con, struct ast_ignorepat *ip); struct ast_sw *ast_walk_context_switches(struct ast_context *con, struct ast_sw *sw); /*! @} */ +/*! @name Iterator functions ... */ +/*! @{ */ +int ast_context_includes_count(const struct ast_context *con); +const struct ast_include *ast_context_includes_get(const struct ast_context *con, int idx); +/*! @} */ + /*! * \brief Create a human-readable string, specifying all variables and their corresponding values. * \param chan Channel from which to read variables |