Enhance astobj2 to support other types of containers.
authorRichard Mudgett <rmudgett@digium.com>
Wed, 12 Sep 2012 21:02:29 +0000 (21:02 +0000)
committerRichard Mudgett <rmudgett@digium.com>
Wed, 12 Sep 2012 21:02:29 +0000 (21:02 +0000)
commitfb1d9a90a4e67c832486f35c54dab5b99ef62941
tree667bde49b2a70ea07f608e7ed24220284f842d7f
parent189249cc73d66948957884494ed23da738ab4cd1
Enhance astobj2 to support other types of containers.

The new API allows for sorted containers, insertion options, duplicate
handling options, and traversal order options.

* Adds the ability for containers to be sorted when they are created.

* Adds container creation options to handle duplicates when they are
inserted.

* Adds container creation option to insert objects at the beginning or end
of the container traversal order.

* Adds OBJ_PARTIAL_KEY to allow searching with a partial key.  The partial
key works similarly to the OBJ_KEY flag.  (The real search speed
improvement with this flag will come when red-black trees are added.)

* Adds container traversal and iteration order options: Ascending and
Descending.

* Adds an AST_DEVMODE compile feature to check the stats and integrity of
registered containers using the CLI "astobj2 container stats <name>" and
"astobj2 container check <name>".  The channels container is normally
registered since it is one of the most important containers in the system.

* Adds ao2_iterator_restart() to allow iteration to be restarted from the
beginning.

* Changes the generic container object to have a v_method table pointer to
support other types of containers.

* Changes the container nodes holding objects to be ref counted.

The ref counted nodes and v_method table pointer changes pave the way to
allow other types of containers.

* Includes a large astobj2 unit test enhancement that tests the new
features.

(closes issue ASTERISK-19969)
Reported by: rmudgett

Review: https://reviewboard.asterisk.org/r/2078/

git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@372997 65c4cc65-6c06-0410-ace0-fbb531ad65f3
include/asterisk/astobj2.h
main/astobj2.c
main/channel.c
tests/test_astobj2.c