From 6b19898fa5c1cc332e83100ea41f55073ec20a8a Mon Sep 17 00:00:00 2001
From: Roland Haeder <roland@mxchange.org>
Date: Wed, 21 May 2014 21:35:49 +0200
Subject: [PATCH] InputOutputPointer is the right interface.
MIME-Version: 1.0
Content-Type: text/plain; charset=utf8
Content-Transfer-Encoding: 8bit

Signed-off-by: Roland Häder <roland@mxchange.org>
---
 .../pointer/io/class_InputOutputPointer.php   |  9 --
 .../main/file_directories/class_BaseFile.php  | 47 +++-------
 .../index/class_IndexFile.php                 | 86 ++++++++++++++++++-
 .../stack/class_StackFile.php                 | 86 ++++++++++++++++++-
 .../main/stacker/file/class_BaseFileStack.php |  2 +-
 5 files changed, 183 insertions(+), 47 deletions(-)

diff --git a/inc/classes/interfaces/io/pointer/io/class_InputOutputPointer.php b/inc/classes/interfaces/io/pointer/io/class_InputOutputPointer.php
index 6dc483a3..8daa22c7 100644
--- a/inc/classes/interfaces/io/pointer/io/class_InputOutputPointer.php
+++ b/inc/classes/interfaces/io/pointer/io/class_InputOutputPointer.php
@@ -28,15 +28,6 @@ interface InputOutputPointer extends InputPointer, OutputPointer {
 	 * @return	$status 	Status of this operation
 	 */
 	function rewind ();
-
-	/**
-	 * Seeks to given position
-	 *
-	 * @param	$seekPosition	Seek position in file
-	 * @param	$whence			"Seek mode" (see http://de.php.net/fseek)
-	 * @return	$tatus			Status of this operation
-	 */
-	function seek ($seekPosition, $whence = SEEK_SET);
 }
 
 // [EOF]
diff --git a/inc/classes/main/file_directories/class_BaseFile.php b/inc/classes/main/file_directories/class_BaseFile.php
index bcc61661..a2a3432a 100644
--- a/inc/classes/main/file_directories/class_BaseFile.php
+++ b/inc/classes/main/file_directories/class_BaseFile.php
@@ -51,6 +51,20 @@ class BaseFile extends BaseFrameworkSystem {
 		parent::__destruct();
 	}
 
+	/**
+	 * Initializes this file class
+	 *
+	 * @param	$fileName	Name of this abstract file
+	 * @return	void
+	 */
+	protected function initFile ($fileName) {
+		// Get a file i/o pointer instance
+		$pointerInstance = ObjectFactory::createObjectByConfiguredName('file_raw_input_output_class', array($fileName));
+
+		// ... and set it here
+		$this->setPointerInstance($pointerInstance);
+	}
+
 	/**
 	 * Close a file source and set it's instance to null and the file name
 	 * to empty
@@ -84,39 +98,6 @@ class BaseFile extends BaseFrameworkSystem {
 	public final function getFileName () {
 		return $this->fileName;
 	}
-
-	/**
-	 * Determines seek position
-	 *
-	 * @return	$seekPosition	Current seek position
-	 * @todo	0% done
-	 */
-	public final function determineSeekPosition () {
-		$this->partialStub('Unfinished method.');
-	}
-
-	/**
-	 * Seek to given offset (default) or other possibilities as fseek() gives.
-	 *
-	 * @param	$offset		Offset to seek to (or used as "base" for other seeks)
-	 * @param	$whence		Added to offset (default: only use offset to seek to)
-	 * @return	$status		Status of file seek: 0 = success, -1 = failed
-	 * @todo	0% done
-	 */
-	public function seek ($offset, $whence = SEEK_SET) {
-		$this->partialStub('Unfinished method.');
-	}
-
-	/**
-	 * Size of this file
-	 *
-	 * @return	$size	Size (in bytes) of file
-	 * @todo	Handle seekStatus
-	 * @todo	0% done
-	 */
-	public function size () {
-		$this->partialStub('Unfinished method.');
-	}
 }
 
 // [EOF]
