Continued a bit:
authorRoland Häder <roland@mxchange.org>
Sat, 1 Jul 2017 21:27:39 +0000 (23:27 +0200)
committerRoland Häder <roland@mxchange.org>
Sat, 1 Jul 2017 21:27:39 +0000 (23:27 +0200)
- added experimental RegistryIterator class which will iterate over all found
  entries in the given registry. If a sub-registry is found, also their entries
  will be iterated over instead of the sub-registry being returned.

Signed-off-by: Roland Häder <roland@mxchange.org>
framework/config-global.php
framework/main/classes/iterator/class_
framework/main/classes/iterator/registry/.htaccess [new file with mode: 0644]
framework/main/classes/iterator/registry/class_RegistryIterator.php [new file with mode: 0644]
framework/main/classes/registry/class_BaseRegistry.php

index 5a9edd6..ba23856 100644 (file)
@@ -462,5 +462,8 @@ $cfg->setConfigEntry('extension_scrypt_loaded', false);
 // CFG: EXTENSION-UUID-LOADED (By default uuid is assumed absent and later tested being there)
 $cfg->setConfigEntry('extension_uuid_loaded', false);
 
 // CFG: EXTENSION-UUID-LOADED (By default uuid is assumed absent and later tested being there)
 $cfg->setConfigEntry('extension_uuid_loaded', false);
 
+// CFG: REGISTRY-ITERATOR-CLASS
+$cfg->setConfigEntry('registry_iterator_class', 'CoreFramework\Iterator\Registry\RegistryIterator');
+
 // Remove config from this name-space. Don't worry, no configuration is cleared.
 unset($cfg);
 // Remove config from this name-space. Don't worry, no configuration is cleared.
 unset($cfg);
index f91439a..d80910d 100644 (file)
@@ -5,6 +5,9 @@ namespace CoreFramework\Iterator\!!!;
 // Import framework stuff
 use CoreFramework\Iterator\BaseIterator;
 
 // Import framework stuff
 use CoreFramework\Iterator\BaseIterator;
 
+// Import SPL stuff
+use \Iterator;
+
 /**
  * A ??? iterator
  *
 /**
  * A ??? iterator
  *
diff --git a/framework/main/classes/iterator/registry/.htaccess b/framework/main/classes/iterator/registry/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/framework/main/classes/iterator/registry/class_RegistryIterator.php b/framework/main/classes/iterator/registry/class_RegistryIterator.php
new file mode 100644 (file)
index 0000000..522ad93
--- /dev/null
@@ -0,0 +1,119 @@
+<?php
+// Own namespace
+namespace CoreFramework\Iterator\Registry;
+
+// Import framework stuff
+use CoreFramework\Iterator\BaseIterator;
+use CoreFramework\Registry\Register;
+
+// Import SPL stuff
+use \Iterator;
+
+/**
+ * A Registry iterator
+ *
+ * @author             Roland Haeder <webmaster@ship-simu.org>
+ * @version            0.0.0
+ * @copyright  Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2017 Core Developer Team
+ * @license            GNU GPL 3.0 or any newer version
+ * @link               http://www.ship-simu.org
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+class RegistryIterator extends BaseIterator implements Iterator {
+       /**
+        * Protected constructor
+        *
+        * @return      void
+        */
+       protected function __construct () {
+               // Call parent constructor
+               parent::__construct(__CLASS__);
+       }
+
+       /**
+        * Creates an instance of this class
+        *
+        * @param       $registryInstance       An instance of a Register class
+        * @return      $iteratorInstance       An instance of a Iterator class
+        */
+       public final static function createRegistryIterator (Register $registryInstance) {
+               // Get new instance
+               $iteratorInstance = new RegistryIterator();
+
+               // Set registry here
+               $iteratorInstance->setRegistryInstance($registryInstance);
+
+               // Return the prepared instance
+               return $iteratorInstance;
+       }
+
+       /**
+        * Getter for current value from group or generic
+        *
+        * @return      $current        Current value in iteration
+        */
+       public function current () {
+               // Default is null
+               $current = null;
+
+               $this->partialStub('Please implement this method.');
+
+               // Return it
+               return $current;
+       }
+
+       /**
+        * Getter for key from group or generic
+        *
+        * @return      $key    Current key in iteration
+        */
+       public function key () {
+               // Default is null
+               $key = null;
+
+               $this->partialStub('Please implement this method.');
+
+               // Return it
+               return $key;
+       }
+
+       /**
+        * Advances to the next entry
+        *
+        * @return      void
+        */
+       public function next () {
+               $this->partialStub('Please implement this method.');
+       }
+
+       /**
+        * Rewinds to the beginning of the iteration
+        *
+        * @return      void
+        */
+       public function rewind () {
+               $this->partialStub('Please implement this method.');
+       }
+
+       /**
+        * Checks wether the current entry is valid (not at the end of the list)
+        *
+        * @return      void
+        */
+       public function valid () {
+               $this->partialStub('Please implement this method.');
+       }
+
+}
index 9a2af74..7c79ce3 100644 (file)
@@ -3,9 +3,13 @@
 namespace CoreFramework\Registry;
 
 // Import framework stuff
 namespace CoreFramework\Registry;
 
 // Import framework stuff
+use CoreFramework\Factory\ObjectFactory;
 use CoreFramework\Generic\NullPointerException;
 use CoreFramework\Object\BaseFrameworkSystem;
 
 use CoreFramework\Generic\NullPointerException;
 use CoreFramework\Object\BaseFrameworkSystem;
 
+// Import SPL stuff
+use \IteratorAggregate;
+
 /**
  * A general Registry
  *
 /**
  * A general Registry
  *
@@ -28,7 +32,7 @@ use CoreFramework\Object\BaseFrameworkSystem;
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
  * You should have received a copy of the GNU General Public License
  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
-class BaseRegistry extends BaseFrameworkSystem implements Registerable {
+class BaseRegistry extends BaseFrameworkSystem implements Register, Registerable, IteratorAggregate {
        /**
         * Glue for generating a registry key
         */
        /**
         * Glue for generating a registry key
         */
@@ -49,8 +53,19 @@ class BaseRegistry extends BaseFrameworkSystem implements Registerable {
                // Call parent constructor
                parent::__construct($className);
 
                // Call parent constructor
                parent::__construct($className);
 
-               // Init raw array
+               // Init generic arrays
                $this->initGenericArrayGroup('raw', 'generic');
                $this->initGenericArrayGroup('raw', 'generic');
+               $this->initGenericArrayGroup('raw', 'instance');
+       }
+
+       /**
+        * Returns an iterator for this whole registry.
+        *
+        * @return      $iteratorInstance       An instance of a Iterator class
+        */
+       public function getIterator () {
+               // Instance + return it
+               return ObjectFactory::createObjectByConfiguredName('registry_iterator_class', array($this));
        }
 
        /**
        }
 
        /**