]> granicus.if.org Git - php/commitdiff
- MFH Update RegexIterator, Docu & Tests
authorMarcus Boerger <helly@php.net>
Fri, 21 Jul 2006 20:14:31 +0000 (20:14 +0000)
committerMarcus Boerger <helly@php.net>
Fri, 21 Jul 2006 20:14:31 +0000 (20:14 +0000)
ext/spl/internal/regexiterator.inc
ext/spl/spl_iterators.c
ext/spl/tests/iterator_029.phpt

index fd923eb826d9e030ee0a995845f8966625c32982..931bde023785bd41f74d44a2dcb9fe75e46a5448 100755 (executable)
@@ -29,9 +29,9 @@ class RegexIterator implements FilterIterator
        const REPLACE     = 4; /**< Mode: Replace the input key or current */
        
        private $regex;     /**< the regular expression to match against */
-       private $flags;     /**< special flags (self::USE_KEY) */
        private $mode;      /**< operation mode (one of self::MATCH, 
                                 self::GET_MATCH, self::ALL_MATCHES, self::SPLIT) */
+       private $flags;     /**< special flags (self::USE_KEY) */
        private $preg_flags;/**< PREG_* flags, see preg_match(), preg_match_all(), 
                                 preg_split() */ 
        private $key;       /**< the value used for key() */
@@ -116,6 +116,55 @@ class RegexIterator implements FilterIterator
        {
                return $this->current;
        }
+
+       /** @return current operation mode
+        */
+       function getMode()
+       {
+               return $this->mode;
+       }
+
+       /** @param mode new operaion mode
+        */
+       function setMode($mode)
+       {
+               $this->mode = $mode;
+       }
+
+       /** @return current operation flags
+        */
+       function getFlags()
+       {
+               return $this->flags;
+       }
+
+       /** @param flags new operaion flags
+        */
+       function setFlags($flags)
+       {
+               $this->flags = $flags;
+       }
+
+       /** @param mode new operaion mode
+        */
+       function setMode($mode)
+       {
+               $this->mode = $mode;
+       }
+
+       /** @return current PREG flags
+        */
+       function getPregFlags()
+       {
+               return $this->preg_flags;
+       }
+
+       /** @param flags new PREG flags
+        */
+       function setPregFlags($preg_flags)
+       {
+               $this->preg_flags = $preg_flags;
+       }
 }
 
 ?>
\ No newline at end of file
index 756121ab611608af3a7e0dec9419266d9b827e93..c6bf712f4e6f1acacd23f9a43715bccbddf45f12 100755 (executable)
@@ -1459,6 +1459,85 @@ SPL_METHOD(RegexIterator, accept)
        }
 } /* }}} */
 
+/* {{{ proto bool RegexIterator::getMode()
+   Returns current operation mode */
+SPL_METHOD(RegexIterator, getMode)
+{
+       spl_dual_it_object *intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
+
+       RETURN_LONG(intern->u.regex.mode);
+} /* }}} */
+
+/* {{{ proto bool RegexIterator::setMode(int new_mode)
+   Set new operation mode */
+SPL_METHOD(RegexIterator, setMode)
+{
+       spl_dual_it_object *intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
+       long mode;
+
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &mode) == FAILURE) {
+               return;
+       }
+
+       if (mode < 0 || mode >= REGIT_MODE_MAX) {
+               zend_throw_exception_ex(spl_ce_InvalidArgumentException, 0 TSRMLS_CC, "Illegal mode %ld", mode);
+               return;// NULL
+       }
+
+       intern->u.regex.mode = mode;
+} /* }}} */
+
+/* {{{ proto bool RegexIterator::getFlags()
+   Returns current operation flags */
+SPL_METHOD(RegexIterator, getFlags)
+{
+       spl_dual_it_object *intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
+
+       RETURN_LONG(intern->u.regex.flags);
+} /* }}} */
+
+/* {{{ proto bool RegexIterator::setFlags(int new_flags)
+   Set operation flags */
+SPL_METHOD(RegexIterator, setFlags)
+{
+       spl_dual_it_object *intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
+       long flags;
+
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &flags) == FAILURE) {
+               return;
+       }
+
+       intern->u.regex.flags = flags;
+} /* }}} */
+
+/* {{{ proto bool RegexIterator::getFlags()
+   Returns current PREG flags (if in use or NULL) */
+SPL_METHOD(RegexIterator, getPregFlags)
+{
+       spl_dual_it_object *intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
+
+       if (intern->u.regex.use_flags) {
+               RETURN_LONG(intern->u.regex.preg_flags);
+       } else {
+               return;
+       }
+} /* }}} */
+
+/* {{{ proto bool RegexIterator::setFlags(int new_flags)
+   Set PREG flags */
+SPL_METHOD(RegexIterator, setPregFlags)
+{
+       spl_dual_it_object *intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
+       long preg_flags;
+
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "l", &preg_flags) == FAILURE) {
+               return;
+       }
+
+       intern->u.regex.preg_flags = preg_flags;
+       intern->u.regex.use_flags = 1;
+} /* }}} */
+
 /* {{{ proto void RecursiveRegexIterator::__construct(RecursiveIterator it, string regex [, int mode [, int flags [, int preg_flags]]]) 
    Create an RecursiveRegexIterator from another recursive iterator and a regular expression */
 SPL_METHOD(RecursiveRegexIterator, __construct)
