X-Git-Url: https://git.mxchange.org/?p=core.git;a=blobdiff_plain;f=inc%2Fclasses%2Fmain%2Ffile_directories%2Fdirectory%2Fclass_FrameworkDirectoryPointer.php;h=42380fd142469c9834e39a3abf9878f167383e90;hp=a267c63f075eb6d0f6174aa88bb5808754e32ee2;hb=d7c285e7acc5b68b4fdffe76011d8c4c28aef09d;hpb=e6352b71e923a760d626d6fd32f6223e4c8740fd diff --git a/inc/classes/main/file_directories/directory/class_FrameworkDirectoryPointer.php b/inc/classes/main/file_directories/directory/class_FrameworkDirectoryPointer.php index a267c63f..42380fd1 100644 --- a/inc/classes/main/file_directories/directory/class_FrameworkDirectoryPointer.php +++ b/inc/classes/main/file_directories/directory/class_FrameworkDirectoryPointer.php @@ -4,7 +4,7 @@ * * @author Roland Haeder * @version 0.0.0 - * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2013 Core Developer Team + * @copyright Copyright (c) 2007, 2008 Roland Haeder, 2009 - 2015 Core Developer Team * @license GNU GPL 3.0 or any newer version * @link http://www.shipsimu.org * @@ -21,7 +21,7 @@ * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ -class FrameworkDirectoryPointer extends BaseFrameworkSystem { +class FrameworkDirectoryPointer extends BaseFrameworkSystem implements FrameworkDirectory { /** * The current path we are working in */ @@ -30,7 +30,7 @@ class FrameworkDirectoryPointer extends BaseFrameworkSystem { /** * The directory iterator instance */ - private $directoryInstance = NULL; + private $iteratorInstance = NULL; /** * Protected constructor @@ -45,7 +45,7 @@ class FrameworkDirectoryPointer extends BaseFrameworkSystem { */ public function __destruct() { // Is there a resource pointer? Then we have to close the directory here! - if ($this->getDirectoryInstance() instanceof DirectoryIterator) { + if ($this->getDirectoryIteratorInstance() instanceof DirectoryIterator) { // Try to close a directory $this->closeDirectory(); } // END - if @@ -103,13 +103,17 @@ class FrameworkDirectoryPointer extends BaseFrameworkSystem { $pointerInstance = new FrameworkDirectoryPointer(); // Get an iterator for the directory - $directoryInstance = new DirectoryIterator($pathName); + $iteratorInstance = new DirectoryIterator($pathName); + + // ... and rewind back + $iteratorInstance->rewind(); // Set directory pointer and path name - $pointerInstance->setDirectoryInstance($directoryInstance); + $pointerInstance->setDirectoryIteratorInstance($iteratorInstance); $pointerInstance->setPathName($pathName); // Return the instance + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DIRECTORY[' . __METHOD__ . ':' . __LINE__ . ']: Opened pathName=' . $pathName . ' - EXIT!'); return $pointerInstance; } @@ -119,22 +123,19 @@ class FrameworkDirectoryPointer extends BaseFrameworkSystem { * @return $currentEntry Current entry from encapsulated iterator */ public function readRawDirectory () { + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DIRECTORY[' . __METHOD__ . ':' . __LINE__ . '] - CALLED!'); + // Can the next entry be read? - assert($this->getDirectoryInstance()->valid()); + assert($this->getDirectoryIteratorInstance()->valid()); // Default is FALSE $currentEntry = FALSE; - // Is it a dot directory? - if (!$this->getDirectoryInstance()->isDot()) { - // Read data from the directory pointer and return it - $currentEntry = $this->getDirectoryInstance()->current(); - } // END - if - - // Advance to next entry - $this->getDirectoryInstance()->next(); + // Read data from the directory pointer and return it + $currentEntry = $this->getDirectoryIteratorInstance()->current(); // Return found entry + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DIRECTORY[' . __METHOD__ . ':' . __LINE__ . ']: currentEntry[]=' . gettype($currentEntry) . ' - EXIT!'); return $currentEntry; } @@ -150,7 +151,10 @@ class FrameworkDirectoryPointer extends BaseFrameworkSystem { // No exception given, so read all files and directories, but not recursive self::createDebugInstance(__CLASS__)->debugOutput('DIRECTORY[' . __METHOD__ . ':' . __LINE__ . ']: No exceptions given, please use readRawDirectory() instead!'); return $this->readRawDirectory(); - } // END - if + } elseif (!$this->getDirectoryIteratorInstance()->valid()) { + // No more left to read + return NULL; + } // Init raw line $rawLine = NULL; @@ -167,12 +171,18 @@ class FrameworkDirectoryPointer extends BaseFrameworkSystem { // Is it not excluded? if (in_array($rawLine, $except)) { + // To next entry + $this->getDirectoryIteratorInstance()->next(); + // Exclude this part $rawLine = $this->readDirectoryExcept($except); //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DIRECTORY[' . __METHOD__ . ':' . __LINE__ . ']: rawline[' . gettype($rawLine) . ']=' . $rawLine . ' - Recursive call!'); } // END - if } // END - if + // To next entry + $this->getDirectoryIteratorInstance()->next(); + // Return read line //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput('DIRECTORY[' . __METHOD__ . ':' . __LINE__ . ']: rawLine[' . gettype($rawLine) . ']=' . $rawLine); return $rawLine; @@ -186,28 +196,41 @@ class FrameworkDirectoryPointer extends BaseFrameworkSystem { */ public function closeDirectory () { // Close the directory by unsetting it - $this->setDirectoryInstance(NULL); + $this->unsetDirectoryIteratorInstance(); $this->setPathName(''); } /** * Setter for the directory pointer * - * @param $directoryInstance An instanceof a DirectoryIterator class or NULL to unset ("close") it. + * @param $iteratorInstance An instanceof a DirectoryIterator class * @return void */ - protected final function setDirectoryInstance (DirectoryIterator $directoryInstance = NULL) { - // Set instance (or NULL) - $this->directoryInstance = $directoryInstance; + protected final function setDirectoryIteratorInstance (DirectoryIterator $iteratorInstance) { + // Set instance + $this->iteratorInstance = $iteratorInstance; } /** * Getter for the directory pointer * - * @return $directoryInstance The directory pointer which shall be a valid directory resource + * @return $iteratorInstance The directory pointer which shall be a valid directory resource + */ + public final function getDirectoryIteratorInstance () { + return $this->iteratorInstance; + } + + /** + * Remove directory iterator instance (effectively closing it) by setting + * it to NULL. This will trigger a call on the destructor which will then + * "close" the iterator. + * + * @param $iteratorInstance An instanceof a DirectoryIterator class + * @return void */ - public final function getDirectoryInstance () { - return $this->directoryInstance; + protected final function unsetDirectoryIteratorInstance (e) { + // "Unset" the instance + $this->iteratorInstance = NULL; } /** @@ -216,7 +239,7 @@ class FrameworkDirectoryPointer extends BaseFrameworkSystem { * @param $pathName The new path name * @return void */ - public final function setPathName ($pathName) { + protected final function setPathName ($pathName) { $pathName = (string) $pathName; $this->pathName = $pathName; }