41 lines
1.1 KiB
C
41 lines
1.1 KiB
C
#ifndef __CORE_QUEUE_H__
|
|
#define __CORE_QUEUE_H__
|
|
|
|
#include "core.h"
|
|
|
|
#define que_declare(__name, __type, __size) \
|
|
struct { \
|
|
int head, tail, size, used; \
|
|
__type pool[(__size)]; \
|
|
} __name
|
|
|
|
#define que_init(__pname, __size) \
|
|
((__pname)->head = (__pname)->tail = 0, \
|
|
(__pname)->used = 0, \
|
|
(__pname)->size = __size)
|
|
|
|
#define que_push(__pname, __ptr_node) \
|
|
((__pname)->used == ((__pname)->size) ? -1 : \
|
|
(((__pname)->pool[(__pname)->head] = *(__ptr_node), \
|
|
(__pname)->head = ((__pname)->head + 1) % ((__pname)->size), \
|
|
++(__pname)->used)))
|
|
|
|
|
|
#define que_pop(__pname, __ptr_node) \
|
|
((__pname)->used == 0 ? -1 : \
|
|
((*(__ptr_node) = (__pname)->pool[(__pname)->tail], \
|
|
(__pname)->tail = ((__pname)->tail + 1) % ((__pname)->size), \
|
|
--(__pname)->used)))
|
|
|
|
#define que_is_empty(__pname) ((__pname)->used == 0)
|
|
|
|
#define que_is_full(__pname) ((__pname)->used == (__pname)->size)
|
|
|
|
#define que_size(__pname) ((__pname)->size)
|
|
|
|
#define que_used(__pname) ((__pname)->used)
|
|
|
|
#define que_avail(__pname) (que_size(__pname) - que_used(__pname))
|
|
|
|
#endif /* ! __CORE_QUEUE_H__ */
|