Continued:
authorRoland Haeder <roland@mxchange.org>
Thu, 15 May 2014 18:56:12 +0000 (20:56 +0200)
committerRoland Haeder <roland@mxchange.org>
Thu, 15 May 2014 19:03:16 +0000 (21:03 +0200)
- 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.

Signed-off-by: Roland Häder <roland@mxchange.org>
inc/classes/interfaces/iterator/.htaccess [new file with mode: 0644]
inc/classes/interfaces/iterator/class_SeekableFileIterator.php [new file with mode: 0644]
inc/classes/main/file_stack/class_BaseFileStack.php
inc/classes/main/file_stack/fifo/.htaccess [new file with mode: 0644]
inc/classes/main/file_stack/fifo/class_FiFoFileStack.php [new file with mode: 0644]
inc/classes/main/iterator/.htaccess [new file with mode: 0644]
inc/classes/main/iterator/class_ [new file with mode: 0644]
inc/classes/main/iterator/class_BaseIterator.php [new file with mode: 0644]
inc/classes/main/iterator/io/.htaccess [new file with mode: 0644]
inc/classes/main/iterator/io/class_FileIoIterator.php [new file with mode: 0644]
inc/config.php

diff --git a/inc/classes/interfaces/iterator/.htaccess b/inc/classes/interfaces/iterator/.htaccess
new file mode 100644 (file)
index 0000000..3a42882
--- /dev/null
@@ -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 (file)
index 0000000..1192192
--- /dev/null
@@ -0,0 +1,28 @@
+<?php
+/**
+ * A SeekableFileIterator interface
+ *
+ * @author             Roland Haeder <webmaster@ship-simu.org>
+ * @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 <http://www.gnu.org/licenses/>.
+ */
+interface SeekableFileIterator extends SeekableIterator {
+}
+
+// [EOF]
+?>
index 724f3c75bb2604ff8b636ddcbb7e675240256cc2..f782ad10325cfd2e360ece15e47aaf92aa86c801 100644 (file)
@@ -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 (file)
index 0000000..3a42882
--- /dev/null
@@ -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 (file)
index 0000000..d180ff3
--- /dev/null
@@ -0,0 +1,54 @@
+<?php
+/**
+ * A FiFo file-based stack
+ *
+ * @author             Roland Haeder <webmaster@ship-simu.org>
+ * @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 <http://www.gnu.org/licenses/>.
+ */
+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 (file)
index 0000000..3a42882
--- /dev/null
@@ -0,0 +1 @@
+Deny from all
diff --git a/inc/classes/main/iterator/class_ b/inc/classes/main/iterator/class_
new file mode 100644 (file)
index 0000000..1c1c687
--- /dev/null
@@ -0,0 +1,107 @@
+<?php
+/**
+ * A ??? iterator
+ *
+ * @author             Roland Haeder <webmaster@ship-simu.org>
+ * @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 <http://www.gnu.org/licenses/>.
+ */
+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 (file)
index 0000000..112f719
--- /dev/null
@@ -0,0 +1,38 @@
+<?php
+/**
+ * A general iterator
+ *
+ * @author             Roland Haeder <webmaster@shipsimu.org>
+ * @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 <http://www.gnu.org/licenses/>.
+ */
+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 (file)
index 0000000..3a42882
--- /dev/null
@@ -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 (file)
index 0000000..1791e61
--- /dev/null
@@ -0,0 +1,122 @@
+<?php
+/**
+ * A file i/o iterator
+ *
+ * @author             Roland Haeder <webmaster@ship-simu.org>
+ * @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 <http://www.gnu.org/licenses/>.
+ */
+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]
+?>
index b828bb1a25608601e5567cc84d4e9a122e9bb94d..00fce07e262827e78a38780ca10def459c92ab69 100644 (file)
@@ -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]
 ?>