helly           Fri Jul 21 19:57:36 2006 UTC

  Modified files:              
    /php-src/ext/spl    spl_iterators.c 
    /php-src/ext/spl/internal   regexiterator.inc 
  Log:
  - Add control functions to RegexIterator
  
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_iterators.c?r1=1.145&r2=1.146&diff_format=u
Index: php-src/ext/spl/spl_iterators.c
diff -u php-src/ext/spl/spl_iterators.c:1.145 
php-src/ext/spl/spl_iterators.c:1.146
--- php-src/ext/spl/spl_iterators.c:1.145       Thu Jul 20 22:52:16 2006
+++ php-src/ext/spl/spl_iterators.c     Fri Jul 21 19:57:36 2006
@@ -16,7 +16,7 @@
    +----------------------------------------------------------------------+
  */
 
-/* $Id: spl_iterators.c,v 1.145 2006/07/20 22:52:16 helly Exp $ */
+/* $Id: spl_iterators.c,v 1.146 2006/07/21 19:57:36 helly Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -1484,6 +1484,85 @@
        }
 } /* }}} */
 
+/* {{{ 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)
@@ -1629,9 +1708,30 @@
        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}
 };
 
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/internal/regexiterator.inc?r1=1.6&r2=1.7&diff_format=u
Index: php-src/ext/spl/internal/regexiterator.inc
diff -u php-src/ext/spl/internal/regexiterator.inc:1.6 
php-src/ext/spl/internal/regexiterator.inc:1.7
--- php-src/ext/spl/internal/regexiterator.inc:1.6      Thu Jul 20 22:35:44 2006
+++ php-src/ext/spl/internal/regexiterator.inc  Fri Jul 21 19:57:36 2006
@@ -29,9 +29,9 @@
        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 @@
        {
                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

-- 
PHP CVS Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to