[PHP-CVS] cvs: php-src(PHP_5_2) /ext/spl spl_iterators.c spl_iterators.h

2007-05-10 Thread Marcus Boerger
helly   Fri May 11 00:15:25 2007 UTC

  Modified files:  (Branch: PHP_5_2)
/php-src/ext/splspl_iterators.c spl_iterators.h 
  Log:
   - MFH Add invert option to RegexIterator
  
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_iterators.c?r1=1.73.2.30.2.27r2=1.73.2.30.2.28diff_format=u
Index: php-src/ext/spl/spl_iterators.c
diff -u php-src/ext/spl/spl_iterators.c:1.73.2.30.2.27 
php-src/ext/spl/spl_iterators.c:1.73.2.30.2.28
--- php-src/ext/spl/spl_iterators.c:1.73.2.30.2.27  Sun Mar  4 14:01:06 2007
+++ php-src/ext/spl/spl_iterators.c Fri May 11 00:15:25 2007
@@ -16,7 +16,7 @@
+--+
  */
 
-/* $Id: spl_iterators.c,v 1.73.2.30.2.27 2007/03/04 14:01:06 helly Exp $ */
+/* $Id: spl_iterators.c,v 1.73.2.30.2.28 2007/05/11 00:15:25 helly Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include config.h
@@ -1426,6 +1426,10 @@
}
}
 
+   if (intern-u.regex.flags  REGIT_INVERTED) {
+   RETVAL_BOOL(Z_LVAL_P(return_value));
+   }
+
if (use_copy) {
efree(subject);
}
http://cvs.php.net/viewvc.cgi/php-src/ext/spl/spl_iterators.h?r1=1.18.2.7.2.11r2=1.18.2.7.2.12diff_format=u
Index: php-src/ext/spl/spl_iterators.h
diff -u php-src/ext/spl/spl_iterators.h:1.18.2.7.2.11 
php-src/ext/spl/spl_iterators.h:1.18.2.7.2.12
--- php-src/ext/spl/spl_iterators.h:1.18.2.7.2.11   Thu Feb  8 22:17:40 2007
+++ php-src/ext/spl/spl_iterators.h Fri May 11 00:15:25 2007
@@ -16,7 +16,7 @@
+--+
  */
 
-/* $Id: spl_iterators.h,v 1.18.2.7.2.11 2007/02/08 22:17:40 helly Exp $ */
+/* $Id: spl_iterators.h,v 1.18.2.7.2.12 2007/05/11 00:15:25 helly Exp $ */
 
 #ifndef SPL_ITERATORS_H
 #define SPL_ITERATORS_H
