Busybox: Upgrade to 1.21.1 (stable). lsof active.
[tomato.git] / release / src / router / php / Zend / zend_iterators.c
blobf2c27fa63d632df77edb89cf295e53024a388792
1 /*
2 +----------------------------------------------------------------------+
3 | Zend Engine |
4 +----------------------------------------------------------------------+
5 | Copyright (c) 1998-2013 Zend Technologies Ltd. (http://www.zend.com) |
6 +----------------------------------------------------------------------+
7 | This source file is subject to version 2.00 of the Zend license, |
8 | that is bundled with this package in the file LICENSE, and is |
9 | available through the world-wide-web at the following url: |
10 | http://www.zend.com/license/2_00.txt. |
11 | If you did not receive a copy of the Zend license and are unable to |
12 | obtain it through the world-wide-web, please send a note to |
13 | license@zend.com so we can mail you a copy immediately. |
14 +----------------------------------------------------------------------+
15 | Author: Wez Furlong <wez@thebrainroom.com> |
16 | Marcus Boerger <helly@php.net> |
17 +----------------------------------------------------------------------+
20 /* $Id$ */
22 #include "zend.h"
23 #include "zend_API.h"
25 static zend_class_entry zend_iterator_class_entry;
27 static zend_object_handlers iterator_object_handlers = {
28 ZEND_OBJECTS_STORE_HANDLERS,
29 NULL, /* prop read */
30 NULL, /* prop write */
31 NULL, /* read dim */
32 NULL, /* write dim */
33 NULL,
34 NULL, /* get */
35 NULL, /* set */
36 NULL, /* has prop */
37 NULL, /* unset prop */
38 NULL, /* has dim */
39 NULL, /* unset dim */
40 NULL, /* props get */
41 NULL, /* method get */
42 NULL, /* call */
43 NULL, /* get ctor */
44 NULL, /* get_ce */
45 NULL, /* get class name */
46 NULL, /* compare */
47 NULL, /* cast */
48 NULL /* count */
51 ZEND_API void zend_register_iterator_wrapper(TSRMLS_D)
53 INIT_CLASS_ENTRY(zend_iterator_class_entry, "__iterator_wrapper", NULL);
54 str_free(zend_iterator_class_entry.name);
55 zend_iterator_class_entry.name = "__iterator_wrapper";
58 static void iter_wrapper_dtor(void *object, zend_object_handle handle TSRMLS_DC)
60 zend_object_iterator *iter = (zend_object_iterator*)object;
61 iter->funcs->dtor(iter TSRMLS_CC);
64 ZEND_API zval *zend_iterator_wrap(zend_object_iterator *iter TSRMLS_DC)
66 zval *wrapped;
68 MAKE_STD_ZVAL(wrapped);
69 Z_TYPE_P(wrapped) = IS_OBJECT;
70 Z_OBJ_HANDLE_P(wrapped) = zend_objects_store_put(iter, iter_wrapper_dtor, NULL, NULL TSRMLS_CC);
71 Z_OBJ_HT_P(wrapped) = &iterator_object_handlers;
73 return wrapped;
76 ZEND_API enum zend_object_iterator_kind zend_iterator_unwrap(
77 zval *array_ptr, zend_object_iterator **iter TSRMLS_DC)
79 switch (Z_TYPE_P(array_ptr)) {
80 case IS_OBJECT:
81 if (Z_OBJ_HT_P(array_ptr) == &iterator_object_handlers) {
82 *iter = (zend_object_iterator *)zend_object_store_get_object(array_ptr TSRMLS_CC);
83 return ZEND_ITER_OBJECT;
85 if (Z_OBJPROP_P(array_ptr)) {
86 return ZEND_ITER_PLAIN_OBJECT;
88 return ZEND_ITER_INVALID;
90 case IS_ARRAY:
91 if (Z_ARRVAL_P(array_ptr)) {
92 return ZEND_ITER_PLAIN_ARRAY;
94 return ZEND_ITER_INVALID;
96 default:
97 return ZEND_ITER_INVALID;
102 * Local variables:
103 * tab-width: 4
104 * c-basic-offset: 4
105 * indent-tabs-mode: t
106 * End: