* File name: m_que.h
* Author: Seree Rakwong
* Date: 16-SEP-2013
*
*/
#ifndef _MQUE_H_
#define _MQUE_H_
#include "m_list.h"
#ifdef __cplusplus
extern "C" {
#endif
typedef void* mque_t;
long mque_init();
void mque_release();
mque_t mque_create();
void mque_destroy(mque_t que);
int mque_enque(mque_t que, const void *data, size_t size);
size_t mque_get_que(mque_t que, void *data, size_t size);
int mque_deque(mque_t que);
int mque_get_count(mque_t que);
int mque_is_empty(mque_t que);
#ifdef __cplusplus
}
#endif
#endif /* _MQUE_H_ */
/*
* File name: m_que.c
* Author: Seree Rakwong
* Date: 16-SEP-2013
*
*/
#include "m_que.h"
#define MQUE_SIGNATURE 0x51554500
#ifdef __cplusplus
extern "C" {
#endif
typedef struct mque_s
{
mlist_t list;
unsigned long signature;
} mque_s, *mque_sp;
/*
* #################### BOF helper functions ####################
*/
mque_sp mque_verify_que(mque_t que)
{
mque_sp pque = (mque_sp)que;
if (!pque || pque->signature != MQUE_SIGNATURE)
return 0;
return pque;
}
/*
#################### EOF helper functions ####################
*/
long mque_init()
{
return mlist_init();
}
void mque_release()
{
mlist_init();
}
mque_t mque_create()
{
mque_sp pque = (mque_sp)malloc(sizeof(mque_s));
if (!pque)
return 0;
pque->list = mlist_create();
pque->signature = MQUE_SIGNATURE;
return (mque_t)pque;
}
void mque_destroy(mque_t que)
{
mque_sp pque = mque_verify_que(que);
if (!pque)
return;
mlist_destroy(pque->list);
free(pque);
pque = 0;
}
int mque_enque(mque_t que, const void *data, size_t size)
{
mque_sp pque = mque_verify_que(que);
if (!pque)
return 1;
if (0 == mlist_insert_last(pque->list, data, size))
return -1;
return 0;
}
size_t mque_get_que(mque_t que, void *data, size_t size)
{
mque_sp pque = mque_verify_que(que);
if (!pque)
return -1;
return mlist_get_item(mlist_get_begin(pque->list), data, size);
}
int mque_deque(mque_t que)
{
mque_sp pque = mque_verify_que(que);
if (!pque)
return 1;
return mlist_remove_first(pque->list);
}
int mque_get_count(mque_t que)
{
mque_sp pque = mque_verify_que(que);
if (!pque)
return -1;
return mlist_get_count(pque->list);
}
int mque_is_empty(mque_t que)
{
return (mque_get_count(que) == 0);
}
#ifdef __cplusplus
}
#endif
No comments:
Post a Comment