Annotation of embedaddon/php/ext/spl/spl_iterators.h, revision 1.1
1.1 ! misho 1: /*
! 2: +----------------------------------------------------------------------+
! 3: | PHP Version 5 |
! 4: +----------------------------------------------------------------------+
! 5: | Copyright (c) 1997-2012 The PHP Group |
! 6: +----------------------------------------------------------------------+
! 7: | This source file is subject to version 3.01 of the PHP 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.php.net/license/3_01.txt |
! 11: | If you did not receive a copy of the PHP license and are unable to |
! 12: | obtain it through the world-wide-web, please send a note to |
! 13: | license@php.net so we can mail you a copy immediately. |
! 14: +----------------------------------------------------------------------+
! 15: | Authors: Marcus Boerger <helly@php.net> |
! 16: +----------------------------------------------------------------------+
! 17: */
! 18:
! 19: /* $Id: spl_iterators.h 321634 2012-01-01 13:15:04Z felipe $ */
! 20:
! 21: #ifndef SPL_ITERATORS_H
! 22: #define SPL_ITERATORS_H
! 23:
! 24: #include "php.h"
! 25: #include "php_spl.h"
! 26: #if HAVE_PCRE || HAVE_BUNDLED_PCRE
! 27: #include "ext/pcre/php_pcre.h"
! 28: #endif
! 29:
! 30: #define spl_ce_Traversable zend_ce_traversable
! 31: #define spl_ce_Iterator zend_ce_iterator
! 32: #define spl_ce_Aggregate zend_ce_aggregate
! 33: #define spl_ce_ArrayAccess zend_ce_arrayaccess
! 34: #define spl_ce_Serializable zend_ce_serializable
! 35:
! 36: extern PHPAPI zend_class_entry *spl_ce_RecursiveIterator;
! 37: extern PHPAPI zend_class_entry *spl_ce_RecursiveIteratorIterator;
! 38: extern PHPAPI zend_class_entry *spl_ce_RecursiveTreeIterator;
! 39: extern PHPAPI zend_class_entry *spl_ce_FilterIterator;
! 40: extern PHPAPI zend_class_entry *spl_ce_RecursiveFilterIterator;
! 41: extern PHPAPI zend_class_entry *spl_ce_ParentIterator;
! 42: extern PHPAPI zend_class_entry *spl_ce_SeekableIterator;
! 43: extern PHPAPI zend_class_entry *spl_ce_LimitIterator;
! 44: extern PHPAPI zend_class_entry *spl_ce_CachingIterator;
! 45: extern PHPAPI zend_class_entry *spl_ce_RecursiveCachingIterator;
! 46: extern PHPAPI zend_class_entry *spl_ce_OuterIterator;
! 47: extern PHPAPI zend_class_entry *spl_ce_IteratorIterator;
! 48: extern PHPAPI zend_class_entry *spl_ce_NoRewindIterator;
! 49: extern PHPAPI zend_class_entry *spl_ce_InfiniteIterator;
! 50: extern PHPAPI zend_class_entry *spl_ce_EmptyIterator;
! 51: extern PHPAPI zend_class_entry *spl_ce_AppendIterator;
! 52: extern PHPAPI zend_class_entry *spl_ce_RegexIterator;
! 53: extern PHPAPI zend_class_entry *spl_ce_RecursiveRegexIterator;
! 54: extern PHPAPI zend_class_entry *spl_ce_Countable;
! 55:
! 56: PHP_MINIT_FUNCTION(spl_iterators);
! 57:
! 58: PHP_FUNCTION(iterator_to_array);
! 59: PHP_FUNCTION(iterator_count);
! 60: PHP_FUNCTION(iterator_apply);
! 61:
! 62: typedef enum {
! 63: DIT_Default = 0,
! 64: DIT_FilterIterator = DIT_Default,
! 65: DIT_RecursiveFilterIterator = DIT_Default,
! 66: DIT_ParentIterator = DIT_Default,
! 67: DIT_LimitIterator,
! 68: DIT_CachingIterator,
! 69: DIT_RecursiveCachingIterator,
! 70: DIT_IteratorIterator,
! 71: DIT_NoRewindIterator,
! 72: DIT_InfiniteIterator,
! 73: DIT_AppendIterator,
! 74: #if HAVE_PCRE || HAVE_BUNDLED_PCRE
! 75: DIT_RegexIterator,
! 76: DIT_RecursiveRegexIterator,
! 77: #endif
! 78: DIT_Unknown = ~0
! 79: } dual_it_type;
! 80:
! 81: typedef enum {
! 82: RIT_Default = 0,
! 83: RIT_RecursiveIteratorIterator = RIT_Default,
! 84: RIT_RecursiveTreeIterator,
! 85: RIT_Unknow = ~0
! 86: } recursive_it_it_type;
! 87:
! 88: enum {
! 89: /* public */
! 90: CIT_CALL_TOSTRING = 0x00000001,
! 91: CIT_TOSTRING_USE_KEY = 0x00000002,
! 92: CIT_TOSTRING_USE_CURRENT = 0x00000004,
! 93: CIT_TOSTRING_USE_INNER = 0x00000008,
! 94: CIT_CATCH_GET_CHILD = 0x00000010,
! 95: CIT_FULL_CACHE = 0x00000100,
! 96: CIT_PUBLIC = 0x0000FFFF,
! 97: /* private */
! 98: CIT_VALID = 0x00010000,
! 99: CIT_HAS_CHILDREN = 0x00020000
! 100: };
! 101:
! 102: enum {
! 103: /* public */
! 104: REGIT_USE_KEY = 0x00000001,
! 105: REGIT_INVERTED = 0x00000002
! 106: };
! 107:
! 108: typedef enum {
! 109: REGIT_MODE_MATCH,
! 110: REGIT_MODE_GET_MATCH,
! 111: REGIT_MODE_ALL_MATCHES,
! 112: REGIT_MODE_SPLIT,
! 113: REGIT_MODE_REPLACE,
! 114: REGIT_MODE_MAX
! 115: } regex_mode;
! 116:
! 117: typedef struct _spl_dual_it_object {
! 118: zend_object std;
! 119: struct {
! 120: zval *zobject;
! 121: zend_class_entry *ce;
! 122: zend_object *object;
! 123: zend_object_iterator *iterator;
! 124: } inner;
! 125: struct {
! 126: zval *data;
! 127: char *str_key;
! 128: uint str_key_len;
! 129: ulong int_key;
! 130: int key_type; /* HASH_KEY_IS_STRING or HASH_KEY_IS_LONG */
! 131: int pos;
! 132: } current;
! 133: dual_it_type dit_type;
! 134: union {
! 135: struct {
! 136: long offset;
! 137: long count;
! 138: } limit;
! 139: struct {
! 140: long flags; /* CIT_* */
! 141: zval *zstr;
! 142: zval *zchildren;
! 143: zval *zcache;
! 144: } caching;
! 145: struct {
! 146: zval *zarrayit;
! 147: zend_object_iterator *iterator;
! 148: } append;
! 149: #if HAVE_PCRE || HAVE_BUNDLED_PCRE
! 150: struct {
! 151: int use_flags;
! 152: long flags;
! 153: regex_mode mode;
! 154: long preg_flags;
! 155: pcre_cache_entry *pce;
! 156: char *regex;
! 157: } regex;
! 158: #endif
! 159: } u;
! 160: } spl_dual_it_object;
! 161:
! 162: typedef int (*spl_iterator_apply_func_t)(zend_object_iterator *iter, void *puser TSRMLS_DC);
! 163:
! 164: PHPAPI int spl_iterator_apply(zval *obj, spl_iterator_apply_func_t apply_func, void *puser TSRMLS_DC);
! 165:
! 166: #endif /* SPL_ITERATORS_H */
! 167:
! 168: /*
! 169: * Local Variables:
! 170: * c-basic-offset: 4
! 171: * tab-width: 4
! 172: * End:
! 173: * vim600: fdm=marker
! 174: * vim: noet sw=4 ts=4
! 175: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>