added API and hooks to override the queue implementation
git-svn-id: http://svn.openzap.org/svn/openzap/branches/sangoma_boost@865 a93c3328-9c30-0410-af19-c9cd2b2d52af
This commit is contained in:
parent
34307d8e52
commit
9750bbed52
|
@ -29,6 +29,11 @@
|
|||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* Contributors:
|
||||
*
|
||||
* Moises Silva <moy@sangoma.com>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef OPENZAP_H
|
||||
|
@ -610,22 +615,39 @@ struct zap_io_interface {
|
|||
struct zap_queue;
|
||||
#define zap_queue_t struct zap_queue
|
||||
|
||||
typedef zap_status_t (*zap_queue_create_func_t)(zap_queue_t **queue, zap_size_t);
|
||||
typedef zap_status_t (*zap_queue_enqueue_func_t)(zap_queue_t *queue, void *obj);
|
||||
typedef void *(*zap_queue_dequeue_func_t)(zap_queue_t *queue);
|
||||
typedef zap_status_t (*zap_queue_wait_func_t)(zap_queue_t *queue, int ms);
|
||||
typedef zap_status_t (*zap_queue_destroy_func_t)(zap_queue_t **queue);
|
||||
typedef struct zap_queue_handler {
|
||||
zap_queue_create_func_t create;
|
||||
zap_queue_enqueue_func_t enqueue;
|
||||
zap_queue_dequeue_func_t dequeue;
|
||||
zap_queue_wait_func_t wait;
|
||||
zap_queue_destroy_func_t destroy;
|
||||
} zap_queue_handler_t;
|
||||
OZ_DECLARE_DATA extern zap_queue_handler_t g_zap_queue_handler;
|
||||
|
||||
/*! brief create a new queue */
|
||||
OZ_DECLARE(zap_status_t) zap_queue_create(zap_queue_t **queue, zap_size_t size);
|
||||
#define zap_queue_create(queue, size) g_zap_queue_handler.create(queue, size)
|
||||
|
||||
/*! Enqueue an object */
|
||||
OZ_DECLARE(zap_status_t) zap_queue_enqueue(zap_queue_t *queue, void *obj);
|
||||
#define zap_queue_enqueue(queue, obj) g_zap_queue_handler.enqueue(queue, obj)
|
||||
|
||||
/*! dequeue an object from the queue */
|
||||
OZ_DECLARE(void *) zap_queue_dequeue(zap_queue_t *queue);
|
||||
#define zap_queue_dequeue(queue) g_zap_queue_handler.dequeue(queue)
|
||||
|
||||
/*! wait ms milliseconds for a queue to have available objects, -1 to wait forever */
|
||||
OZ_DECLARE(zap_status_t) zap_queue_wait(zap_queue_t *queue, int ms);
|
||||
#define zap_queue_wait(queue, ms) g_zap_queue_handler.wait(queue, ms)
|
||||
|
||||
/*! destroy the queue */
|
||||
OZ_DECLARE(zap_status_t) zap_queue_destroy(zap_queue_t **queue);
|
||||
#define zap_queue_destroy(queue) g_zap_queue_handler.destroy(queue)
|
||||
|
||||
/* Duplicate string */
|
||||
/*! \brief Override the default queue handler */
|
||||
OZ_DECLARE(zap_status_t) zap_global_set_queue_handler(zap_queue_handler_t *handler);
|
||||
|
||||
/*! \brief Duplicate string */
|
||||
OZ_DECLARE(char *) zap_strdup(const char *str);
|
||||
|
||||
OZ_DECLARE(zap_size_t) zap_fsk_modulator_generate_bit(zap_fsk_modulator_t *fsk_trans, int8_t bit, int16_t *buf, zap_size_t buflen);
|
||||
|
|
|
@ -29,6 +29,11 @@
|
|||
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
||||
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
||||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*
|
||||
* Contributors:
|
||||
*
|
||||
* Moises Silva <moy@sangoma.com>
|
||||
*
|
||||
*/
|
||||
|
||||
#define _GNU_SOURCE
|
||||
|
|
|
@ -32,13 +32,9 @@
|
|||
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
*/
|
||||
|
||||
#ifndef ZAP_QUEUE_H
|
||||
#define ZAP_QUEUE_H
|
||||
|
||||
#include "openzap.h"
|
||||
|
||||
#undef zap_queue_t
|
||||
#define ZAP_QUEUE_SIZE
|
||||
typedef struct zap_queue {
|
||||
zap_mutex_t *mutex;
|
||||
zap_condition_t *condition;
|
||||
|
@ -48,7 +44,36 @@ typedef struct zap_queue {
|
|||
void **elements;
|
||||
} zap_queue_t;
|
||||
|
||||
OZ_DECLARE(zap_status_t) zap_queue_create(zap_queue_t **outqueue, zap_size_t size)
|
||||
static zap_status_t zap_std_queue_create(zap_queue_t **outqueue, zap_size_t size);
|
||||
static zap_status_t zap_std_queue_enqueue(zap_queue_t *queue, void *obj);
|
||||
static void *zap_std_queue_dequeue(zap_queue_t *queue);
|
||||
static zap_status_t zap_std_queue_wait(zap_queue_t *queue, int ms);
|
||||
static zap_status_t zap_std_queue_destroy(zap_queue_t **inqueue);
|
||||
|
||||
OZ_DECLARE_DATA zap_queue_handler_t g_zap_queue_handler =
|
||||
{
|
||||
.create = zap_std_queue_create,
|
||||
.enqueue = zap_std_queue_enqueue,
|
||||
.dequeue = zap_std_queue_dequeue,
|
||||
.wait = zap_std_queue_wait,
|
||||
.destroy = zap_std_queue_destroy
|
||||
};
|
||||
|
||||
OZ_DECLARE(zap_status_t) zap_global_set_queue_handler(zap_queue_handler_t *handler)
|
||||
{
|
||||
if (!handler ||
|
||||
!handler->create ||
|
||||
!handler->enqueue ||
|
||||
!handler->dequeue ||
|
||||
!handler->wait ||
|
||||
!handler->destroy) {
|
||||
return ZAP_FAIL;
|
||||
}
|
||||
memcpy(&g_zap_queue_handler, handler, sizeof(*handler));
|
||||
return ZAP_SUCCESS;
|
||||
}
|
||||
|
||||
static zap_status_t zap_std_queue_create(zap_queue_t **outqueue, zap_size_t size)
|
||||
{
|
||||
zap_assert(outqueue, ZAP_FAIL, "Queue double pointer is null\n");
|
||||
zap_assert(size > 0, ZAP_FAIL, "Queue size is not bigger than 0\n");
|
||||
|
@ -90,7 +115,7 @@ failed:
|
|||
return ZAP_FAIL;
|
||||
}
|
||||
|
||||
OZ_DECLARE(zap_status_t) zap_queue_enqueue(zap_queue_t *queue, void *obj)
|
||||
static zap_status_t zap_std_queue_enqueue(zap_queue_t *queue, void *obj)
|
||||
{
|
||||
zap_status_t status = ZAP_FAIL;
|
||||
|
||||
|
@ -120,7 +145,7 @@ done:
|
|||
return status;
|
||||
}
|
||||
|
||||
OZ_DECLARE(void *) zap_queue_dequeue(zap_queue_t *queue)
|
||||
static void *zap_std_queue_dequeue(zap_queue_t *queue)
|
||||
{
|
||||
void *obj = NULL;
|
||||
|
||||
|
@ -143,7 +168,7 @@ done:
|
|||
return obj;
|
||||
}
|
||||
|
||||
OZ_DECLARE(zap_status_t) zap_queue_wait(zap_queue_t *queue, int ms)
|
||||
static zap_status_t zap_std_queue_wait(zap_queue_t *queue, int ms)
|
||||
{
|
||||
zap_assert(queue != NULL, ZAP_FAIL, "Queue is null!");
|
||||
|
||||
|
@ -164,7 +189,7 @@ OZ_DECLARE(zap_status_t) zap_queue_wait(zap_queue_t *queue, int ms)
|
|||
return ZAP_SUCCESS;
|
||||
}
|
||||
|
||||
OZ_DECLARE(zap_status_t) zap_queue_destroy(zap_queue_t **inqueue)
|
||||
static zap_status_t zap_std_queue_destroy(zap_queue_t **inqueue)
|
||||
{
|
||||
zap_queue_t *queue = NULL;
|
||||
zap_assert(inqueue != NULL, ZAP_FAIL, "Queue is null!");
|
||||
|
@ -179,8 +204,6 @@ OZ_DECLARE(zap_status_t) zap_queue_destroy(zap_queue_t **inqueue)
|
|||
return ZAP_SUCCESS;
|
||||
}
|
||||
|
||||
#endif
|
||||
|
||||
/* For Emacs:
|
||||
* Local Variables:
|
||||
* mode:c
|
||||
|
|
|
@ -15,6 +15,10 @@
|
|||
* constitutes an essential part of this license. No use of any covered code is authorized hereunder
|
||||
* except under this disclaimer.
|
||||
*
|
||||
* Contributors:
|
||||
*
|
||||
* Moises Silva <moy@sangoma.com>
|
||||
*
|
||||
*/
|
||||
|
||||
#ifdef WIN32
|
||||
|
|
Loading…
Reference in New Issue