]> granicus.if.org Git - php/commitdiff
- Moving Countable from spl_array.c to spl_iterator.c
authorMarcus Boerger <helly@php.net>
Thu, 8 Feb 2007 20:13:49 +0000 (20:13 +0000)
committerMarcus Boerger <helly@php.net>
Thu, 8 Feb 2007 20:13:49 +0000 (20:13 +0000)
  allows CachingIterator to implement Countable

ext/spl/spl_array.c
ext/spl/spl_array.h
ext/spl/spl_iterators.c
ext/spl/spl_iterators.h

index 1c3e0828f9f3812310d35e255c819f5af42cc929..42a26670a7f93f2eb035a6ac82eb3edaa6aa689c 100755 (executable)
@@ -42,8 +42,6 @@ zend_object_handlers spl_handler_ArrayIterator;
 PHPAPI zend_class_entry  *spl_ce_ArrayIterator;
 PHPAPI zend_class_entry  *spl_ce_RecursiveArrayIterator;
 
-PHPAPI zend_class_entry  *spl_ce_Countable;
-
 #define SPL_ARRAY_STD_PROP_LIST      0x00000001
 #define SPL_ARRAY_ARRAY_AS_PROPS     0x00000002
 #define SPL_ARRAY_OVERLOADED_REWIND  0x00010000
@@ -1524,11 +1522,6 @@ static zend_function_entry spl_funcs_RecursiveArrayIterator[] = {
        {NULL, NULL, NULL}
 };
 
-static zend_function_entry spl_funcs_Countable[] = {
-       SPL_ABSTRACT_ME(Countable, count,   NULL)
-       {NULL, NULL, NULL}
-};
-
 /* {{{ PHP_MINIT_FUNCTION(spl_array) */
 PHP_MINIT_FUNCTION(spl_array)
 {
@@ -1563,8 +1556,6 @@ PHP_MINIT_FUNCTION(spl_array)
        REGISTER_SPL_IMPLEMENTS(RecursiveArrayIterator, RecursiveIterator);
        spl_ce_RecursiveArrayIterator->get_iterator = spl_array_get_iterator;
 
-       REGISTER_SPL_INTERFACE(Countable);
-       
        REGISTER_SPL_IMPLEMENTS(ArrayObject, Countable);
        REGISTER_SPL_IMPLEMENTS(ArrayIterator, Countable);
 
index 0ef75f47fca10d31e7f7d11684cdd0abb66769ca..5e8f23dca4d2c9bda813455ea9aebe246cbcf77e 100755 (executable)
@@ -27,7 +27,6 @@
 extern PHPAPI zend_class_entry *spl_ce_ArrayObject;
 extern PHPAPI zend_class_entry *spl_ce_ArrayIterator;
 extern PHPAPI zend_class_entry *spl_ce_RecursiveArrayIterator;
-extern PHPAPI zend_class_entry *spl_ce_Countable;
 
 PHP_MINIT_FUNCTION(spl_array);
 
index 7b4d8b8f841ffc22c51255338d1286013831f288..9585eb279bb67724d543fc6e1a79965eec4afc92 100755 (executable)
@@ -57,6 +57,7 @@ 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_Countable;
 
 zend_function_entry spl_funcs_RecursiveIterator[] = {
        SPL_ABSTRACT_ME(RecursiveIterator, hasChildren,  NULL)
@@ -2272,6 +2273,23 @@ SPL_METHOD(CachingIterator, setFlags)
 }
 /* }}} */
 
+/* {{{ proto void CachingIterator::count()
+   Number of cached elements */
+SPL_METHOD(CachingIterator, count)
+{
+       spl_dual_it_object   *intern;
+
+       intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
+
+       if (!(intern->u.caching.flags & CIT_FULL_CACHE))        {
+               zend_throw_exception_ex(spl_ce_BadMethodCallException, 0 TSRMLS_CC, "%v does not use a full cache (see CachingIterator::__construct)", Z_OBJCE_P(getThis())->name);
+               return;
+       }
+
+       RETURN_LONG(zend_hash_num_elements(HASH_OF(intern->u.caching.zcache)));
+}
+/* }}} */
+
 static
 ZEND_BEGIN_ARG_INFO_EX(arginfo_caching_it___construct, 0, 0, 1) 
        ZEND_ARG_OBJ_INFO(0, iterator, Iterator, 0)
@@ -2311,6 +2329,7 @@ static zend_function_entry spl_funcs_CachingIterator[] = {
        SPL_ME(CachingIterator, offsetUnset,      arginfo_caching_it_offsetGet,   ZEND_ACC_PUBLIC)
        SPL_ME(CachingIterator, offsetExists,     arginfo_caching_it_offsetGet,   ZEND_ACC_PUBLIC)
        SPL_ME(CachingIterator, getCache,         NULL, ZEND_ACC_PUBLIC)
+       SPL_ME(CachingIterator, count,            NULL, ZEND_ACC_PUBLIC)
        {NULL, NULL, NULL}
 };
 
@@ -2897,6 +2916,11 @@ static zend_function_entry spl_funcs_OuterIterator[] = {
        {NULL, NULL, NULL}
 };
 
+static zend_function_entry spl_funcs_Countable[] = {
+       SPL_ABSTRACT_ME(Countable, count,   NULL)
+       {NULL, NULL, NULL}
+};
+
 /* {{{ PHP_MINIT_FUNCTION(spl_iterators)
  */
 PHP_MINIT_FUNCTION(spl_iterators)
@@ -2939,6 +2963,7 @@ PHP_MINIT_FUNCTION(spl_iterators)
 
        REGISTER_SPL_SUB_CLASS_EX(ParentIterator, RecursiveFilterIterator, spl_dual_it_new, spl_funcs_ParentIterator);
 
+       REGISTER_SPL_INTERFACE(Countable);
        REGISTER_SPL_INTERFACE(SeekableIterator);
        REGISTER_SPL_ITERATOR(SeekableIterator);
 
@@ -2946,6 +2971,7 @@ PHP_MINIT_FUNCTION(spl_iterators)
 
        REGISTER_SPL_SUB_CLASS_EX(CachingIterator, IteratorIterator, spl_dual_it_new, spl_funcs_CachingIterator);
        REGISTER_SPL_IMPLEMENTS(CachingIterator, ArrayAccess);
+       REGISTER_SPL_IMPLEMENTS(CachingIterator, Countable);
 
        REGISTER_SPL_CLASS_CONST_LONG(CachingIterator, "CALL_TOSTRING",        CIT_CALL_TOSTRING); 
        REGISTER_SPL_CLASS_CONST_LONG(CachingIterator, "CATCH_GET_CHILD",      CIT_CATCH_GET_CHILD); 
index 8a931ebc18693c0300d236f5cac7354bb7d35575..2b7cee891ea238bbbac11ededa36b3d731f4acd6 100755 (executable)
@@ -50,6 +50,7 @@ extern PHPAPI zend_class_entry *spl_ce_EmptyIterator;
 extern PHPAPI zend_class_entry *spl_ce_AppendIterator;
 extern PHPAPI zend_class_entry *spl_ce_RegexIterator;
 extern PHPAPI zend_class_entry *spl_ce_RecursiveRegexIterator;
+extern PHPAPI zend_class_entry *spl_ce_Countable;
 
 PHP_MINIT_FUNCTION(spl_iterators);