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)11static 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