Return to spl_iterators.h CVS log | Up to [ELWIX - Embedded LightWeight unIX -] / embedaddon / php / ext / spl |
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: */