]> granicus.if.org Git - php/commitdiff
- MFH simplify, synch docu/implementation
authorMarcus Boerger <helly@php.net>
Sun, 4 Mar 2007 12:18:02 +0000 (12:18 +0000)
committerMarcus Boerger <helly@php.net>
Sun, 4 Mar 2007 12:18:02 +0000 (12:18 +0000)
ext/spl/internal/parentiterator.inc
ext/spl/spl_directory.c
ext/spl/spl_iterators.c

index 70f0bee796b05cb364526d64f81219fcfa6f37d4..33b7f9e9183850603cab519486f6807e7b42f656 100755 (executable)
@@ -4,7 +4,7 @@
  * @ingroup SPL
  * @brief class FilterIterator
  * @author  Marcus Boerger
- * @date    2003 - 2005
+ * @date    2003 - 2006
  *
  * SPL - Standard PHP Library
  */
  */
 class ParentIterator extends RecursiveFilterIterator
 {
-       /** @param $it the RecursiveIterator to filter
-        */
-       function __construct(RecursiveIterator $it)
-       {
-               parent::__construct($it);
-       }
-       
        /** @return whetehr the current element has children
         */
        function accept()
        {
                return $this->it->hasChildren();
        }
-
-       /** @return the ParentIterator for the current elements children
-        */
-       function getChildren()
-       {
-               return new ParentIterator($this->it->getChildren());
-       }
 }
 
 ?>
\ No newline at end of file
index 00b910dda02238edbba5476d821d61575b3d1e86..222cf736005018ca91f0876ce17ec0ac29948733 100755 (executable)
@@ -448,6 +448,18 @@ static spl_filesystem_object * spl_filesystem_object_create_type(int ht, spl_fil
        return NULL;
 } /* }}} */
 
+static inline int spl_filesystem_is_dot(const char * d_name) /* {{{ */
+{
+       return !strcmp(d_name, ".") || !strcmp(d_name, "..");
+}
+/* }}} */
+
+static int spl_filesystem_is_invalid_or_dot(const char * d_name) /* {{{ */
+{
+       return d_name[0] == '\0' || spl_filesystem_is_dot(d_name);
+}
+/* }}} */
+
 /* {{{ proto void DirectoryIterator::__construct(string path)
  Cronstructs a new dir iterator from a path. */
 SPL_METHOD(DirectoryIterator, __construct)
@@ -681,7 +693,7 @@ SPL_METHOD(DirectoryIterator, isDot)
 {
        spl_filesystem_object *intern = (spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
 
-       RETURN_BOOL(!strcmp(intern->u.dir.entry.d_name, ".") || !strcmp(intern->u.dir.entry.d_name, ".."));
+       RETURN_BOOL(spl_filesystem_is_dot(intern->u.dir.entry.d_name));
 }
 /* }}} */
 
@@ -972,7 +984,7 @@ SPL_METHOD(RecursiveDirectoryIterator, rewind)
                if (!intern->u.dir.dirp || !php_stream_readdir(intern->u.dir.dirp, &intern->u.dir.entry)) {
                        intern->u.dir.entry.d_name[0] = '\0';
                }
-       } while (!strcmp(intern->u.dir.entry.d_name, ".") || !strcmp(intern->u.dir.entry.d_name, ".."));
+       } while (spl_filesystem_is_dot(intern->u.dir.entry.d_name));
 }
 /* }}} */
 
@@ -987,7 +999,7 @@ SPL_METHOD(RecursiveDirectoryIterator, next)
                if (!intern->u.dir.dirp || !php_stream_readdir(intern->u.dir.dirp, &intern->u.dir.entry)) {
                        intern->u.dir.entry.d_name[0] = '\0';
                }
-       } while (!strcmp(intern->u.dir.entry.d_name, ".") || !strcmp(intern->u.dir.entry.d_name, ".."));
+       } while (spl_filesystem_is_dot(intern->u.dir.entry.d_name));
        if (intern->file_name) {
                efree(intern->file_name);
                intern->file_name = NULL;
@@ -1002,7 +1014,7 @@ SPL_METHOD(RecursiveDirectoryIterator, hasChildren)
        zend_bool allow_links = 0;
        spl_filesystem_object *intern = (spl_filesystem_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
        
-       if (!strcmp(intern->u.dir.entry.d_name, ".") || !strcmp(intern->u.dir.entry.d_name, "..")) {
+       if (spl_filesystem_is_invalid_or_dot(intern->u.dir.entry.d_name)) {
                RETURN_BOOL(0);
        } else {
                if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "|b", &allow_links) == FAILURE) {
@@ -1274,7 +1286,7 @@ static void spl_filesystem_tree_it_move_forward(zend_object_iterator *iter TSRML
                if (!object->u.dir.dirp || !php_stream_readdir(object->u.dir.dirp, &object->u.dir.entry)) {
                        object->u.dir.entry.d_name[0] = '\0';
                }
-       } while (!strcmp(object->u.dir.entry.d_name, ".") || !strcmp(object->u.dir.entry.d_name, ".."));
+       } while (spl_filesystem_is_dot(intern->u.dir.entry.d_name));
        if (object->file_name) {
                efree(object->file_name);
                object->file_name = NULL;
@@ -1300,7 +1312,7 @@ static void spl_filesystem_tree_it_rewind(zend_object_iterator *iter TSRMLS_DC)
                if (!object->u.dir.dirp || !php_stream_readdir(object->u.dir.dirp, &object->u.dir.entry)) {
                        object->u.dir.entry.d_name[0] = '\0';
                }
-       } while (!strcmp(object->u.dir.entry.d_name, ".") || !strcmp(object->u.dir.entry.d_name, ".."));
+       } while (spl_filesystem_is_dot(intern->u.dir.entry.d_name));
        if (iterator->current) {
                zval_ptr_dtor(&iterator->current);
                iterator->current = NULL;
index 471b24f4333494aa1382ff9d765bfd945dd6eef3..e95ca8b9b27f782dc715a408b348442d3c45cf19 100755 (executable)
@@ -1336,41 +1336,6 @@ SPL_METHOD(ParentIterator, __construct)
        spl_dual_it_construct(INTERNAL_FUNCTION_PARAM_PASSTHRU, spl_ce_ParentIterator, spl_ce_RecursiveIterator, DIT_ParentIterator);
 } /* }}} */
 
-/* {{{ proto bool ParentIterator::hasChildren()
-   Check whether the inner iterator's current element has children */
-SPL_METHOD(ParentIterator, hasChildren)
-{
-       spl_dual_it_object   *intern;
-       zval                 *retval;
-
-       intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
-       zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "haschildren", &retval);
-       if (retval) {
-               RETURN_ZVAL(retval, 0, 1);
-       } else {
-               RETURN_FALSE;
-       }
-} /* }}} */
-
-/* {{{ proto ParentIterator ParentIterator::getChildren()
-   Return the inner iterator's children contained in a ParentIterator */
-SPL_METHOD(ParentIterator, getChildren)
-{
-       spl_dual_it_object   *intern;
-       zval                 *retval;
-
-       intern = (spl_dual_it_object*)zend_object_store_get_object(getThis() TSRMLS_CC);
-
-       zend_call_method_with_0_params(&intern->inner.zobject, intern->inner.ce, NULL, "getchildren", &retval);
-       if (!EG(exception) && retval) {
-               spl_instantiate_arg_ex1(Z_OBJCE_P(getThis()), &return_value, 0, retval TSRMLS_CC);
-       }
-       if (retval) {
-               zval_ptr_dtor(&retval);
-       }
-} /* }}} */
-
 #if HAVE_PCRE || HAVE_BUNDLED_PCRE
 /* {{{ proto void RegexIterator::__construct(Iterator it, string regex [, int mode [, int flags [, int preg_flags]]]) 
    Create an RegexIterator from another iterator and a regular expression */
@@ -1665,7 +1630,6 @@ ZEND_END_ARG_INFO();
 
 static zend_function_entry spl_funcs_RecursiveFilterIterator[] = {
        SPL_ME(RecursiveFilterIterator,  __construct,      arginfo_parent_it___construct, ZEND_ACC_PUBLIC)
-       SPL_MA(ParentIterator,  accept,  RecursiveFilterIterator, hasChildren, NULL, ZEND_ACC_PUBLIC)
        SPL_ME(RecursiveFilterIterator,  hasChildren,      NULL, ZEND_ACC_PUBLIC)
        SPL_ME(RecursiveFilterIterator,  getChildren,      NULL, ZEND_ACC_PUBLIC)
        {NULL, NULL, NULL}
@@ -1673,10 +1637,7 @@ static zend_function_entry spl_funcs_RecursiveFilterIterator[] = {
 
 static zend_function_entry spl_funcs_ParentIterator[] = {
        SPL_ME(ParentIterator,  __construct,      arginfo_parent_it___construct, ZEND_ACC_PUBLIC)
-       SPL_MA(ParentIterator,  accept,           ParentIterator, hasChildren, NULL, ZEND_ACC_PUBLIC)
-       SPL_ME(ParentIterator,  hasChildren,      NULL, ZEND_ACC_PUBLIC)
-       SPL_ME(ParentIterator,  getChildren,      NULL, ZEND_ACC_PUBLIC)
-       SPL_ME(dual_it,         getInnerIterator, NULL, ZEND_ACC_PUBLIC)
+       SPL_MA(ParentIterator,  accept,           RecursiveFilterIterator, hasChildren, NULL, ZEND_ACC_PUBLIC)
        {NULL, NULL, NULL}
 };