X-Git-Url: https://git.mxchange.org/?p=core.git;a=blobdiff_plain;f=inc%2Fclasses%2Fmain%2Ffile_directories%2Fio%2Fclass_FrameworkFileInputOutputPointer.php;h=9781a00dfb8cad1d7ee0e99619c5a52c5b442f33;hp=b167fee3d363d409865c577e24500c5d2e9534d7;hb=fb4e49b9a966229ea8ce67998ec92d93f2551fbb;hpb=978c24260ea30de3b29d4436d707bdc67a8e9b9e diff --git a/inc/classes/main/file_directories/io/class_FrameworkFileInputOutputPointer.php b/inc/classes/main/file_directories/io/class_FrameworkFileInputOutputPointer.php index b167fee3..9781a00d 100644 --- a/inc/classes/main/file_directories/io/class_FrameworkFileInputOutputPointer.php +++ b/inc/classes/main/file_directories/io/class_FrameworkFileInputOutputPointer.php @@ -75,14 +75,17 @@ class FrameworkFileInputOutputPointer extends BaseFileIo implements InputOutputP } /** - * Read data a file pointer + * Validates file pointer and throws exceptions. This method does not return + * anything (not reliable) as this method checks the file pointer and on + * case of an error it throws an exception. If this method does not throw + * any exceptions, the file pointer seems to be fine. * - * @return mixed The result of fread() + * @return void * @throws NullPointerException If the file pointer instance * is not set by setPointer() * @throws InvalidResourceException If there is being set */ - public function readFromFile () { + private function validateFilePointer () { if (is_null($this->getPointer())) { // Pointer not initialized throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER); @@ -91,8 +94,20 @@ class FrameworkFileInputOutputPointer extends BaseFileIo implements InputOutputP throw new InvalidResourceException($this, self::EXCEPTION_INVALID_RESOURCE); } + // All fine here + } + + /** + * Read 1024 bytes data from a file pointer + * + * @return mixed The result of fread() + */ + public function readFromFile () { + // Validate the pointer + $this->validateFilePointer(); + // Read data from the file pointer and return it - return fread($this->getPointer(), 1024); + return $this->read(1024); } /** @@ -100,32 +115,41 @@ class FrameworkFileInputOutputPointer extends BaseFileIo implements InputOutputP * * @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) { - if (is_null($this->getPointer())) { - // Pointer not initialized - throw new NullPointerException($this, self::EXCEPTION_IS_NULL_POINTER); - } elseif (!is_resource($this->getPointer())) { - // Pointer is not a valid resource! - throw new InvalidResourceException($this, self::EXCEPTION_INVALID_RESOURCE); - } + // Validate the pointer + $this->validateFilePointer(); // Write data to the file pointer and return written bytes return fwrite($this->getPointer(), $dataStream, strlen($dataStream)); } + /** + * Writes at given position by seeking to it. + * + * @param $seekPosition Seek position in file + * @param $data Data to be written + * @return mixed Number of writes bytes or FALSE on error + */ + public function writeAtPosition ($seekPosition, $data) { + // First seek to it + $this->seek($seekPosition); + + // Then write the data at that position + return $this->writeToFile($data); + } + /** * Rewinds to the beginning of the file * - * @return void + * @return $status Status of this operation */ public function rewind () { + // Validate the pointer + $this->validateFilePointer(); + // Rewind the pointer - assert(rewind($this->getPointer()) === 1); + return rewind($this->getPointer()); } /** @@ -133,11 +157,96 @@ class FrameworkFileInputOutputPointer extends BaseFileIo implements InputOutputP * * @param $seekPosition Seek position in file * @param $whence "Seek mode" (see http://de.php.net/fseek) - * @return void + * @return $status Status of this operation */ public function seek ($seekPosition, $whence = SEEK_SET) { + // Validate the pointer + $this->validateFilePointer(); + // Move the file pointer - assert(fseek($this->getPointer(), $seekPosition, $whence) === 0); + return fseek($this->getPointer(), $seekPosition, $whence); + } + + /** + * Reads given amount of bytes from file. + * + * @param $bytes Amount of bytes to read + * @return $data Data read from file + */ + public function read ($bytes) { + // Validate the pointer + $this->validateFilePointer(); + + // Try to read given characters + $data = fread($this->getPointer(), $bytes); + + // Was this successfull? + assert(is_string($data)); + + // Then return it + return $data; + } + + /** + * Analyzes entries in index file. This will count all found (and valid) + * entries, mark invalid as damaged and count gaps ("fragmentation"). If + * only gaps are found, the file is considered as "virgin" (no entries). + * + * @return void + * @throws UnsupportedOperationException If this method is called + */ + public function analyzeFile () { + throw new UnsupportedOperationException(array($this, __FUNCTION__), self::EXCEPTION_UNSPPORTED_OPERATION); + } + + /** + * Advances to next "block" of bytes + * + * @return void + * @throws UnsupportedOperationException If this method is called + */ + public function next () { + throw new UnsupportedOperationException(array($this, __FUNCTION__), self::EXCEPTION_UNSPPORTED_OPERATION); + } + + /** + * 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 $isValid Whether the next entry is valid + * @throws UnsupportedOperationException If this method is called + */ + public function valid () { + throw new UnsupportedOperationException(array($this, __FUNCTION__), self::EXCEPTION_UNSPPORTED_OPERATION); + } + + /** + * Gets current seek position ("key"). + * + * @return $key Current key in iteration + * @throws UnsupportedOperationException If this method is called + */ + public function key () { + throw new UnsupportedOperationException(array($this, __FUNCTION__), self::EXCEPTION_UNSPPORTED_OPERATION); + } + + /** + * "Getter" for file size + * + * @return $fileSize Size of currently loaded file + */ + public function getFileSize () { + // Check if the pointer is still valid + $this->validateFilePointer(); + + // Get file's data + $fileData = fstat($this->getPointer()); + + // Make sure the required array key is there + assert(isset($fileData['size'])); + + // Return size + return $fileData['size']; } }