@@ -1604,9 +1683,30 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_regex_it___construct, 0, 0, 2)
        ZEND_ARG_INFO(0, preg_flags)
 ZEND_END_ARG_INFO();
 
+static
+ZEND_BEGIN_ARG_INFO_EX(arginfo_regex_it_set_mode, 0, 0, 1) 
+       ZEND_ARG_INFO(0, mode)
+ZEND_END_ARG_INFO();
+
+static
+ZEND_BEGIN_ARG_INFO_EX(arginfo_regex_it_set_flags, 0, 0, 1) 
+       ZEND_ARG_INFO(0, flags)
+ZEND_END_ARG_INFO();
+
+static
+ZEND_BEGIN_ARG_INFO_EX(arginfo_regex_it_set_preg_flags, 0, 0, 1) 
+       ZEND_ARG_INFO(0, preg_flags)
+ZEND_END_ARG_INFO();
+
 static zend_function_entry spl_funcs_RegexIterator[] = {
-       SPL_ME(RegexIterator,   __construct,      arginfo_regex_it___construct, ZEND_ACC_PUBLIC)
-       SPL_ME(RegexIterator,   accept,           NULL, ZEND_ACC_PUBLIC)
+       SPL_ME(RegexIterator,   __construct,      arginfo_regex_it___construct,    ZEND_ACC_PUBLIC)
+       SPL_ME(RegexIterator,   accept,           NULL,                            ZEND_ACC_PUBLIC)
+       SPL_ME(RegexIterator,   getMode,          NULL,                            ZEND_ACC_PUBLIC)
+       SPL_ME(RegexIterator,   setMode,          arginfo_regex_it_set_mode,       ZEND_ACC_PUBLIC)
+       SPL_ME(RegexIterator,   getFlags,         NULL,                            ZEND_ACC_PUBLIC)
+       SPL_ME(RegexIterator,   setFlags,         arginfo_regex_it_set_flags,      ZEND_ACC_PUBLIC)
+       SPL_ME(RegexIterator,   getPregFlags,     NULL,                            ZEND_ACC_PUBLIC)
+       SPL_ME(RegexIterator,   setPregFlags,     arginfo_regex_it_set_preg_flags, ZEND_ACC_PUBLIC)
        {NULL, NULL, NULL}
 };
 
index 00e27d47be78a4ddbdb83d5a9e52389d60499df5..3e836adef638155315455fb317021b3e1cf9ad74 100755 (executable)
@@ -16,7 +16,7 @@ foreach(new RegexIterator(new ArrayIterator($ar), "/2/") as $k => $v)
 ===KEY===
 <?php
 
-foreach(new RegexIterator(new ArrayIterator($ar), "/2/", RegexIterator::USE_KEY) as $k => $v)
+foreach(new RegexIterator(new ArrayIterator($ar), "/2/", 0, RegexIterator::USE_KEY) as $k => $v)
 {
        echo "$k=>$v\n";
 }