From 61315ecaf7950686ac7f407a2399d16ddb5db0ee Mon Sep 17 00:00:00 2001 From: Roland Haeder Date: Fri, 30 May 2014 22:39:34 +0200 Subject: [PATCH] Continued: - CalculatableBlock is the better interface as it narrows possible implemenations - Moved a lot stuff from BaseFrameworkSystem to BaseFile as this is the right place (encapsulated place, not generic place). MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Roland Häder --- .../main/class_BaseFrameworkSystem.php | 262 ----------------- .../main/file_directories/class_BaseFile.php | 264 +++++++++++++++++- 2 files changed, 263 insertions(+), 263 deletions(-) diff --git a/inc/classes/main/class_BaseFrameworkSystem.php b/inc/classes/main/class_BaseFrameworkSystem.php index bdfbbf7b..40ad97b1 100644 --- a/inc/classes/main/class_BaseFrameworkSystem.php +++ b/inc/classes/main/class_BaseFrameworkSystem.php @@ -23,51 +23,6 @@ * along with this program. If not, see . */ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { - /** - * Separator for header data - */ - const SEPARATOR_HEADER_DATA = 0x01; - - /** - * Separator header->entries - */ - const SEPARATOR_HEADER_ENTRIES = 0x02; - - /** - * Separator hash->name - */ - const SEPARATOR_HASH_NAME = 0x03; - - /** - * Separator entry->entry - */ - const SEPARATOR_ENTRIES = 0x04; - - /** - * Separator type->position - */ - const SEPARATOR_TYPE_POSITION = 0x05; - - /** - * Length of count - */ - const LENGTH_COUNT = 20; - - /** - * Length of position - */ - const LENGTH_POSITION = 20; - - /** - * Length of name - */ - const LENGTH_NAME = 10; - - /** - * Maximum length of entry type - */ - const LENGTH_TYPE = 20; - /** * The real class name */ @@ -258,41 +213,6 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ private $genericArray = array(); - /** - * Length of output from hash() - */ - private static $hashLength = NULL; - - /** - * Counter for total entries - */ - private $totalEntries = 0; - - /** - * Current seek position - */ - private $seekPosition = 0; - - /** - * Size of header - */ - private $headerSize = 0; - - /** - * File header - */ - private $header = array(); - - /** - * Seek positions for gaps ("fragmentation") - */ - private $gaps = array(); - - /** - * Seek positions for damaged entries (e.g. mismatching hash sum, ...) - */ - private $damagedEntries = array(); - /*********************** * Exception codes.... * ***********************/ @@ -2901,188 +2821,6 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // ... and return it return $translated; } - - /** - * Initializes counter for valid entries, arrays for damaged entries and - * an array for gap seek positions. If you call this method on your own, - * please re-analyze the file structure. So you are better to call - * analyzeFile() instead of this method. - * - * @return void - */ - protected function initCountersGapsArray () { - // Init counter and seek position - $this->setCounter(0); - $this->setSeekPosition(0); - - // Init arrays - $this->gaps = array(); - $this->damagedEntries = array(); - } - - /** - * Getter for total entries - * - * @return $totalEntries Total entries in this file - */ - protected final function getCounter () { - // Get it - return $this->totalEntries; - } - - /** - * Setter for total entries - * - * @param $totalEntries Total entries in this file - * @return void - */ - protected final function setCounter ($counter) { - // Set it - $this->totalEntries = $counter; - } - - /** - * Increment counter - * - * @return void - */ - protected final function incrementCounter () { - // Get it - $this->totalEntries++; - } - - /** - * Getter for header size - * - * @return $totalEntries Size of file header - */ - public final function getHeaderSize () { - // Get it - return $this->headerSize; - } - - /** - * Setter for header size - * - * @param $headerSize Size of file header - * @return void - */ - protected final function setHeaderSize ($headerSize) { - // Set it - $this->headerSize = $headerSize; - } - - /** - * Getter for header array - * - * @return $totalEntries Size of file header - */ - protected final function getHeade () { - // Get it - return $this->header; - } - - /** - * Setter for header - * - * @param $header Array for a file header - * @return void - */ - protected final function setHeader (array $header) { - // Set it - $this->header = $header; - } - - /** - * Getter for seek position - * - * @return $seekPosition Current seek position (stored here in object) - */ - protected final function getSeekPosition () { - // Get it - return $this->seekPosition; - } - - /** - * Setter for seek position - * - * @param $seekPosition Current seek position (stored here in object) - * @return void - */ - protected final function setSeekPosition ($seekPosition) { - // And set it - $this->seekPosition = $seekPosition; - } - - /** - * Updates seekPosition attribute from file to avoid to much access on file. - * - * @return void - */ - protected function updateSeekPosition () { - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__)); - - // Get key (= seek position) - $seekPosition = $this->getIteratorInstance()->key(); - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] Setting seekPosition=%s', __METHOD__, __LINE__, $seekPosition)); - - // And set it here - $this->setSeekPosition($seekPosition); - - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] EXIT!', __METHOD__, __LINE__)); - } - - /** - * Seeks to beginning of file, updates seek position in this object and - * flushes the header. - * - * @return void - */ - protected function rewineUpdateSeekPosition () { - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__)); - - // flushFileHeader must be callable - assert(is_callable(array($this, 'flushFileHeader'))); - - // Seek to beginning of file - $this->getIteratorInstance()->rewind(); - - // And update seek position ... - $this->updateSeekPosition(); - - // ... to write it back into the file - $this->flushFileHeader(); - - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] EXIT!!', __METHOD__, __LINE__)); - } - - /** - * Seeks to old position - * - * @return void - */ - protected function seekToOldPosition () { - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__)); - - // Seek to currently ("old") saved position - $this->getIteratorInstance()->seek($this->getSeekPosition()); - - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] EXIT!!', __METHOD__, __LINE__)); - } - - /** - * Checks whether the block separator has been found - * - * @param $str String to look in - * @return $isFound Whether the block separator has been found - */ - public static function isBlockSeparatorFound ($str) { - // Determine it - $isFound = (strpos($str, chr(self::SEPARATOR_ENTRIES)) !== FALSE); - - // Return result - return $isFound; - } } // [EOF] diff --git a/inc/classes/main/file_directories/class_BaseFile.php b/inc/classes/main/file_directories/class_BaseFile.php index f8d333b6..c96a4440 100644 --- a/inc/classes/main/file_directories/class_BaseFile.php +++ b/inc/classes/main/file_directories/class_BaseFile.php @@ -22,6 +22,86 @@ * along with this program. If not, see . */ class BaseFile extends BaseFrameworkSystem { + /** + * Separator for header data + */ + const SEPARATOR_HEADER_DATA = 0x01; + + /** + * Separator header->entries + */ + const SEPARATOR_HEADER_ENTRIES = 0x02; + + /** + * Separator hash->name + */ + const SEPARATOR_HASH_NAME = 0x03; + + /** + * Separator entry->entry + */ + const SEPARATOR_ENTRIES = 0x04; + + /** + * Separator type->position + */ + const SEPARATOR_TYPE_POSITION = 0x05; + + /** + * Length of count + */ + const LENGTH_COUNT = 20; + + /** + * Length of position + */ + const LENGTH_POSITION = 20; + + /** + * Length of name + */ + const LENGTH_NAME = 10; + + /** + * Maximum length of entry type + */ + const LENGTH_TYPE = 20; + + /** + * Length of output from hash() + */ + private static $hashLength = NULL; + + /** + * Counter for total entries + */ + private $totalEntries = 0; + + /** + * Current seek position + */ + private $seekPosition = 0; + + /** + * Size of header + */ + private $headerSize = 0; + + /** + * File header + */ + private $header = array(); + + /** + * Seek positions for gaps ("fragmentation") + */ + private $gaps = array(); + + /** + * Seek positions for damaged entries (e.g. mismatching hash sum, ...) + */ + private $damagedEntries = array(); + /** * The current file we are working in */ @@ -64,6 +144,188 @@ y * @return void parent::__destruct(); } + /** + * Initializes counter for valid entries, arrays for damaged entries and + * an array for gap seek positions. If you call this method on your own, + * please re-analyze the file structure. So you are better to call + * analyzeFile() instead of this method. + * + * @return void + */ + protected function initCountersGapsArray () { + // Init counter and seek position + $this->setCounter(0); + $this->setSeekPosition(0); + + // Init arrays + $this->gaps = array(); + $this->damagedEntries = array(); + } + + /** + * Getter for total entries + * + * @return $totalEntries Total entries in this file + */ + protected final function getCounter () { + // Get it + return $this->totalEntries; + } + + /** + * Setter for total entries + * + * @param $totalEntries Total entries in this file + * @return void + */ + protected final function setCounter ($counter) { + // Set it + $this->totalEntries = $counter; + } + + /** + * Increment counter + * + * @return void + */ + protected final function incrementCounter () { + // Get it + $this->totalEntries++; + } + + /** + * Getter for header size + * + * @return $totalEntries Size of file header + */ + public final function getHeaderSize () { + // Get it + return $this->headerSize; + } + + /** + * Setter for header size + * + * @param $headerSize Size of file header + * @return void + */ + protected final function setHeaderSize ($headerSize) { + // Set it + $this->headerSize = $headerSize; + } + + /** + * Getter for header array + * + * @return $totalEntries Size of file header + */ + protected final function getHeade () { + // Get it + return $this->header; + } + + /** + * Setter for header + * + * @param $header Array for a file header + * @return void + */ + protected final function setHeader (array $header) { + // Set it + $this->header = $header; + } + + /** + * Getter for seek position + * + * @return $seekPosition Current seek position (stored here in object) + */ + protected final function getSeekPosition () { + // Get it + return $this->seekPosition; + } + + /** + * Setter for seek position + * + * @param $seekPosition Current seek position (stored here in object) + * @return void + */ + protected final function setSeekPosition ($seekPosition) { + // And set it + $this->seekPosition = $seekPosition; + } + + /** + * Updates seekPosition attribute from file to avoid to much access on file. + * + * @return void + */ + protected function updateSeekPosition () { + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__)); + + // Get key (= seek position) + $seekPosition = $this->getIteratorInstance()->key(); + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] Setting seekPosition=%s', __METHOD__, __LINE__, $seekPosition)); + + // And set it here + $this->setSeekPosition($seekPosition); + + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] EXIT!', __METHOD__, __LINE__)); + } + + /** + * Seeks to beginning of file, updates seek position in this object and + * flushes the header. + * + * @return void + */ + protected function rewineUpdateSeekPosition () { + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__)); + + // flushFileHeader must be callable + assert(is_callable(array($this, 'flushFileHeader'))); + + // Seek to beginning of file + $this->getIteratorInstance()->rewind(); + + // And update seek position ... + $this->updateSeekPosition(); + + // ... to write it back into the file + $this->flushFileHeader(); + + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] EXIT!!', __METHOD__, __LINE__)); + } + + /** + * Seeks to old position + * + * @return void + */ + protected function seekToOldPosition () { + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__)); + + // Seek to currently ("old") saved position + $this->getIteratorInstance()->seek($this->getSeekPosition()); + + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] EXIT!!', __METHOD__, __LINE__)); + } + + /** + * Checks whether the block separator has been found + * + * @param $str String to look in + * @return $isFound Whether the block separator has been found + */ + public static function isBlockSeparatorFound ($str) { + // Determine it + $isFound = (strpos($str, chr(self::SEPARATOR_ENTRIES)) !== FALSE); + + // Return result + return $isFound; + } + /** * Getter for the file pointer * @@ -470,7 +732,7 @@ y * @return void } // END - if // Make sure the block instance is set - assert($this->getBlockInstance() instanceof Block); + assert($this->getBlockInstance() instanceof CalculatableBlock); // First calculate minimum block length $length = $this->getBlockInstance()->calculateMinimumBlockLength(); -- 2.30.2