summaryrefslogtreecommitdiff
path: root/ext/dom/xml_common.h
diff options
context:
space:
mode:
authorRob Richards <rrichards@php.net>2003-06-09 20:20:55 +0000
committerRob Richards <rrichards@php.net>2003-06-09 20:20:55 +0000
commit6d72c89408234b954e7440e132b50474b9872d72 (patch)
treea85f3de1f6239709884844d641dbe63b267657ef /ext/dom/xml_common.h
parentaec7815e9cc4e29688729b7176ba6457819b6d3b (diff)
downloadphp-git-6d72c89408234b954e7440e132b50474b9872d72.tar.gz
implmentation of document ref counting for persistance
re-work of internal object handling
Diffstat (limited to 'ext/dom/xml_common.h')
-rw-r--r--ext/dom/xml_common.h25
1 files changed, 13 insertions, 12 deletions
diff --git a/ext/dom/xml_common.h b/ext/dom/xml_common.h
index 0c88bae040..b8b5df332e 100644
--- a/ext/dom/xml_common.h
+++ b/ext/dom/xml_common.h
@@ -30,6 +30,7 @@ typedef struct _node_list_pointer {
typedef struct _dom_ref_obj {
void *ptr;
int refcount;
+ node_list_pointer *node_list;
} dom_ref_obj;
typedef struct _dom_object {
@@ -37,7 +38,7 @@ typedef struct _dom_object {
void *ptr;
dom_ref_obj *document;
HashTable *prop_handler;
- node_list_pointer *node_list;
+ zend_object_handle handle;
} dom_object;
#ifdef PHP_WIN32
@@ -57,7 +58,7 @@ typedef struct _dom_object {
#define PHP_DOM_EXPORT(__type) PHPAPI __type
-PHP_DOM_EXPORT(zval *) php_dom_create_object(xmlNodePtr obj, int *found, zval* in, zval* return_value TSRMLS_DC);
+PHP_DOM_EXPORT(zval *) php_dom_create_object(xmlNodePtr obj, int *found, zval *in, zval* return_value, dom_object *domobj TSRMLS_DC);
PHP_DOM_EXPORT(void) dom_objects_clone(void *object, void **object_clone TSRMLS_DC);
void dom_objects_dtor(void *object, zend_object_handle handle TSRMLS_DC);
PHP_DOM_EXPORT(zval *) dom_read_property(zval *object, zval *member TSRMLS_DC);
@@ -78,22 +79,22 @@ INIT_CLASS_ENTRY(ce, name, funcs); \
ce.create_object = dom_objects_new; \
entry = zend_register_internal_class_ex(&ce, parent_ce, NULL TSRMLS_CC);
-#define DOM_GET_OBJ(__ptr, __id, __prtype) { \
- dom_object *intern = (dom_object *)zend_object_store_get_object(__id TSRMLS_CC); \
- if (!(__ptr = (__prtype)intern->ptr)) { \
- php_error(E_WARNING, "Couldn't fetch %s", intern->std.ce->name);\
+#define DOM_GET_OBJ(__ptr, __id, __prtype, __intern) { \
+ __intern = (dom_object *)zend_object_store_get_object(__id TSRMLS_CC); \
+ if (!(__ptr = (__prtype)__intern->ptr)) { \
+ php_error(E_WARNING, "Couldn't fetch %s", __intern->std.ce->name);\
RETURN_NULL();\
} \
}
-#define DOM_DOMOBJ_NEW(zval, obj, ret) \
- if (NULL == (zval = php_dom_create_object(obj, ret, zval, return_value TSRMLS_CC))) { \
+#define DOM_DOMOBJ_NEW(zval, obj, ret, domobject) \
+ if (NULL == (zval = php_dom_create_object(obj, ret, zval, return_value, domobject TSRMLS_CC))) { \
php_error_docref(NULL TSRMLS_CC, E_WARNING, "Cannot create required DOM object"); \
RETURN_FALSE; \
}
-#define DOM_RET_OBJ(zval, obj, ret) \
- DOM_DOMOBJ_NEW(zval, obj, ret);
+#define DOM_RET_OBJ(zval, obj, ret, domobject) \
+ DOM_DOMOBJ_NEW(zval, obj, ret, domobject);
#define DOM_GET_THIS(zval) \
if (NULL == (zval = getThis())) { \
@@ -101,8 +102,8 @@ entry = zend_register_internal_class_ex(&ce, parent_ce, NULL TSRMLS_CC);
RETURN_FALSE; \
}
-#define DOM_GET_THIS_OBJ(__ptr, __id, __prtype) \
+#define DOM_GET_THIS_OBJ(__ptr, __id, __prtype, __intern) \
DOM_GET_THIS(__id); \
- DOM_GET_OBJ(__ptr, __id, __prtype);
+ DOM_GET_OBJ(__ptr, __id, __prtype, __intern);
#endif