Annotation of embedaddon/php/ext/spl/spl_iterators.h, revision 1.1.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>