From 86efcb137a3a9a692018ace94bbe5057d23b6825 Mon Sep 17 00:00:00 2001 From: Roland Haeder Date: Thu, 15 May 2014 20:56:12 +0200 Subject: [PATCH] Continued: - added FileIoIterator class and rewrote BaseFileStack to use it. - added BaseIterator class from 'hub' project. - added SeekableFileIterator which extends SPLs SeekableIterator. - assertion added for above interface to make sure that 'file_io_iterator' is a valid instance. MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Roland Häder --- inc/classes/interfaces/iterator/.htaccess | 1 + .../iterator/class_SeekableFileIterator.php | 28 ++++ .../main/file_stack/class_BaseFileStack.php | 12 +- inc/classes/main/file_stack/fifo/.htaccess | 1 + .../file_stack/fifo/class_FiFoFileStack.php | 54 ++++++++ inc/classes/main/iterator/.htaccess | 1 + inc/classes/main/iterator/class_ | 107 +++++++++++++++ .../main/iterator/class_BaseIterator.php | 38 ++++++ inc/classes/main/iterator/io/.htaccess | 1 + .../main/iterator/io/class_FileIoIterator.php | 122 ++++++++++++++++++ inc/config.php | 3 + 11 files changed, 365 insertions(+), 3 deletions(-) create mode 100644 inc/classes/interfaces/iterator/.htaccess create mode 100644 inc/classes/interfaces/iterator/class_SeekableFileIterator.php create mode 100644 inc/classes/main/file_stack/fifo/.htaccess create mode 100644 inc/classes/main/file_stack/fifo/class_FiFoFileStack.php create mode 100644 inc/classes/main/iterator/.htaccess create mode 100644 inc/classes/main/iterator/class_ create mode 100644 inc/classes/main/iterator/class_BaseIterator.php create mode 100644 inc/classes/main/iterator/io/.htaccess create mode 100644 inc/classes/main/iterator/io/class_FileIoIterator.php diff --git a/inc/classes/interfaces/iterator/.htaccess b/inc/classes/interfaces/iterator/.htaccess new file mode 100644 index 00000000..3a428827 --- /dev/null +++ b/inc/classes/interfaces/iterator/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/inc/classes/interfaces/iterator/class_SeekableFileIterator.php b/inc/classes/interfaces/iterator/class_SeekableFileIterator.php new file mode 100644 index 00000000..1192192b --- /dev/null +++ b/inc/classes/interfaces/iterator/class_SeekableFileIterator.php @@ -0,0 +1,28 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2012 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 . + */ +interface SeekableFileIterator extends SeekableIterator { +} + +// [EOF] +?> diff --git a/inc/classes/main/file_stack/class_BaseFileStack.php b/inc/classes/main/file_stack/class_BaseFileStack.php index 724f3c75..f782ad10 100644 --- a/inc/classes/main/file_stack/class_BaseFileStack.php +++ b/inc/classes/main/file_stack/class_BaseFileStack.php @@ -41,10 +41,16 @@ class BaseFileStack extends BaseFrameworkSystem { */ protected function initStack ($fileName) { // Get a file i/o pointer instance - $pointerInstance = ObjectFactory::createObjectByConfiguredName('file_raw_input_output_class' + $pointerInstance = ObjectFactory::createObjectByConfiguredName('file_raw_input_output_class', $fileName); - // And set it here - $this->setPointerInstance($pointerInstance); + // Get iterator instance + $iteratorInstance = ObjectFactory::createObjectByConfiguredName('file_io_iterator_class', $pointerInstance); + + // Is the instance implementing the right interface? + assert($iteratorInstance instanceof SeekableFileIterator); + + // Set iterator here + $this->setIteratorInstance($iteratorInstance); } } diff --git a/inc/classes/main/file_stack/fifo/.htaccess b/inc/classes/main/file_stack/fifo/.htaccess new file mode 100644 index 00000000..3a428827 --- /dev/null +++ b/inc/classes/main/file_stack/fifo/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/inc/classes/main/file_stack/fifo/class_FiFoFileStack.php b/inc/classes/main/file_stack/fifo/class_FiFoFileStack.php new file mode 100644 index 00000000..d180ff34 --- /dev/null +++ b/inc/classes/main/file_stack/fifo/class_FiFoFileStack.php @@ -0,0 +1,54 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2014 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 FiFoFileStack extends BaseFileStack implements Stackable { + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + } + + /** + * Creates an instance of this class + * + * @param $fileName Absolute Name of stack file + * @return $stackInstance An instance of a Stackable class + */ + public final static function createFiFoFileStack ($fileName) { + // Get new instance + $stackInstance = new FiFoFileStack(); + + // Init this stack + $stackInstance->initStack($fileName); + + // Return the prepared instance + return $stackInstance; + } +} + +// [EOF] +?> diff --git a/inc/classes/main/iterator/.htaccess b/inc/classes/main/iterator/.htaccess new file mode 100644 index 00000000..3a428827 --- /dev/null +++ b/inc/classes/main/iterator/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/inc/classes/main/iterator/class_ b/inc/classes/main/iterator/class_ new file mode 100644 index 00000000..1c1c687a --- /dev/null +++ b/inc/classes/main/iterator/class_ @@ -0,0 +1,107 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2012 Hub 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 ???Iterator extends BaseIterator implements Iterator { + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + } + + /** + * Creates an instance of this class + * + * @return $iteratorInstance An instance of a Iterator class + */ + public final static function create???Iterator () { + // Get new instance + $iteratorInstance = new ???Iterator(); + + // 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.'); + } +} + +// [EOF] +?> diff --git a/inc/classes/main/iterator/class_BaseIterator.php b/inc/classes/main/iterator/class_BaseIterator.php new file mode 100644 index 00000000..112f719a --- /dev/null +++ b/inc/classes/main/iterator/class_BaseIterator.php @@ -0,0 +1,38 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2012 Hub Developer Team + * @license GNU GPL 3.0 or any newer version + * @link http://www.shipsimu.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 BaseIterator extends BaseFrameworkSystem { + /** + * Protected constructor + * + * @param $className Name of the class + * @return void + */ + protected function __construct ($className) { + // Call parent constructor + parent::__construct($className); + } +} + +// [EOF] +?> diff --git a/inc/classes/main/iterator/io/.htaccess b/inc/classes/main/iterator/io/.htaccess new file mode 100644 index 00000000..3a428827 --- /dev/null +++ b/inc/classes/main/iterator/io/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/inc/classes/main/iterator/io/class_FileIoIterator.php b/inc/classes/main/iterator/io/class_FileIoIterator.php new file mode 100644 index 00000000..1791e615 --- /dev/null +++ b/inc/classes/main/iterator/io/class_FileIoIterator.php @@ -0,0 +1,122 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2012 Hub 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 FileIoIterator extends BaseIterator implements SeekableFileIterator { + /** + * Protected constructor + * + * @return void + */ + protected function __construct () { + // Call parent constructor + parent::__construct(__CLASS__); + } + + /** + * Creates an instance of this class + * + * @param $pointerInstance An instance of a FrameworkFileInputOutputPointer class + * @return $iteratorInstance An instance of a Iterator class + */ + public final static function createFileIoIterator (FrameworkFileInputOutputPointer $pointerInstance) { + // Get new instance + $iteratorInstance = new FileIoIterator(); + + // Set the instance here + $iteratorInstance->setPointerInstance($pointerInstance); + + // Return the prepared instance + return $iteratorInstance; + } + + /** + * Gets currently read data + * + * @return $current Currently read data + */ + public function current () { + // Default is null + $current = null; + + $this->partialStub('Please implement this method.'); + + // Return it + return $current; + } + + /** + * Gets current seek position ("key"). + * + * @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 next "block" of bytes + * + * @return void + */ + public function next () { + $this->partialStub('Please implement this method.'); + } + + /** + * Rewinds to the beginning of the file + * + * @return void + */ + public function rewind () { + $this->partialStub('Please implement this method.'); + } + + /** + * Seeks to given position + * + * @param $seekPosition Seek position in file + * @return void + */ + public function seek ($seedPosition) { + $this->partialStub('Please implement this method. seekPosition=' . $seekPosition); + } + + /** + * Checks wether the current entry is valid (not at the end of the file). + * This method will return TRUE if an emptied (nulled) entry has been found. + * + * @return void + */ + public function valid () { + $this->partialStub('Please implement this method.'); + } +} + +// [EOF] +?> diff --git a/inc/config.php b/inc/config.php index b828bb1a..00fce07e 100644 --- a/inc/config.php +++ b/inc/config.php @@ -368,5 +368,8 @@ $cfg->setConfigEntry('file_raw_output_class', 'FrameworkFileOutputPointer'); // CFG: FILE-INPUT-OUTPUT-CLASS $cfg->setConfigEntry('file_raw_input_output_class', 'FrameworkFileInputOutputPointer'); +// CFG: FILE-IO-ITERATOR-CLASS +$cfg->setConfigEntry('file_io_iterator_class', 'FileIoIterator'); + // [EOF] ?> -- 2.39.5