diff options
author | Marcus Boerger <helly@php.net> | 2003-10-18 18:43:31 +0000 |
---|---|---|
committer | Marcus Boerger <helly@php.net> | 2003-10-18 18:43:31 +0000 |
commit | b0b82541e84e88a2e66b8a2239610c257ce6e475 (patch) | |
tree | a70911cdd0985292cba1dd33344aa932c7b3752c /ext/sqlite/sqlite.c | |
parent | 15bfbc7619e3560151e70619fde66fb1a0f0404e (diff) | |
download | php-git-b0b82541e84e88a2e66b8a2239610c257ce6e475.tar.gz |
Fix class/iterator relationship & handling
Diffstat (limited to 'ext/sqlite/sqlite.c')
-rw-r--r-- | ext/sqlite/sqlite.c | 55 |
1 files changed, 23 insertions, 32 deletions
diff --git a/ext/sqlite/sqlite.c b/ext/sqlite/sqlite.c index ce2b0dac21..0c94267e02 100644 --- a/ext/sqlite/sqlite.c +++ b/ext/sqlite/sqlite.c @@ -948,25 +948,25 @@ void sqlite_iterator_move_forward(zend_object_iterator *iter TSRMLS_DC) } } -zend_class_iterator_funcs sqlite_ub_query_iterator_funcs; - -zend_object_iterator *sqlite_ub_query_get_iterator(zend_class_entry *ce, zval *object TSRMLS_DC) -{ - sqlite_object_iterator *iterator = emalloc(sizeof(sqlite_object_iterator)); - - sqlite_object *obj = (sqlite_object*) zend_object_store_get_object(object TSRMLS_CC); - - object->refcount++; - iterator->it.data = (void*)object; - iterator->it.funcs = &sqlite_ub_query_iterator_funcs.funcs; - iterator->res = obj->u.res; - iterator->value = NULL; - return (zend_object_iterator*)iterator; -} +zend_object_iterator_funcs sqlite_ub_query_iterator_funcs = { + sqlite_iterator_dtor, + sqlite_iterator_has_more, + sqlite_iterator_get_current_data, + sqlite_iterator_get_current_key, + sqlite_iterator_move_forward, + NULL +}; -zend_class_iterator_funcs sqlite_query_iterator_funcs; +zend_object_iterator_funcs sqlite_query_iterator_funcs = { + sqlite_iterator_dtor, + sqlite_iterator_has_more, + sqlite_iterator_get_current_data, + sqlite_iterator_get_current_key, + sqlite_iterator_move_forward, + sqlite_iterator_rewind +}; -zend_object_iterator *sqlite_query_get_iterator(zend_class_entry *ce, zval *object TSRMLS_DC) +zend_object_iterator *sqlite_get_iterator(zend_class_entry *ce, zval *object TSRMLS_DC) { sqlite_object_iterator *iterator = emalloc(sizeof(sqlite_object_iterator)); @@ -974,7 +974,7 @@ zend_object_iterator *sqlite_query_get_iterator(zend_class_entry *ce, zval *obje object->refcount++; iterator->it.data = (void*)object; - iterator->it.funcs = &sqlite_query_iterator_funcs.funcs; + iterator->it.funcs = ce->iterator_funcs.funcs; iterator->res = obj->u.res; iterator->value = NULL; return (zend_object_iterator*)iterator; @@ -996,20 +996,11 @@ PHP_MINIT_FUNCTION(sqlite) sqlite_object_handlers_query.get_class_entry = sqlite_get_ce_query; sqlite_object_handlers_ub_query.get_class_entry = sqlite_get_ce_ub_query; - sqlite_ce_ub_query->get_iterator = sqlite_ub_query_get_iterator; - sqlite_ce_ub_query->iterator_funcs = &sqlite_ub_query_iterator_funcs; - memset(&sqlite_ub_query_iterator_funcs, 0, sizeof(zend_class_iterator_funcs)); - sqlite_ub_query_iterator_funcs.funcs.dtor = sqlite_iterator_dtor; - sqlite_ub_query_iterator_funcs.funcs.rewind = NULL; - sqlite_ub_query_iterator_funcs.funcs.has_more = sqlite_iterator_has_more; - sqlite_ub_query_iterator_funcs.funcs.get_current_data = sqlite_iterator_get_current_data; - sqlite_ub_query_iterator_funcs.funcs.get_current_key = sqlite_iterator_get_current_key; - sqlite_ub_query_iterator_funcs.funcs.move_forward = sqlite_iterator_move_forward; - - sqlite_ce_query->get_iterator = sqlite_query_get_iterator; - sqlite_ce_query->iterator_funcs = &sqlite_query_iterator_funcs; - memcpy(&sqlite_query_iterator_funcs, &sqlite_ub_query_iterator_funcs, sizeof(zend_class_iterator_funcs)); - sqlite_query_iterator_funcs.funcs.rewind = sqlite_iterator_rewind; + sqlite_ce_ub_query->get_iterator = sqlite_get_iterator; + sqlite_ce_ub_query->iterator_funcs.funcs = &sqlite_ub_query_iterator_funcs; + + sqlite_ce_query->get_iterator = sqlite_get_iterator; + sqlite_ce_query->iterator_funcs.funcs = &sqlite_query_iterator_funcs; ZEND_INIT_MODULE_GLOBALS(sqlite, init_sqlite_globals, NULL); |