summaryrefslogtreecommitdiff
path: root/main
diff options
context:
space:
mode:
authorGeorge Joseph <george.joseph@fairview5.com>2015-05-01 18:25:17 -0600
committerGeorge Joseph <george.joseph@fairview5.com>2015-05-04 19:46:51 -0500
commit7a7e9733c2288e255f6c3bcc2a56f7088e08b834 (patch)
tree45aaecbb95cf6d49dea99771637e45e74ec099dc /main
parent626bffc4c2833407540cd8f6024bcb4f672c4a2c (diff)
vector: Traversal, retrieval, insert and locking enhancements
Renamed AST_VECTOR_INSERT to AST_VECTOR_REPLACE because it really does replace not insert. The few users of AST_VECTOR_INSERT were refactored. Because these are macros, there should be no ABI compatibility issues. Added AST_VECTOR_INSERT_AT that actually inserts an element into the vector at a specific index pushing existing elements to the right. Added AST_VECTOR_GET_CMP that can retrieve from the vector based on a user-provided compare function. Added AST_VECTOR_CALLBACK function that will execute a function for each element in the vector. Similar to ao2_callback and ao2_callback_data functions although the vector callback can take a variable number of arguments. This should allow easy migration to a vector where a container might be too heavy. Added read/write locked vector and lock manipulation macros. Added unit tests. ASTERISK-25045 #close Change-Id: I2e07ecc709d2f5f91bcab8904e5e9340609b00e0
Diffstat (limited to 'main')
-rw-r--r--main/format_cap.c2
-rw-r--r--main/rtp_engine.c8
2 files changed, 5 insertions, 5 deletions
diff --git a/main/format_cap.c b/main/format_cap.c
index 177652efb..cefad1316 100644
--- a/main/format_cap.c
+++ b/main/format_cap.c
@@ -151,7 +151,7 @@ static inline int format_cap_framed_init(struct format_cap_framed *framed, struc
framed->framing = framing;
if (ast_format_get_codec_id(format) >= AST_VECTOR_SIZE(&cap->formats)) {
- if (AST_VECTOR_INSERT(&cap->formats, ast_format_get_codec_id(format), format_cap_framed_list_empty)) {
+ if (AST_VECTOR_REPLACE(&cap->formats, ast_format_get_codec_id(format), format_cap_framed_list_empty)) {
ao2_ref(framed, -1);
return -1;
}
diff --git a/main/rtp_engine.c b/main/rtp_engine.c
index 4120ba546..e09dcb88c 100644
--- a/main/rtp_engine.c
+++ b/main/rtp_engine.c
@@ -625,7 +625,7 @@ void ast_rtp_codecs_payloads_copy(struct ast_rtp_codecs *src, struct ast_rtp_cod
}
ast_debug(2, "Copying payload %d (%p) from %p to %p\n", i, type, src, dest);
ao2_bump(type);
- AST_VECTOR_INSERT(&dest->payloads, i, type);
+ AST_VECTOR_REPLACE(&dest->payloads, i, type);
if (instance && instance->engine && instance->engine->payload_set) {
instance->engine->payload_set(instance, i, type->asterisk_format, type->format, type->rtp_code);
@@ -662,7 +662,7 @@ void ast_rtp_codecs_payloads_set_m_type(struct ast_rtp_codecs *codecs, struct as
new_type->format = ao2_bump(static_RTP_PT[payload].format);
ast_debug(1, "Setting payload %d (%p) based on m type on %p\n", payload, new_type, codecs);
- AST_VECTOR_INSERT(&codecs->payloads, payload, new_type);
+ AST_VECTOR_REPLACE(&codecs->payloads, payload, new_type);
if (instance && instance->engine && instance->engine->payload_set) {
instance->engine->payload_set(instance, payload, new_type->asterisk_format, new_type->format, new_type->rtp_code);
@@ -727,7 +727,7 @@ int ast_rtp_codecs_payloads_set_rtpmap_type_rate(struct ast_rtp_codecs *codecs,
} else {
new_type->format = ao2_bump(t->payload_type.format);
}
- AST_VECTOR_INSERT(&codecs->payloads, pt, new_type);
+ AST_VECTOR_REPLACE(&codecs->payloads, pt, new_type);
if (instance && instance->engine && instance->engine->payload_set) {
instance->engine->payload_set(instance, pt, new_type->asterisk_format, new_type->format, new_type->rtp_code);
@@ -760,7 +760,7 @@ void ast_rtp_codecs_payloads_unset(struct ast_rtp_codecs *codecs, struct ast_rtp
if (payload < AST_VECTOR_SIZE(&codecs->payloads)) {
type = AST_VECTOR_GET(&codecs->payloads, payload);
ao2_cleanup(type);
- AST_VECTOR_INSERT(&codecs->payloads, payload, NULL);
+ AST_VECTOR_REPLACE(&codecs->payloads, payload, NULL);
}
if (instance && instance->engine && instance->engine->payload_set) {