From 9038ac3be74ac32db35adceb83f40170ac123e4f Mon Sep 17 00:00:00 2001 From: =?utf8?q?Roland=20H=C3=A4der?= Date: Sat, 1 Jul 2017 23:27:39 +0200 Subject: [PATCH] Continued a bit: - 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. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Roland Häder --- framework/config-global.php | 3 + framework/main/classes/iterator/class_ | 3 + .../main/classes/iterator/registry/.htaccess | 1 + .../registry/class_RegistryIterator.php | 119 ++++++++++++++++++ .../classes/registry/class_BaseRegistry.php | 19 ++- 5 files changed, 143 insertions(+), 2 deletions(-) create mode 100644 framework/main/classes/iterator/registry/.htaccess create mode 100644 framework/main/classes/iterator/registry/class_RegistryIterator.php diff --git a/framework/config-global.php b/framework/config-global.php index 5a9edd6c..ba238564 100644 --- a/framework/config-global.php +++ b/framework/config-global.php @@ -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: 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); diff --git a/framework/main/classes/iterator/class_ b/framework/main/classes/iterator/class_ index f91439a0..d80910d7 100644 --- a/framework/main/classes/iterator/class_ +++ b/framework/main/classes/iterator/class_ @@ -5,6 +5,9 @@ namespace CoreFramework\Iterator\!!!; // Import framework stuff use CoreFramework\Iterator\BaseIterator; +// Import SPL stuff +use \Iterator; + /** * A ??? iterator * diff --git a/framework/main/classes/iterator/registry/.htaccess b/framework/main/classes/iterator/registry/.htaccess new file mode 100644 index 00000000..3a428827 --- /dev/null +++ b/framework/main/classes/iterator/registry/.htaccess @@ -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 index 00000000..522ad934 --- /dev/null +++ b/framework/main/classes/iterator/registry/class_RegistryIterator.php @@ -0,0 +1,119 @@ + + * @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 . + */ +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.'); + } + +} diff --git a/framework/main/classes/registry/class_BaseRegistry.php b/framework/main/classes/registry/class_BaseRegistry.php index 9a2af749..7c79ce3b 100644 --- a/framework/main/classes/registry/class_BaseRegistry.php +++ b/framework/main/classes/registry/class_BaseRegistry.php @@ -3,9 +3,13 @@ namespace CoreFramework\Registry; // Import framework stuff +use CoreFramework\Factory\ObjectFactory; use CoreFramework\Generic\NullPointerException; use CoreFramework\Object\BaseFrameworkSystem; +// Import SPL stuff +use \IteratorAggregate; + /** * 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 . */ -class BaseRegistry extends BaseFrameworkSystem implements Registerable { +class BaseRegistry extends BaseFrameworkSystem implements Register, Registerable, IteratorAggregate { /** * Glue for generating a registry key */ @@ -49,8 +53,19 @@ class BaseRegistry extends BaseFrameworkSystem implements Registerable { // Call parent constructor parent::__construct($className); - // Init raw array + // Init generic arrays $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)); } /** -- 2.39.5