diff --git a/inc/classes/main/file_directories/index/class_IndexFile.php b/inc/classes/main/file_directories/index/class_IndexFile.php
index 2859fd84..c65bed4d 100644
--- a/inc/classes/main/file_directories/index/class_IndexFile.php
+++ b/inc/classes/main/file_directories/index/class_IndexFile.php
@@ -21,7 +21,7 @@
  * 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 IndexFile extends BaseFile implements SeekableWritableFileIterator {
+class IndexFile extends BaseFile implements InputOutputPointer {
 	/**
 	 * Protected constructor
 	 *
@@ -35,15 +35,97 @@ class IndexFile extends BaseFile implements SeekableWritableFileIterator {
 	/**
 	 * Creates an instance of this File class and prepares it for usage
 	 *
+	 * @param	$fileName		Name of the index file
 	 * @return	$fileInstance	An instance of this File class
 	 */
-	public final static function createIndexFile () {
+	public final static function createIndexFile ($fileName) {
 		// Get a new instance
 		$fileInstance = new IndexFile();
 
+		// Init this abstract file
+		$fileInstance->initFile($fileName);
+
 		// Return the prepared instance
 		return $fileInstance;
 	}
+
+	/**
+	 * Determines seek position
+	 *
+	 * @return	$seekPosition	Current seek position
+	 * @todo	0% done
+	 */
+	public final function determineSeekPosition () {
+		$this->partialStub('Unfinished method.');
+	}
+
+	/**
+	 * Seek to given offset (default) or other possibilities as fseek() gives.
+	 *
+	 * @param	$offset		Offset to seek to (or used as "base" for other seeks)
+	 * @param	$whence		Added to offset (default: only use offset to seek to)
+	 * @return	$status		Status of file seek: 0 = success, -1 = failed
+	 * @todo	0% done
+	 */
+	public function seek ($offset, $whence = SEEK_SET) {
+		$this->partialStub('Unfinished method.');
+	}
+
+	/**
+	 * Size of this file
+	 *
+	 * @return	$size	Size (in bytes) of file
+	 * @todo	Handle seekStatus
+	 * @todo	0% done
+	 */
+	public function size () {
+		$this->partialStub('Unfinished method.');
+	}
+
+	/**
+	 * Read data a file pointer
+	 *
+	 * @return	mixed	The result of fread()
+	 * @throws	NullPointerException	If the file pointer instance
+	 *									is not set by setPointer()
+	 * @throws	InvalidResourceException	If there is being set
+	 */
+	public function readFromFile () {
+		$this->partialStub('Unfinished method.');
+	}
+
+	/**
+	 * Reads given amount of bytes from file.
+	 *
+	 * @param	$bytes	Amount of bytes to read
+	 * @return	$data	Data read from file
+	 */
+	public function read ($bytes) {
+		$this->partialStub('bytes=' . $bytes);
+	}
+
+	/**
+	 * Write data to a file pointer
+	 *
+	 * @param	$dataStream		The data stream we shall write to the file
+	 * @return	mixed			Number of writes bytes or FALSE on error
+	 * @throws	NullPointerException	If the file pointer instance
+	 *									is not set by setPointer()
+	 * @throws	InvalidResourceException	If there is being set
+	 *											an invalid file resource
+	 */
+	public function writeToFile ($dataStream) {
+		$this->partialStub('dataStream=' . $dataStream);
+	}
+
+	/**
+	 * Rewinds to the beginning of the file
+	 *
+	 * @return	$status 	Status of this operation
+	 */
+	public function rewind () {
+		$this->partialStub('Unfinished method.');
+	}
 }
 
 // [EOF]
diff --git a/inc/classes/main/file_directories/stack/class_StackFile.php b/inc/classes/main/file_directories/stack/class_StackFile.php
index 23ffe842..138be491 100644
--- a/inc/classes/main/file_directories/stack/class_StackFile.php
+++ b/inc/classes/main/file_directories/stack/class_StackFile.php
@@ -21,7 +21,7 @@
  * 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 StackFile extends BaseFile implements SeekableWritableFileIterator {
+class StackFile extends BaseFile implements InputOutputPointer {
 	/**
 	 * Protected constructor
 	 *
@@ -35,15 +35,97 @@ class StackFile extends BaseFile implements SeekableWritableFileIterator {
 	/**
 	 * Creates an instance of this File class and prepares it for usage
 	 *
+	 * @param	$fileName		Name of the stack file
 	 * @return	$fileInstance	An instance of this File class
 	 */
-	public final static function createStackFile () {
+	public final static function createStackFile ($fileName) {
 		// Get a new instance
 		$fileInstance = new StackFile();
 
+		// Init this abstract file
+		$fileInstance->initFile($fileName);
+
 		// Return the prepared instance
 		return $fileInstance;
 	}
+
+	/**
+	 * Determines seek position
+	 *
+	 * @return	$seekPosition	Current seek position
+	 * @todo	0% done
+	 */
+	public final function determineSeekPosition () {
+		$this->partialStub('Unfinished method.');
+	}
+
+	/**
+	 * Seek to given offset (default) or other possibilities as fseek() gives.
+	 *
+	 * @param	$offset		Offset to seek to (or used as "base" for other seeks)
+	 * @param	$whence		Added to offset (default: only use offset to seek to)
+	 * @return	$status		Status of file seek: 0 = success, -1 = failed
+	 * @todo	0% done
+	 */
+	public function seek ($offset, $whence = SEEK_SET) {
+		$this->partialStub('Unfinished method.');
+	}
+
+	/**
+	 * Size of this file
+	 *
+	 * @return	$size	Size (in bytes) of file
+	 * @todo	Handle seekStatus
+	 * @todo	0% done
+	 */
+	public function size () {
+		$this->partialStub('Unfinished method.');
+	}
+
+	/**
+	 * Read data a file pointer
+	 *
+	 * @return	mixed	The result of fread()
+	 * @throws	NullPointerException	If the file pointer instance
+	 *									is not set by setPointer()
+	 * @throws	InvalidResourceException	If there is being set
+	 */
+	public function readFromFile () {
+		$this->partialStub('Unfinished method.');
+	}
+
+	/**
+	 * Reads given amount of bytes from file.
+	 *
+	 * @param	$bytes	Amount of bytes to read
+	 * @return	$data	Data read from file
+	 */
+	public function read ($bytes) {
+		$this->partialStub('bytes=' . $bytes);
+	}
+
+	/**
+	 * Write data to a file pointer
+	 *
+	 * @param	$dataStream		The data stream we shall write to the file
+	 * @return	mixed			Number of writes bytes or FALSE on error
+	 * @throws	NullPointerException	If the file pointer instance
+	 *									is not set by setPointer()
+	 * @throws	InvalidResourceException	If there is being set
+	 *											an invalid file resource
+	 */
+	public function writeToFile ($dataStream) {
+		$this->partialStub('dataStream=' . $dataStream);
+	}
+
+	/**
+	 * Rewinds to the beginning of the file
+	 *
+	 * @return	$status 	Status of this operation
+	 */
+	public function rewind () {
+		$this->partialStub('Unfinished method.');
+	}
 }
 
 // [EOF]
diff --git a/inc/classes/main/stacker/file/class_BaseFileStack.php b/inc/classes/main/stacker/file/class_BaseFileStack.php
index 4729486a..53afecbd 100644
--- a/inc/classes/main/stacker/file/class_BaseFileStack.php
+++ b/inc/classes/main/stacker/file/class_BaseFileStack.php
@@ -201,7 +201,7 @@ class BaseFileStack extends BaseStacker {
 	 * @todo	Currently the stack file is not cached, please implement a memory-handling class and if enough RAM is found, cache the whole stack file.
 	 */
 	protected function initFileStack ($fileName, $type) {
-		// Get a file i/o pointer instance for stack file
+		// Get a stack file instance
 		$fileInstance = ObjectFactory::createObjectByConfiguredName('stack_file_class', array($fileName));
 
 		// Get iterator instance
-- 
2.39.5