xref: /ext-ds/src/php/objects/php_deque.h (revision 8595b29f)
1 #ifndef PHP_DS_DEQUE_H
2 #define PHP_DS_DEQUE_H
3 
4 #include "../../ds/ds_deque.h"
5 
6 typedef struct php_ds_deque {
7     ds_deque_t  *deque;
8     zend_object  std;
9 } php_ds_deque_t;
10 
php_ds_deque_fetch_object(zend_object * obj)11 static inline php_ds_deque_t *php_ds_deque_fetch_object(zend_object *obj) {
12 	return (php_ds_deque_t *)((char*)(obj) - XtOffsetOf(php_ds_deque_t, std));
13 }
14 
15 #define Z_DS_DEQUE(z)   (php_ds_deque_fetch_object(Z_OBJ(z))->deque)
16 #define Z_DS_DEQUE_P(z) Z_DS_DEQUE(*z)
17 #define THIS_DS_DEQUE() Z_DS_DEQUE_P(getThis())
18 
19 #define ZVAL_DS_DEQUE(z, d)  ZVAL_OBJ(z, php_ds_deque_create_object_ex(d))
20 
21 #define RETURN_DS_DEQUE(d)                  \
22 do {                                        \
23     ds_deque_t *_d = d;                     \
24     if (_d) {                               \
25         ZVAL_DS_DEQUE(return_value, _d);    \
26     } else {                                \
27         ZVAL_NULL(return_value);            \
28     }                                       \
29     return;                                 \
30 } while(0)
31 
32 
33 /**
34  * Creates a new zend_object using an existing deque.
35  */
36 zend_object *php_ds_deque_create_object_ex(ds_deque_t *deque);
37 
38 /**
39  * Creates a new deque zend_object.
40  */
41 zend_object *php_ds_deque_create_object(zend_class_entry *ce);
42 
43 /**
44  * Creates an object clone of a deque.
45  */
46 zend_object *php_ds_deque_create_clone(ds_deque_t *deque);
47 
48 PHP_DS_SERIALIZE_FUNCIONS(php_ds_deque);
49 
50 #endif
51