From: Roland Haeder Date: Fri, 16 May 2014 21:26:09 +0000 (+0200) Subject: Continued on file-based stack: X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=65a9356fe91fab0489325b7f3a5662b8bbf0b110;p=core.git Continued on file-based stack: - renamed path file_stack -> file - added (stubs) seek() and size() - some improvements on format "documentation" Signed-off-by: Roland Häder --- diff --git a/contrib/file_stack/format.txt b/contrib/file_stack/format.txt index 2a646c82..40044386 100644 --- a/contrib/file_stack/format.txt +++ b/contrib/file_stack/format.txt @@ -9,7 +9,7 @@ Purpose: | "magic" | separator | count | position | separator | ---------+-----------+-----------+----------+---------------+-----------+ Bytes: | 9 | 1 | 20 (hex) | 2 - n^2 (hex) | 1 | ---------+-----------+-----------+----------+---------------+-----------+ -Example: | STACKv1.0 | 00 | 00...ff | 01 | ff | +Example: | STACKv1.0 | 00 | 00...ff | 05 | ff | Continued: diff --git a/inc/classes/interfaces/iterator/class_SeekableWritableFileIterator.php b/inc/classes/interfaces/iterator/class_SeekableWritableFileIterator.php index 48dd8db4..33147d98 100644 --- a/inc/classes/interfaces/iterator/class_SeekableWritableFileIterator.php +++ b/inc/classes/interfaces/iterator/class_SeekableWritableFileIterator.php @@ -29,7 +29,14 @@ interface SeekableWritableFileIterator extends SeekableIterator { * @param $seekPosition Seek position in file * @return void */ - function seek ($seedPosition); + function seek ($seekPosition); + + /** + * Size of file stack + * + * @return $size Size (in bytes) of file + */ + function size (); } // [EOF] diff --git a/inc/classes/interfaces/stacker/file/.htaccess b/inc/classes/interfaces/stacker/file/.htaccess new file mode 100644 index 00000000..3a428827 --- /dev/null +++ b/inc/classes/interfaces/stacker/file/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/inc/classes/interfaces/stacker/file/class_StackableFile.php b/inc/classes/interfaces/stacker/file/class_StackableFile.php new file mode 100644 index 00000000..01537288 --- /dev/null +++ b/inc/classes/interfaces/stacker/file/class_StackableFile.php @@ -0,0 +1,42 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 Core 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 . + */ +interface StackableFile extends Stackable { + /** + * Seeks to given position + * + * @param $seekPosition Seek position in file + * @return void + */ + function seek ($seekPosition); + + /** + * Size of file stack + * + * @return $size Size (in bytes) of file + */ + function size (); +} + +// [EOF] +?> diff --git a/inc/classes/main/iterator/io/class_FileIoIterator.php b/inc/classes/main/iterator/io/class_FileIoIterator.php index 1d546922..61045519 100644 --- a/inc/classes/main/iterator/io/class_FileIoIterator.php +++ b/inc/classes/main/iterator/io/class_FileIoIterator.php @@ -25,12 +25,12 @@ class FileIoIterator extends BaseIterator implements SeekableWritableFileIterato /** * Current absolute seek position (returned by key()) */ - private $seekPosition = -1; + private $seekPosition = FALSE; /** * Total entries (read from file) */ - private $totalEntriesFile = -1; + private $totalEntriesFile = FALSE; /** * Protected constructor @@ -117,6 +117,19 @@ class FileIoIterator extends BaseIterator implements SeekableWritableFileIterato $this->partialStub('Please implement this method. seekPosition=' . $seekPosition); } + /** + * Size of file stack + * + * @return $size Size (in bytes) of file + */ + public function size () { + // Call the pointer object + $size = $this->getPointerInstance()->size(); + + // Return result + return $size; + } + /** * 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. diff --git a/inc/classes/main/stacker/file/.htaccess b/inc/classes/main/stacker/file/.htaccess new file mode 100644 index 00000000..3a428827 --- /dev/null +++ b/inc/classes/main/stacker/file/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/inc/classes/main/stacker/file/class_ b/inc/classes/main/stacker/file/class_ new file mode 100644 index 00000000..8e8510a0 --- /dev/null +++ b/inc/classes/main/stacker/file/class_ @@ -0,0 +1,109 @@ + + * @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 ???FileStack extends BaseFileStack implements StackableFile { + /** + * 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 create???FileStack ($fileName) { + // Get new instance + $stackInstance = new ???FileStack(); + + // Init this stack + $stackInstance->initStack($fileName); + + // Return the prepared instance + return $stackInstance; + } + + /** + * Pushs a value on a named stacker + * + * @param $stackerName Name of the stack + * @param $value Value to push on it + * @return void + * @throws StackerFullException If the stack is full + */ + public function pushNamed ($stackerName, $value) { + $this->partialStub('stackerName=' . $stackerName . ',value[' . gettype($value) . ']=' . $value); + } + + /** + * 'Pops' a value from a named stacker + * + * @param $stackerName Name of the stack + * @return void + * @throws NoStackerException If the named stacker was not found + * @throws EmptyStackerException If the named stacker is empty + */ + public function popNamed ($stackerName) { + $this->partialStub('stackerName=' . $stackerName); + } + + /** + * Get value from named stacker + * + * @param $stackerName Name of the stack + * @return $value Value of last added value + * @throws NoStackerException If the named stacker was not found + * @throws EmptyStackerException If the named stacker is empty + */ + public function getNamed ($stackerName) { + $this->partialStub('stackerName=' . $stackerName); + } + + /** + * Seeks to given position + * + * @param $seekPosition Seek position in file + * @return void + */ + public function seek ($seekPosition) { + $this->partialStub('seekPosition=' . $seekPosition); + } + + /** + * Size of file stack + * + * @return $size Size (in bytes) of file + */ + public function size () { + $this->partialStub(); + } +} + +// [EOF] +?> diff --git a/inc/classes/main/stacker/file/class_BaseFileStack.php b/inc/classes/main/stacker/file/class_BaseFileStack.php new file mode 100644 index 00000000..f0539e10 --- /dev/null +++ b/inc/classes/main/stacker/file/class_BaseFileStack.php @@ -0,0 +1,313 @@ + + * @version 0.0.0 + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 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 BaseFileStack extends BaseStacker { + /** + * Magic for this stack + */ + const STACK_MAGIC = 'STACKv0.1'; + + /** + * Separator magic->count + */ + const SEPARATOR_MAGIC_COUNT = 0x00; + + /** + * Separator position->entries + */ + const SEPARATOR_SEEK_POS_ENTRIES = 0xff; + + /** + * Separator hash->name + */ + const SEPARATOR_HASH_NAME = 0x05; + + /** + * Protected constructor + * + * @param $className Name of the class + * @return void + */ + protected function __construct ($className) { + // Call parent constructor + parent::__construct($className); + } + + /** + * Checks whether the file header is initialized + * + * @return $isInitialized Whether the file header is initialized + */ + private function isFileHeaderInitialized () { + // Default is not initialized + $isInitialized = FALSE; + + // Is the file initialized? + if ($this->isFileInitialized()) { + // Some bytes has been written, so rewind to start of it. + $this->getIteratorInstance()->rewind(); + + // Read file header + $this->readFileHeader(); + } // END - if + + // Return result + return $isInitialized; + } + + /** + * Checks whether the file-based stack has been initialized + * + * @return $isInitialized Whether the file's size is zero + */ + private function isFileInitialized () { + // Default is not initialized + $isInitialized = FALSE; + + // Get it from iterator which holds the pointer instance. If FALSE is returned + $fileSize = $this->getIteratorInstance()->size(); + + /* + * The returned file size should not be FALSE or NULL as this means + * that the pointer class does not work correctly. + */ + assert(is_int($fileSize)); + + // Is more than 0 returned? + if ($fileSize > 0) { + // So is the header written? + $isInitialized = $this->getIteratorInstance()->isHeaderInitialized(); + } // END - if + + // Return result + return $isInitialized; + } + + /** + * Initializes this file-based stack. + * + * @param $fileName File name of this stack + * @return void + */ + protected function initFileStack ($fileName) { + // Get a file i/o pointer instance + $pointerInstance = ObjectFactory::createObjectByConfiguredName('file_raw_input_output_class', array($fileName)); + + // Get iterator instance + $iteratorInstance = ObjectFactory::createObjectByConfiguredName('file_io_iterator_class', array($pointerInstance)); + + // Is the instance implementing the right interface? + assert($iteratorInstance instanceof SeekableWritableFileIterator); + + // Set iterator here + $this->setIteratorInstance($iteratorInstance); + + // Is the file's header initialized? + if ($this->isFileHeaderInitialized()) { + // Then load it + $this->loadFileHeader(); + } else { + // No, then create it (which may pre-allocate the stack) + $this->createFileHeader(); + } + } + + /** + * Initializes given stacker + * + * @param $stackerName Name of the stack + * @param $forceReInit Force re-initialization + * @return void + * @throws AlreadyInitializedStackerException If the stack is already initialized + */ + public function initStack ($stackerName, $forceReInit = FALSE) { + // Is the stack already initialized? + if (($forceReInit === FALSE) && ($this->isStackInitialized($stackerName))) { + // Then throw the exception + throw new AlreadyInitializedStackerException(array($this, $stackerName, $forceReInit), self::EXCEPTION_STACKER_ALREADY_INITIALIZED); + } // END - if + + // Initialize the given stack + $this->partialStub('stackerName=' . $stackerName . ',forceReInit=' . intval($forceReInit)); + } + + /** + * Checks whether the given stack is initialized (set in array $stackers) + * + * @param $stackerName Name of the stack + * @return $isInitialized Whether the stack is initialized + */ + public function isStackInitialized ($stackerName) { + // Is is there? + $this->partialStub('stackerName=' . $stackerName); + $isInitialized = TRUE; + + // Return result + return $isInitialized; + } + + /** + * Getter for size of given stack (array count) + * + * @param $stackerName Name of the stack + * @return $count Size of stack (array count) + * @throws NoStackerException If given stack is missing + */ + public function getStackCount ($stackerName) { + // Is the stack not yet initialized? + if (!$this->isStackInitialized($stackerName)) { + // Throw an exception + throw new NoStackerException(array($this, $stackerName), self::EXCEPTION_NO_STACKER_FOUND); + } // END - if + + // Now, count the array of entries + $this->partialStub('stackerName=' . $stackerName); + $count = 0; + + // Return result + return $count; + } + + /** + * Adds a value to given stack + * + * @param $stackerName Name of the stack + * @param $value Value to add to this stacker + * @return void + * @throws FullStackerException Thrown if the stack is full + */ + protected function addValue ($stackerName, $value) { + // Is the stack not yet initialized or full? + if (!$this->isStackInitialized($stackerName)) { + // Then do it here + $this->initStack($stackerName); + } elseif ($this->isStackFull($stackerName)) { + // Stacker is full + throw new FullStackerException(array($this, $stackerName, $value), self::EXCEPTION_STACKER_IS_FULL); + } + + // Now add the value to the stack + $this->partialStub('stackerName=' . $stackerName . ',value[]=' . gettype($value)); + } + + /** + * Get last value from named stacker + * + * @param $stackerName Name of the stack + * @return $value Value of last added value + * @throws NoStackerException If the named stacker was not found + * @throws EmptyStackerException If the named stacker is empty + */ + protected function getLastValue ($stackerName) { + // Is the stack not yet initialized or full? + if (!$this->isStackInitialized($stackerName)) { + // Throw an exception + throw new NoStackerException(array($this, $stackerName), self::EXCEPTION_NO_STACKER_FOUND); + } elseif ($this->isStackEmpty($stackerName)) { + // Throw an exception + throw new EmptyStackerException(array($this, $stackerName), self::EXCEPTION_STACKER_IS_EMPTY); + } + + // Now get the last value + $this->partialStub('stackerName=' . $stackerName); + $value = NULL; + + // Return it + return $value; + } + + /** + * Get first value from named stacker + * + * @param $stackerName Name of the stack + * @return $value Value of last added value + * @throws NoStackerException If the named stacker was not found + * @throws EmptyStackerException If the named stacker is empty + */ + protected function getFirstValue ($stackerName) { + // Is the stack not yet initialized or full? + if (!$this->isStackInitialized($stackerName)) { + // Throw an exception + throw new NoStackerException(array($this, $stackerName), self::EXCEPTION_NO_STACKER_FOUND); + } elseif ($this->isStackEmpty($stackerName)) { + // Throw an exception + throw new EmptyStackerException(array($this, $stackerName), self::EXCEPTION_STACKER_IS_EMPTY); + } + + // Now get the first value + $this->partialStub('stackerName=' . $stackerName); + $value = NULL; + + // Return it + return $value; + } + + /** + * "Pops" last entry from stack + * + * @param $stackerName Name of the stack + * @return $value Value "poped" from array + * @throws NoStackerException If the named stacker was not found + * @throws EmptyStackerException If the named stacker is empty + */ + protected function popLast ($stackerName) { + // Is the stack not yet initialized or full? + if (!$this->isStackInitialized($stackerName)) { + // Throw an exception + throw new NoStackerException(array($this, $stackerName), self::EXCEPTION_NO_STACKER_FOUND); + } elseif ($this->isStackEmpty($stackerName)) { + // Throw an exception + throw new EmptyStackerException(array($this, $stackerName), self::EXCEPTION_STACKER_IS_EMPTY); + } + + // Now, remove the last entry, we don't care about the return value here, see elseif() block above + $this->partialStub('stackerName=' . $stackerName); + return NULL; + } + + /** + * "Pops" first entry from stack + * + * @param $stackerName Name of the stack + * @return $value Value "shifted" from array + * @throws NoStackerException If the named stacker was not found + * @throws EmptyStackerException If the named stacker is empty + */ + protected function popFirst ($stackerName) { + // Is the stack not yet initialized or full? + if (!$this->isStackInitialized($stackerName)) { + // Throw an exception + throw new NoStackerException(array($this, $stackerName), self::EXCEPTION_NO_STACKER_FOUND); + } elseif ($this->isStackEmpty($stackerName)) { + // Throw an exception + throw new EmptyStackerException(array($this, $stackerName), self::EXCEPTION_STACKER_IS_EMPTY); + } + + // Now, remove the last entry, we don't care about the return value here, see elseif() block above + $this->partialStub('stackerName=' . $stackerName); + return NULL; + } +} + +// [EOF] +?> diff --git a/inc/classes/main/stacker/file/fifo/.htaccess b/inc/classes/main/stacker/file/fifo/.htaccess new file mode 100644 index 00000000..3a428827 --- /dev/null +++ b/inc/classes/main/stacker/file/fifo/.htaccess @@ -0,0 +1 @@ +Deny from all diff --git a/inc/classes/main/stacker/file/fifo/class_FiFoFileStack.php b/inc/classes/main/stacker/file/fifo/class_FiFoFileStack.php new file mode 100644 index 00000000..e7774a0f --- /dev/null +++ b/inc/classes/main/stacker/file/fifo/class_FiFoFileStack.php @@ -0,0 +1,109 @@ + + * @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 StackableFile { + /** + * 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->initFileStack($fileName); + + // Return the prepared instance + return $stackInstance; + } + + /** + * Pushs a value on a named stacker + * + * @param $stackerName Name of the stack + * @param $value Value to push on it + * @return void + * @throws StackerFullException If the stack is full + */ + public function pushNamed ($stackerName, $value) { + $this->partialStub('stackerName=' . $stackerName . ',value[' . gettype($value) . ']=' . $value); + } + + /** + * 'Pops' a value from a named stacker + * + * @param $stackerName Name of the stack + * @return void + * @throws NoStackerException If the named stacker was not found + * @throws EmptyStackerException If the named stacker is empty + */ + public function popNamed ($stackerName) { + $this->partialStub('stackerName=' . $stackerName); + } + + /** + * Get value from named stacker + * + * @param $stackerName Name of the stack + * @return $value Value of last added value + * @throws NoStackerException If the named stacker was not found + * @throws EmptyStackerException If the named stacker is empty + */ + public function getNamed ($stackerName) { + $this->partialStub('stackerName=' . $stackerName); + } + + /** + * Seeks to given position + * + * @param $seekPosition Seek position in file + * @return void + */ + public function seek ($seekPosition) { + $this->partialStub('seekPosition=' . $seekPosition); + } + + /** + * Size of file stack + * + * @return $size Size (in bytes) of file + */ + public function size () { + $this->partialStub(); + } +} + +// [EOF] +?> diff --git a/inc/classes/main/stacker/file_stack/.htaccess b/inc/classes/main/stacker/file_stack/.htaccess deleted file mode 100644 index 3a428827..00000000 --- a/inc/classes/main/stacker/file_stack/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Deny from all diff --git a/inc/classes/main/stacker/file_stack/class_ b/inc/classes/main/stacker/file_stack/class_ deleted file mode 100644 index 217eacfe..00000000 --- a/inc/classes/main/stacker/file_stack/class_ +++ /dev/null @@ -1,90 +0,0 @@ - - * @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 ???FileStack 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 create???FileStack ($fileName) { - // Get new instance - $stackInstance = new ???FileStack(); - - // Init this stack - $stackInstance->initStack($fileName); - - // Return the prepared instance - return $stackInstance; - } - - /** - * Pushs a value on a named stacker - * - * @param $stackerName Name of the stack - * @param $value Value to push on it - * @return void - * @throws StackerFullException If the stack is full - */ - public function pushNamed ($stackerName, $value) { - $this->partialStub('stackerName=' . $stackerName . ',value[' . gettype($value) . ']=' . $value); - } - - /** - * 'Pops' a value from a named stacker - * - * @param $stackerName Name of the stack - * @return void - * @throws NoStackerException If the named stacker was not found - * @throws EmptyStackerException If the named stacker is empty - */ - public function popNamed ($stackerName) { - $this->partialStub('stackerName=' . $stackerName); - } - - /** - * Get value from named stacker - * - * @param $stackerName Name of the stack - * @return $value Value of last added value - * @throws NoStackerException If the named stacker was not found - * @throws EmptyStackerException If the named stacker is empty - */ - public function getNamed ($stackerName) { - $this->partialStub('stackerName=' . $stackerName); - } -} - -// [EOF] -?> diff --git a/inc/classes/main/stacker/file_stack/class_BaseFileStack.php b/inc/classes/main/stacker/file_stack/class_BaseFileStack.php deleted file mode 100644 index 56590510..00000000 --- a/inc/classes/main/stacker/file_stack/class_BaseFileStack.php +++ /dev/null @@ -1,254 +0,0 @@ - - * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 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 BaseFileStack extends BaseStacker { - /** - * Magic for this stack - */ - const STACK_MAGIC = 'STACKv0.1'; - - /** - * Separator magic->count - */ - const SEPARATOR_MAGIC_COUNT = 0x00; - - /** - * Separator position->entries - */ - const SEPARATOR_SEEK_POS_ENTRIES = 0xff; - - /** - * Separator hash->name - */ - const SEPARATOR_HASH_NAME = 0x01; - - /** - * Protected constructor - * - * @param $className Name of the class - * @return void - */ - protected function __construct ($className) { - // Call parent constructor - parent::__construct($className); - } - - /** - * Initializes this file-based stack. - * - * @param $fileName File name of this stack - * @return void - */ - protected function initFileStack ($fileName) { - // Get a file i/o pointer instance - $pointerInstance = ObjectFactory::createObjectByConfiguredName('file_raw_input_output_class', array($fileName)); - - // Get iterator instance - $iteratorInstance = ObjectFactory::createObjectByConfiguredName('file_io_iterator_class', array($pointerInstance)); - - // Is the instance implementing the right interface? - assert($iteratorInstance instanceof SeekableWritableFileIterator); - - // Set iterator here - $this->setIteratorInstance($iteratorInstance); - } - - /** - * Initializes given stacker - * - * @param $stackerName Name of the stack - * @param $forceReInit Force re-initialization - * @return void - * @throws AlreadyInitializedStackerException If the stack is already initialized - */ - public function initStack ($stackerName, $forceReInit = FALSE) { - // Is the stack already initialized? - if (($forceReInit === FALSE) && ($this->isStackInitialized($stackerName))) { - // Then throw the exception - throw new AlreadyInitializedStackerException(array($this, $stackerName, $forceReInit), self::EXCEPTION_STACKER_ALREADY_INITIALIZED); - } // END - if - - // Initialize the given stack - $this->partialStub('stackerName=' . $stackerName . ',forceReInit=' . intval($forceReInit)); - } - - /** - * Checks whether the given stack is initialized (set in array $stackers) - * - * @param $stackerName Name of the stack - * @return $isInitialized Whether the stack is initialized - */ - public function isStackInitialized ($stackerName) { - // Is is there? - $this->partialStub('stackerName=' . $stackerName); - $isInitialized = TRUE; - - // Return result - return $isInitialized; - } - - /** - * Getter for size of given stack (array count) - * - * @param $stackerName Name of the stack - * @return $count Size of stack (array count) - * @throws NoStackerException If given stack is missing - */ - public function getStackCount ($stackerName) { - // Is the stack not yet initialized? - if (!$this->isStackInitialized($stackerName)) { - // Throw an exception - throw new NoStackerException(array($this, $stackerName), self::EXCEPTION_NO_STACKER_FOUND); - } // END - if - - // Now, count the array of entries - $this->partialStub('stackerName=' . $stackerName); - $count = 0; - - // Return result - return $count; - } - - /** - * Adds a value to given stack - * - * @param $stackerName Name of the stack - * @param $value Value to add to this stacker - * @return void - * @throws FullStackerException Thrown if the stack is full - */ - protected function addValue ($stackerName, $value) { - // Is the stack not yet initialized or full? - if (!$this->isStackInitialized($stackerName)) { - // Then do it here - $this->initStack($stackerName); - } elseif ($this->isStackFull($stackerName)) { - // Stacker is full - throw new FullStackerException(array($this, $stackerName, $value), self::EXCEPTION_STACKER_IS_FULL); - } - - // Now add the value to the stack - $this->partialStub('stackerName=' . $stackerName . ',value[]=' . gettype($value)); - } - - /** - * Get last value from named stacker - * - * @param $stackerName Name of the stack - * @return $value Value of last added value - * @throws NoStackerException If the named stacker was not found - * @throws EmptyStackerException If the named stacker is empty - */ - protected function getLastValue ($stackerName) { - // Is the stack not yet initialized or full? - if (!$this->isStackInitialized($stackerName)) { - // Throw an exception - throw new NoStackerException(array($this, $stackerName), self::EXCEPTION_NO_STACKER_FOUND); - } elseif ($this->isStackEmpty($stackerName)) { - // Throw an exception - throw new EmptyStackerException(array($this, $stackerName), self::EXCEPTION_STACKER_IS_EMPTY); - } - - // Now get the last value - $this->partialStub('stackerName=' . $stackerName); - $value = NULL; - - // Return it - return $value; - } - - /** - * Get first value from named stacker - * - * @param $stackerName Name of the stack - * @return $value Value of last added value - * @throws NoStackerException If the named stacker was not found - * @throws EmptyStackerException If the named stacker is empty - */ - protected function getFirstValue ($stackerName) { - // Is the stack not yet initialized or full? - if (!$this->isStackInitialized($stackerName)) { - // Throw an exception - throw new NoStackerException(array($this, $stackerName), self::EXCEPTION_NO_STACKER_FOUND); - } elseif ($this->isStackEmpty($stackerName)) { - // Throw an exception - throw new EmptyStackerException(array($this, $stackerName), self::EXCEPTION_STACKER_IS_EMPTY); - } - - // Now get the first value - $this->partialStub('stackerName=' . $stackerName); - $value = NULL; - - // Return it - return $value; - } - - /** - * "Pops" last entry from stack - * - * @param $stackerName Name of the stack - * @return $value Value "poped" from array - * @throws NoStackerException If the named stacker was not found - * @throws EmptyStackerException If the named stacker is empty - */ - protected function popLast ($stackerName) { - // Is the stack not yet initialized or full? - if (!$this->isStackInitialized($stackerName)) { - // Throw an exception - throw new NoStackerException(array($this, $stackerName), self::EXCEPTION_NO_STACKER_FOUND); - } elseif ($this->isStackEmpty($stackerName)) { - // Throw an exception - throw new EmptyStackerException(array($this, $stackerName), self::EXCEPTION_STACKER_IS_EMPTY); - } - - // Now, remove the last entry, we don't care about the return value here, see elseif() block above - $this->partialStub('stackerName=' . $stackerName); - return NULL; - } - - /** - * "Pops" first entry from stack - * - * @param $stackerName Name of the stack - * @return $value Value "shifted" from array - * @throws NoStackerException If the named stacker was not found - * @throws EmptyStackerException If the named stacker is empty - */ - protected function popFirst ($stackerName) { - // Is the stack not yet initialized or full? - if (!$this->isStackInitialized($stackerName)) { - // Throw an exception - throw new NoStackerException(array($this, $stackerName), self::EXCEPTION_NO_STACKER_FOUND); - } elseif ($this->isStackEmpty($stackerName)) { - // Throw an exception - throw new EmptyStackerException(array($this, $stackerName), self::EXCEPTION_STACKER_IS_EMPTY); - } - - // Now, remove the last entry, we don't care about the return value here, see elseif() block above - $this->partialStub('stackerName=' . $stackerName); - return NULL; - } -} - -// [EOF] -?> diff --git a/inc/classes/main/stacker/file_stack/fifo/.htaccess b/inc/classes/main/stacker/file_stack/fifo/.htaccess deleted file mode 100644 index 3a428827..00000000 --- a/inc/classes/main/stacker/file_stack/fifo/.htaccess +++ /dev/null @@ -1 +0,0 @@ -Deny from all diff --git a/inc/classes/main/stacker/file_stack/fifo/class_FiFoFileStack.php b/inc/classes/main/stacker/file_stack/fifo/class_FiFoFileStack.php deleted file mode 100644 index 201bb84e..00000000 --- a/inc/classes/main/stacker/file_stack/fifo/class_FiFoFileStack.php +++ /dev/null @@ -1,90 +0,0 @@ - - * @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->initFileStack($fileName); - - // Return the prepared instance - return $stackInstance; - } - - /** - * Pushs a value on a named stacker - * - * @param $stackerName Name of the stack - * @param $value Value to push on it - * @return void - * @throws StackerFullException If the stack is full - */ - public function pushNamed ($stackerName, $value) { - $this->partialStub('stackerName=' . $stackerName . ',value[' . gettype($value) . ']=' . $value); - } - - /** - * 'Pops' a value from a named stacker - * - * @param $stackerName Name of the stack - * @return void - * @throws NoStackerException If the named stacker was not found - * @throws EmptyStackerException If the named stacker is empty - */ - public function popNamed ($stackerName) { - $this->partialStub('stackerName=' . $stackerName); - } - - /** - * Get value from named stacker - * - * @param $stackerName Name of the stack - * @return $value Value of last added value - * @throws NoStackerException If the named stacker was not found - * @throws EmptyStackerException If the named stacker is empty - */ - public function getNamed ($stackerName) { - $this->partialStub('stackerName=' . $stackerName); - } -} - -// [EOF] -?>