@@ -94,6 +94,7 @@
 enum {
/* public */
REGIT_USE_KEY= 0x0001,
+   REGIT_INVERTED   = 0x0002,
 };
 
 typedef enum {

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



[PHP-CVS] cvs: php-src(PHP_5_2) /ext/spl spl_iterators.c spl_iterators.h /ext/spl/tests iterator_042.phpt iterator_043.phpt iterator_044.phpt iterator_045.phpt iterator_046.phpt iterator_047.phpt ite

2006-05-21 Thread Marcus Boerger
helly   Sun May 21 18:13:37 2006 UTC

  Added files: (Branch: PHP_5_2)
/php-src/ext/spl/tests  iterator_042.phpt iterator_043.phpt 
iterator_044.phpt iterator_045.phpt 
iterator_046.phpt iterator_047.phpt 
iterator_048.phpt 

  Modified files:  
/php-src/ext/splspl_iterators.c spl_iterators.h 
  Log:
  - MFH
. Make code exception safe
. Make RecursiveRegexIterator::getChildren pass regex to inner ctor
. Fix CachingIterator::__toString() in TOSTRING_USE_KEY mode
. Add CachingIterator::getCache()
. Add tests
  
  http://cvs.php.net/viewcvs.cgi/php-src/ext/spl/spl_iterators.c?r1=1.73.2.30.2.8r2=1.73.2.30.2.9diff_format=u
Index: php-src/ext/spl/spl_iterators.c
diff -u php-src/ext/spl/spl_iterators.c:1.73.2.30.2.8 
php-src/ext/spl/spl_iterators.c:1.73.2.30.2.9
--- php-src/ext/spl/spl_iterators.c:1.73.2.30.2.8   Sat May 20 21:01:42 2006
+++ php-src/ext/spl/spl_iterators.c Sun May 21 18:13:37 2006
@@ -16,7 +16,7 @@
+--+
  */
 
-/* $Id: spl_iterators.c,v 1.73.2.30.2.8 2006/05/20 21:01:42 helly Exp $ */
+/* $Id: spl_iterators.c,v 1.73.2.30.2.9 2006/05/21 18:13:37 helly Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include config.h
@@ -193,6 +193,13 @@
switch (object-iterators[object-level].state) {
case RS_NEXT:
iterator-funcs-move_forward(iterator 
TSRMLS_CC);
+   if (EG(exception)) {
+   if (!(object-flags  
RIT_CATCH_GET_CHILD)) {
+   return;
+   } else {
+   zend_clear_exception(TSRMLS_C);
+   }
+   }
case RS_START:
if (iterator-funcs-valid(iterator TSRMLS_CC) 
== FAILURE) {
break;
@@ -207,6 +214,14 @@
} else {

zend_call_method_with_0_params(zobject, ce, NULL, haschildren, retval);
}
+   if (EG(exception)) {
+   if (!(object-flags  
RIT_CATCH_GET_CHILD)) {
+   
object-iterators[object-level].state = RS_NEXT;
+   return;
+   } else {
+   zend_clear_exception(TSRMLS_C);
+   }
+   }
if (retval) {
has_children = zend_is_true(retval);
zval_ptr_dtor(retval);
@@ -235,6 +250,13 @@
zend_call_method_with_0_params(zthis, 
object-ce, object-nextElement, nextelement, NULL);
}
object-iterators[object-level].state = 
RS_NEXT;
+   if (EG(exception)) {
+   if (!(object-flags  
RIT_CATCH_GET_CHILD)) {
+   return;
+   } else {
+   zend_clear_exception(TSRMLS_C);
+   }
+   }
return /* self */;
case RS_SELF:
if (object-nextElement  (object-mode == 
RIT_SELF_FIRST || object-mode == RIT_CHILD_FIRST)) {
@@ -292,6 +314,13 @@
}
if (object-beginChildren) {
zend_call_method_with_0_params(zthis, 
object-ce, object-beginChildren, beginchildren, NULL);
+   if (EG(exception)) {
+   if (!(object-flags  
RIT_CATCH_GET_CHILD)) {
+   return;
+   } else {
+   
zend_clear_exception(TSRMLS_C);
+   }
+   }
}
goto next_step;
}
@@ -299,6 +328,13 @@
if (object-level  0) {
if (object-endChildren) {
zend_call_method_with_0_params(zthis, 
object-ce, object-endChildren, endchildren, NULL);
+  

[PHP-CVS] cvs: php-src(PHP_5_2) /ext/spl spl_iterators.c spl_iterators.h /ext/spl/tests iterator_041.phpt iterator_041a.phpt iterator_041b.phpt

2006-05-20 Thread Marcus Boerger
helly   Sat May 20 21:01:42 2006 UTC

  Added files: (Branch: PHP_5_2)
/php-src/ext/spl/tests  iterator_041.phpt iterator_041a.phpt 
iterator_041b.phpt 

  Modified files:  
/php-src/ext/splspl_iterators.c spl_iterators.h 
  Log:
  - MFH Sync with head fixes part of an issue with iterator_(to_array|count)
  
  http://cvs.php.net/viewcvs.cgi/php-src/ext/spl/spl_iterators.c?r1=1.73.2.30.2.7r2=1.73.2.30.2.8diff_format=u
Index: php-src/ext/spl/spl_iterators.c
diff -u php-src/ext/spl/spl_iterators.c:1.73.2.30.2.7 
php-src/ext/spl/spl_iterators.c:1.73.2.30.2.8
--- php-src/ext/spl/spl_iterators.c:1.73.2.30.2.7   Thu May 18 21:48:33 2006
+++ php-src/ext/spl/spl_iterators.c Sat May 20 21:01:42 2006
@@ -16,7 +16,7 @@
+--+
  */
 
-/* $Id: spl_iterators.c,v 1.73.2.30.2.7 2006/05/18 21:48:33 helly Exp $ */
+/* $Id: spl_iterators.c,v 1.73.2.30.2.8 2006/05/20 21:01:42 helly Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include config.h
@@ -2372,63 +2372,100 @@
{NULL, NULL, NULL}
 };
 
-/* {{{ proto array iterator_to_array(Traversable it) 
-   Copy the iterator into an array */
-PHP_FUNCTION(iterator_to_array)
+PHPAPI int spl_iterator_apply(zval *obj, spl_iterator_apply_func_t apply_func, 
void *puser TSRMLS_DC)
 {
-   zval   *obj, **data;
zend_object_iterator   *iter;
-   char   *str_key;
-   uintstr_key_len;
-   ulong   int_key;
-   int key_type;
+   zend_class_entry   *ce = Z_OBJCE_P(obj);
 
-   if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, O, obj, 
zend_ce_traversable) == FAILURE) {
-   RETURN_FALSE;
+   iter = ce-get_iterator(ce, obj, 0 TSRMLS_CC);
+
+   if (EG(exception)) {
+   goto done;
}
-   
-   array_init(return_value);
-   
-   iter = Z_OBJCE_P(obj)-get_iterator(Z_OBJCE_P(obj), obj, 0 TSRMLS_CC);
 
if (iter-funcs-rewind) {
iter-funcs-rewind(iter TSRMLS_CC);
+   if (EG(exception)) {
+   goto done;
+   }
}
-   if (EG(exception)) {
-   return;
-   }
+
while (iter-funcs-valid(iter TSRMLS_CC) == SUCCESS) {
-   iter-funcs-get_current_data(iter, data TSRMLS_CC);
if (EG(exception)) {
-   return;
+   goto done;
}
-   (*data)-refcount++;
-   if (iter-funcs-get_current_key) {
-   key_type = iter-funcs-get_current_key(iter, str_key, 
str_key_len, int_key TSRMLS_CC);
-   if (EG(exception)) {
-   return;
-   }
-   switch(key_type) {
-   case HASH_KEY_IS_STRING:
-   add_assoc_zval_ex(return_value, 
str_key, str_key_len, *data);
-   efree(str_key);
-   break;
-   case HASH_KEY_IS_LONG:
-   add_index_zval(return_value, int_key, 
*data);
-   break;
-   }
-   } else {
-   add_next_index_zval(return_value, *data);
+   if (apply_func(iter, puser TSRMLS_CC) == ZEND_HASH_APPLY_STOP 
|| EG(exception)) {
+   goto done;
}
iter-funcs-move_forward(iter TSRMLS_CC);
if (EG(exception)) {
-   return;
+   goto done;
}
}
+
+done:
iter-funcs-dtor(iter TSRMLS_CC);
+   return EG(exception) ? FAILURE : SUCCESS;
+}
+/* }}} */
+
+static int spl_iterator_to_array_apply(zend_object_iterator *iter, void *puser 
TSRMLS_DC) /* {{{ */
+{
+   zval**data, *return_value = (zval*)puser;
+   char*str_key;
+   uintstr_key_len;
+   ulong   int_key;
+   int key_type;
+
+   iter-funcs-get_current_data(iter, data TSRMLS_CC);
if (EG(exception)) {
-   return;
+   return ZEND_HASH_APPLY_STOP;
+   }
+   if (iter-funcs-get_current_key) {
+   key_type = iter-funcs-get_current_key(iter, str_key, 
str_key_len, int_key TSRMLS_CC);
+   if (EG(exception)) {
+   return ZEND_HASH_APPLY_STOP;
+   }
+   (*data)-refcount++;
+   switch(key_type) {
+   case HASH_KEY_IS_STRING:
+   add_assoc_zval_ex(return_value, str_key, 
str_key_len, *data);
+   efree(str_key);
+  

[PHP-CVS] cvs: php-src(PHP_5_2) /ext/spl spl_iterators.c spl_iterators.h /ext/spl/tests iterator_036.phpt iterator_037.phpt

2006-05-18 Thread Marcus Boerger
helly   Thu May 18 21:42:58 2006 UTC

  Added files: (Branch: PHP_5_2)
/php-src/ext/spl/tests  iterator_036.phpt iterator_037.phpt 

  Modified files:  
/php-src/ext/splspl_iterators.c spl_iterators.h 
  Log:
  - MFH Fixed CachingIterator issues with string conversion/__toString()
Partly by adding new mode TOSTRING_USE_INNER
  
  http://cvs.php.net/viewcvs.cgi/php-src/ext/spl/spl_iterators.c?r1=1.73.2.30.2.5r2=1.73.2.30.2.6diff_format=u
Index: php-src/ext/spl/spl_iterators.c
diff -u php-src/ext/spl/spl_iterators.c:1.73.2.30.2.5 
php-src/ext/spl/spl_iterators.c:1.73.2.30.2.6
--- php-src/ext/spl/spl_iterators.c:1.73.2.30.2.5   Tue May 16 08:21:07 2006
+++ php-src/ext/spl/spl_iterators.c Thu May 18 21:42:58 2006
@@ -16,7 +16,7 @@
+--+
  */
 
-/* $Id: spl_iterators.c,v 1.73.2.30.2.5 2006/05/16 08:21:07 helly Exp $ */
+/* $Id: spl_iterators.c,v 1.73.2.30.2.6 2006/05/18 21:42:58 helly Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include config.h
@@ -835,6 +835,18 @@
 
 static inline int spl_dual_it_fetch(spl_dual_it_object *intern, int check_more 
TSRMLS_DC);
 
+static inline int spl_cit_check_flags(int flags)
+{
+   int cnt = 0;
+
+   cnt += (flags  CIT_CALL_TOSTRING) ? 1 : 0;
+   cnt += (flags  CIT_TOSTRING_USE_KEY) ? 1 : 0;
+   cnt += (flags  CIT_TOSTRING_USE_CURRENT) ? 1 : 0;
+   cnt += (flags  CIT_TOSTRING_USE_INNER) ? 1 : 0;
+   
+   return cnt = 1 ? SUCCESS : FAILURE;
+}
+
 static spl_dual_it_object* spl_dual_it_construct(INTERNAL_FUNCTION_PARAMETERS, 
zend_class_entry *ce_base, zend_class_entry *ce_inner, dual_it_type dit_type)
 {
zval *zobject, *retval;
@@ -879,10 +891,9 @@
php_set_error_handling(EH_NORMAL, NULL 
TSRMLS_CC);
return NULL;
}
-   if (((flags  CIT_CALL_TOSTRING)  (flags  
(CIT_TOSTRING_USE_KEY|CIT_TOSTRING_USE_CURRENT)))
-   || ((flags  
(CIT_TOSTRING_USE_KEY|CIT_TOSTRING_USE_CURRENT)) == 
(CIT_TOSTRING_USE_KEY|CIT_TOSTRING_USE_CURRENT))) {
+   if (spl_cit_check_flags(flags) != SUCCESS) {
php_set_error_handling(EH_NORMAL, NULL 
TSRMLS_CC);
-   
zend_throw_exception(spl_ce_InvalidArgumentException, Flags must contain only 
one of CATCH_GET_CHILD, CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT, 
0 TSRMLS_CC);
+   
zend_throw_exception(spl_ce_InvalidArgumentException, Flags must contain only 
one of CALL_TOSTRING, TOSTRING_USE_KEY, TOSTRING_USE_CURRENT, 
TOSTRING_USE_CURRENT, 0 TSRMLS_CC);
return NULL;
}
intern-u.caching.flags |= flags  CIT_PUBLIC;
@@ -1661,8 +1672,9 @@
}
if (intern-u.caching.flags  
CIT_CATCH_GET_CHILD) {
zend_clear_exception(TSRMLS_C);
+   } else {
+   return;
}
-   return;
} else {
INIT_PZVAL(zflags);
ZVAL_LONG(zflags, 
intern-u.caching.flags  CIT_PUBLIC);
@@ -1670,49 +1682,26 @@
zval_ptr_dtor(zchildren);
}
}
-   zval_ptr_dtor(retval); 
+   zval_ptr_dtor(retval);
}
-   if (intern-u.caching.flags  CIT_CALL_TOSTRING) {
-   if (Z_TYPE_P(intern-current.data) == IS_OBJECT) {
-   zval expr_copy;
-   if 
(intern-current.data-value.obj.handlers-cast_object 
-   
intern-current.data-value.obj.handlers-cast_object(intern-current.data, 
expr_copy, IS_STRING TSRMLS_CC) == SUCCESS)
-   {
-   ALLOC_ZVAL(intern-u.caching.zstr);
-   *intern-u.caching.zstr = expr_copy;
-   INIT_PZVAL(intern-u.caching.zstr);
-   zval_copy_ctor(intern-u.caching.zstr);
-   zval_dtor(expr_copy);
-   } else {
-   zend_class_entry *ce_data = 
spl_get_class_entry(intern-current.data TSRMLS_CC);
-   if (ce_data  
zend_hash_exists(ce_data-function_table, __tostring, sizeof(__tostring))) 
{
-   

[PHP-CVS] cvs: php-src(PHP_5_2) /ext/spl spl_iterators.c spl_iterators.h /ext/spl/tests iterator_029.phpt

2006-05-10 Thread Andrei Zmievski
andrei  Wed May 10 16:50:58 2006 UTC

  Modified files:  (Branch: PHP_5_2)
/php-src/ext/splspl_iterators.c spl_iterators.h 
/php-src/ext/spl/tests  iterator_029.phpt 
  Log:
  Rename RegExIterator - RegexIterator.
  
  Also rename recursive one.
  
  http://cvs.php.net/viewcvs.cgi/php-src/ext/spl/spl_iterators.c?r1=1.73.2.30.2.2r2=1.73.2.30.2.3diff_format=u
Index: php-src/ext/spl/spl_iterators.c
diff -u php-src/ext/spl/spl_iterators.c:1.73.2.30.2.2 
php-src/ext/spl/spl_iterators.c:1.73.2.30.2.3
--- php-src/ext/spl/spl_iterators.c:1.73.2.30.2.2   Wed May 10 00:29:42 2006
+++ php-src/ext/spl/spl_iterators.c Wed May 10 16:50:57 2006
@@ -16,7 +16,7 @@
+--+
  */
 
-/* $Id: spl_iterators.c,v 1.73.2.30.2.2 2006/05/10 00:29:42 helly Exp $ */
+/* $Id: spl_iterators.c,v 1.73.2.30.2.3 2006/05/10 16:50:57 andrei Exp $ */
 
 #ifdef HAVE_CONFIG_H
 # include config.h
@@ -55,8 +55,8 @@
 PHPAPI zend_class_entry *spl_ce_InfiniteIterator;
 PHPAPI zend_class_entry *spl_ce_EmptyIterator;
 PHPAPI zend_class_entry *spl_ce_AppendIterator;
-PHPAPI zend_class_entry *spl_ce_RegExIterator;
-PHPAPI zend_class_entry *spl_ce_RecursiveRegExIterator;
+PHPAPI zend_class_entry *spl_ce_RegexIterator;
+PHPAPI zend_class_entry *spl_ce_RecursiveRegexIterator;
 
 zend_function_entry spl_funcs_RecursiveIterator[] = {
SPL_ABSTRACT_ME(RecursiveIterator, hasChildren,  NULL)
@@ -933,8 +933,8 @@
php_set_error_handling(EH_NORMAL, NULL TSRMLS_CC);
return intern;
 #if HAVE_PCRE || HAVE_BUNDLED_PCRE
-   case DIT_RegExIterator:
-   case DIT_RecursiveRegExIterator: {
+   case DIT_RegexIterator:
+   case DIT_RecursiveRegexIterator: {
char *regex;
int len, poptions, coptions;
pcre_extra *extra = NULL;
@@ -1280,16 +1280,16 @@
 } /* }}} */
 
 #if HAVE_PCRE || HAVE_BUNDLED_PCRE
-/* {{{ proto void RegExIterator::__construct(Iterator it, string $regex [, int 
$flags]) 
-   Create an RegExIterator from another iterator and a regular expression */
-SPL_METHOD(RegExIterator, __construct)
+/* {{{ proto void RegexIterator::__construct(Iterator it, string $regex [, int 
$flags]) 
+   Create an RegexIterator from another iterator and a regular expression */
+SPL_METHOD(RegexIterator, __construct)
 {
-   spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, 
spl_ce_RegExIterator, zend_ce_iterator, DIT_RegExIterator);
+   spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, 
spl_ce_RegexIterator, zend_ce_iterator, DIT_RegexIterator);
 } /* }}} */
 
-/* {{{ proto bool RegExIterator::accept()
+/* {{{ proto bool RegexIterator::accept()
Match (string)current() against regular expression */
-SPL_METHOD(RegExIterator, accept)
+SPL_METHOD(RegexIterator, accept)
 {
spl_dual_it_object   *intern;
int count;
@@ -1330,11 +1330,11 @@
RETURN_BOOL(count = 0);
 } /* }}} */
 
-/* {{{ proto void RecursiveRegExIterator::__construct(RecursiveIterator it, 
string $regex [, int $flags]) 
-   Create an RecursiveRegExIterator from another recursive iterator and a 
regular expression */
-SPL_METHOD(RecursiveRegExIterator, __construct)
+/* {{{ proto void RecursiveRegexIterator::__construct(RecursiveIterator it, 
string $regex [, int $flags]) 
+   Create an RecursiveRegexIterator from another recursive iterator and a 
regular expression */
+SPL_METHOD(RecursiveRegexIterator, __construct)
 {
-   spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, 
spl_ce_RecursiveRegExIterator, spl_ce_RecursiveIterator, 
DIT_RecursiveRegExIterator);
+   spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, 
spl_ce_RecursiveRegexIterator, spl_ce_RecursiveIterator, 
DIT_RecursiveRegexIterator);
 } /* }}} */
 #endif
 
@@ -1368,7 +1368,7 @@
}
 
 #if HAVE_PCRE || HAVE_BUNDLED_PCRE
-   if (object-dit_type == DIT_RegExIterator || object-dit_type == 
DIT_RecursiveRegExIterator) {
+   if (object-dit_type == DIT_RegexIterator || object-dit_type == 
DIT_RecursiveRegexIterator) {
if (object-u.regex.pce) {
object-u.regex.pce-refcount--;
}
@@ -1448,9 +1448,9 @@
ZEND_ARG_INFO(0, 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)
+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)
{NULL, NULL, NULL}
 };
 
@@ -1461,8 +1461,8 @@
ZEND_ARG_INFO(0, flags)
 ZEND_END_ARG_INFO();
 
-static zend_function_entry