From bd82d030011cd8b9655e5ded6b6df9343b42a6bd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Frings-F=C3=BCrst?= Date: Wed, 4 Feb 2015 14:09:54 +0100 Subject: Imported Upstream version 3.22 --- include/libHX/deque.h | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 include/libHX/deque.h (limited to 'include/libHX/deque.h') diff --git a/include/libHX/deque.h b/include/libHX/deque.h new file mode 100644 index 0000000..f43def9 --- /dev/null +++ b/include/libHX/deque.h @@ -0,0 +1,86 @@ +#ifndef _LIBHX_DEQUE_H +#define _LIBHX_DEQUE_H 1 + +#ifdef __cplusplus +# include +#else +# include +#endif + +#ifdef __cplusplus +extern "C" { +#endif + +struct HXdeque_node { + struct HXdeque_node *next; + union { + void *ptr; + char *sptr; + }; + struct HXdeque *parent; + struct HXdeque_node *prev; +}; + +struct HXdeque { + struct HXdeque_node *first; + void *ptr; + struct HXdeque_node *last; + unsigned int items; +}; + +extern struct HXdeque *HXdeque_init(void); +extern struct HXdeque_node *HXdeque_push(struct HXdeque *, const void *); +extern struct HXdeque_node *HXdeque_unshift(struct HXdeque *, const void *); +extern void *HXdeque_pop(struct HXdeque *); +extern void *HXdeque_shift(struct HXdeque *); +extern void HXdeque_move(struct HXdeque_node *, struct HXdeque_node *); +extern struct HXdeque_node *HXdeque_find(struct HXdeque *, const void *); +extern void *HXdeque_get(struct HXdeque *, const void *); +extern void *HXdeque_del(struct HXdeque_node *); +extern void HXdeque_free(struct HXdeque *); +extern void HXdeque_genocide2(struct HXdeque *, void (*)(void *)); +extern void **HXdeque_to_vec(const struct HXdeque *, unsigned int *); + +static __inline__ void HXdeque_genocide(struct HXdeque *dq) +{ + HXdeque_genocide2(dq, free); +} + +#ifdef __cplusplus +} /* extern "C" */ + +extern "C++" { + +template static __inline__ type HXdeque_pop(struct HXdeque *dq) +{ + return reinterpret_cast(HXdeque_pop(dq)); +} + +template static __inline__ type +HXdeque_shift(struct HXdeque *dq) +{ + return reinterpret_cast(HXdeque_shift(dq)); +} + +template static __inline__ type +HXdeque_get(struct HXdeque *dq, const void *ptr) +{ + return reinterpret_cast(HXdeque_get(dq, ptr)); +} + +template static __inline__ type +HXdeque_del(struct HXdeque_node *nd) +{ + return reinterpret_cast(HXdeque_del(nd)); +} + +template static __inline__ type * +HXdeque_to_vec(struct HXdeque *dq, unsigned int *n) +{ + return reinterpret_cast(HXdeque_to_vec(dq, n)); +} + +} /* extern "C++" */ +#endif + +#endif /* _LIBHX_DEQUE_H */ -- cgit v1.2.3