]> granicus.if.org Git - php/commitdiff
Use a single bit field for the flags here
authorMarcus Boerger <helly@php.net>
Sun, 7 Dec 2003 15:03:11 +0000 (15:03 +0000)
committerMarcus Boerger <helly@php.net>
Sun, 7 Dec 2003 15:03:11 +0000 (15:03 +0000)
ext/spl/examples/cachingiterator.inc
ext/spl/examples/cachingrecursiveiterator.inc
ext/spl/examples/directorygraphiterator.inc
ext/spl/examples/directorytreeiterator.inc

index a9cc075b704e923e359f36537ae93b78ab46a11d..f83932dbddf990b8b5093e6618d896df681acfde 100644 (file)
@@ -1,5 +1,8 @@
 <?php
 
+define('CIT_GET_STR_VALUE', 1);
+define('CIT_CATCH_GET_CHILD', 2);
+
 class CachingIterator
 {
        protected $it;
@@ -9,10 +12,10 @@ class CachingIterator
        protected $strValue;
        protected $getStrVal;
 
-       function __construct(Iterator $it, $getStrVal = true)
+       function __construct(Iterator $it, $flags = CIT_GET_STR_VALUE)
        {
                $this->it = $it;
-               $this->getStrVal = (boolean)$getStrVal;
+               $this->flags = $flags & (CIT_GET_STR_VALUE|CIT_CATCH_GET_CHILD);
        }
 
        function rewind()
@@ -26,7 +29,7 @@ class CachingIterator
                if ($this->more = $this->it->hasMore()) {
                        $this->current = $this->it->current();
                        $this->key = $this->it->key();
-                       if ($this->getStrVal) {
+                       if ($this->flags & CIT_GET_STR_VALUE) {
                                if (is_object($this->current)) {
                                        $this->strValue = $this->current->__toString();
                                } else {
@@ -36,7 +39,7 @@ class CachingIterator
                } else {
                        $this->current = NULL;
                        $this->key = NULL;
-                       $this->strValue = '';
+                       $this->strValue = NULL;
                }
                $this->it->next();
        }
@@ -68,7 +71,7 @@ class CachingIterator
        
        function __toString()
        {
-               if (!$this->getStrVal) {
+               if (!$this->flags & CIT_GET_STR_VALUE) {
                        throw new exception('CachingIterator does not fetch string value (see CachingIterator::__construct)');
                }
                return $this->strValue;
index 898d40b0bcdabe6db020ad97ae68d1b02b17970d..cc1f101d9992d5c0e670db8bf98a7c7c948e73f5 100644 (file)
@@ -6,23 +6,22 @@ class CachingRecursiveIterator extends CachingIterator implements RecursiveItera
        protected $getChildren;
        protected $catch_get_child;
 
-       function __construct(RecursiveIterator $it, $getStrVal = true, $catch_get_child = false)
+       function __construct(RecursiveIterator $it, $flags = CIT_GET_STR_VALUE)
        {
-               $this->catch_get_child = $catch_get_child;
-               parent::__construct($it, $getStrVal);
+               parent::__construct($it, $flags);
        }
        
        function next()
        {
                if ($this->hasChildren = $this->it->hasChildren()) {
                        try {
-                               //$this->getChildren = new CachingRecursiveIterator($this->it->getChildren(), $this->getStrVal, $this->catch_get_child);
+                               //$this->getChildren = new CachingRecursiveIterator($this->it->getChildren(), $this->flags);
                                // workaround memleaks...
                                $child = $this->it->getChildren();
-                               $this->getChildren = new CachingRecursiveIterator($child, $this->getStrVal, $this->catch_get_child);
+                               $this->getChildren = new CachingRecursiveIterator($child, $this->flags);
                        }
                        catch(Exception $e) {
-                               if (!$this->catch_get_child) {
+                               if (!$this->flags & CIT_CATCH_GET_CHILD) {
                                        throw $e;
                                }
                                $this->hasChildren = false;
index b1b8743b4cf92691bdc8298733e9a2e356dee621..50b27bf48b04428e95dad65316e05540407df0ea 100644 (file)
@@ -4,7 +4,7 @@ class DirectoryGraphIterator extends DirectoryTreeIterator
 {
        function __construct($path)
        {
-               RecursiveIteratorIterator::__construct(new CachingRecursiveIterator(new ParentIterator(new RecursiveDirectoryIterator($path)), true, true), 1);
+               RecursiveIteratorIterator::__construct(new CachingRecursiveIterator(new ParentIterator(new RecursiveDirectoryIterator($path)), CIT_GET_STR_VALUE|CIT_CATCH_GET_CHILD), 1);
        }
 }
 
index 3accacae43f94e500d9028af29f691fa95847e61..0c2717ccf27b90e167f7b1875a538588bf878b53 100644 (file)
@@ -4,7 +4,7 @@ class DirectoryTreeIterator extends RecursiveIteratorIterator
 {
        function __construct($path)
        {
-               parent::__construct(new CachingRecursiveIterator(new RecursiveDirectoryIterator($path), true, true), 1);
+               parent::__construct(new CachingRecursiveIterator(new RecursiveDirectoryIterator($path), CIT_GET_STR_VALUE|CIT_CATCH_GET_CHILD), 1);
        }
        
        function current()