Implemented rudely reading file header + commented out a lot noisy debug lines.
[core.git] / inc / classes / main / stacker / file / class_BaseFileStack.php
index ebe366a640ea92f0f15749d5b23fbba527cc24c8..94410d80385331dad1f1783be47a6efec92db347 100644 (file)
@@ -145,16 +145,16 @@ class BaseFileStack extends BaseStacker {
         * @return      void
         */
        private function updateSeekPosition () {
         * @return      void
         */
        private function updateSeekPosition () {
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__));
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__));
 
                // Get key (= seek position)
                $seekPosition = $this->getIteratorInstance()->key();
 
                // Get key (= seek position)
                $seekPosition = $this->getIteratorInstance()->key();
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] Setting seekPosition=%s', __METHOD__, __LINE__, $seekPosition));
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] Setting seekPosition=%s', __METHOD__, __LINE__, $seekPosition));
 
                // And set it here
                $this->setSeekPosition($seekPosition);
 
 
                // And set it here
                $this->setSeekPosition($seekPosition);
 
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] EXIT!', __METHOD__, __LINE__));
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] EXIT!', __METHOD__, __LINE__));
        }
 
        /**
        }
 
        /**
@@ -163,16 +163,23 @@ class BaseFileStack extends BaseStacker {
         * @return      void
         */
        private function readFileHeader () {
         * @return      void
         */
        private function readFileHeader () {
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__));
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__));
 
                // First rewind to beginning as the header sits at the beginning ...
                $this->getIteratorInstance()->rewind();
 
                // Then read it (see constructor for calculation)
                $data = $this->getIteratorInstance()->read($this->headerSize);
 
                // First rewind to beginning as the header sits at the beginning ...
                $this->getIteratorInstance()->rewind();
 
                // Then read it (see constructor for calculation)
                $data = $this->getIteratorInstance()->read($this->headerSize);
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] Read %d bytes (%d wanted).', __METHOD__, __LINE__, strlen($data), $this->headerSize));
+
+               // Have all requested bytes been read?
+               assert(strlen($data) == $this->headerSize);
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] Passed assert().', __METHOD__, __LINE__));
 
                // Last character must be the separator
 
                // Last character must be the separator
-               assert(substr($data, -1, 1) == self::SEPARATOR_HEADER_ENTRIES);
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] data(-1)=%s', __METHOD__, __LINE__, dechex(ord(substr($data, -1, 1)))));
+               assert(substr($data, -1, 1) == chr(self::SEPARATOR_HEADER_ENTRIES));
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] Passed assert().', __METHOD__, __LINE__));
 
                // Okay, then remove it
                $data = substr($data, 0, -1);
 
                // Okay, then remove it
                $data = substr($data, 0, -1);
@@ -187,23 +194,28 @@ class BaseFileStack extends BaseStacker {
                 * 1 => Total entries
                 * 2 => Current seek position
                 */
                 * 1 => Total entries
                 * 2 => Current seek position
                 */
-               $this->header = explode(self::SEPARATOR_HEADER_DATA, $data);
+               $this->header = explode(chr(self::SEPARATOR_HEADER_DATA), $data);
 
                // Check if the array has only 3 elements
 
                // Check if the array has only 3 elements
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] header(%d)=%s', __METHOD__, __LINE__, count($this->header), print_r($this->header, TRUE)));
                assert(count($this->header) == 3);
                assert(count($this->header) == 3);
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] Passed assert().', __METHOD__, __LINE__));
 
                // Check magic
                assert($this->header[0] == self::STACK_MAGIC);
 
                // Check magic
                assert($this->header[0] == self::STACK_MAGIC);
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] Passed assert().', __METHOD__, __LINE__));
 
                // Check length of count and seek position
                assert(strlen($this->header[1]) == self::LENGTH_COUNT);
 
                // Check length of count and seek position
                assert(strlen($this->header[1]) == self::LENGTH_COUNT);
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] Passed assert().', __METHOD__, __LINE__));
                assert(strlen($this->header[2]) == self::LENGTH_POSITION);
                assert(strlen($this->header[2]) == self::LENGTH_POSITION);
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] Passed assert().', __METHOD__, __LINE__));
 
                // Decode count and seek position
                $this->header[1] = hex2bin($this->header[1]);
                $this->header[2] = hex2bin($this->header[2]);
 
 
                // Decode count and seek position
                $this->header[1] = hex2bin($this->header[1]);
                $this->header[2] = hex2bin($this->header[2]);
 
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] EXIT!', __METHOD__, __LINE__));
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] EXIT!', __METHOD__, __LINE__));
        }
 
        /**
        }
 
        /**
@@ -212,7 +224,7 @@ class BaseFileStack extends BaseStacker {
         * @return      $isInitialized  Whether the file header is initialized
         */
        private function isFileHeaderInitialized () {
         * @return      $isInitialized  Whether the file header is initialized
         */
        private function isFileHeaderInitialized () {
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__));
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__));
                // Default is not initialized
                $isInitialized = FALSE;
 
                // Default is not initialized
                $isInitialized = FALSE;
 
@@ -220,7 +232,7 @@ class BaseFileStack extends BaseStacker {
                if ($this->isFileInitialized()) {
                        // Some bytes has been written, so rewind to start of it.
                        $rewindStatus = $this->getIteratorInstance()->rewind();
                if ($this->isFileInitialized()) {
                        // Some bytes has been written, so rewind to start of it.
                        $rewindStatus = $this->getIteratorInstance()->rewind();
-                       /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] rewindStatus=%s', __METHOD__, __LINE__, $rewindStatus));
+                       //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] rewindStatus=%s', __METHOD__, __LINE__, $rewindStatus));
 
                        // Is the rewind() call successfull?
                        if ($rewindStatus != 1) {
 
                        // Is the rewind() call successfull?
                        if ($rewindStatus != 1) {
@@ -231,11 +243,12 @@ class BaseFileStack extends BaseStacker {
                        // Read file header
                        $this->readFileHeader();
 
                        // Read file header
                        $this->readFileHeader();
 
-                       // Check if its format is valid.
+                       // The above method does already check the header
+                       $isInitialized = TRUE;
                } // END - if
 
                // Return result
                } // END - if
 
                // Return result
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] isInitialized=%d - EXIT!', __METHOD__, __LINE__, intval($isInitialized)));
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] isInitialized=%d - EXIT!', __METHOD__, __LINE__, intval($isInitialized)));
                return $isInitialized;
        }
 
                return $isInitialized;
        }
 
@@ -245,11 +258,11 @@ class BaseFileStack extends BaseStacker {
         * @return      $isInitialized          Whether the file's size is zero
         */
        private function isFileInitialized () {
         * @return      $isInitialized          Whether the file's size is zero
         */
        private function isFileInitialized () {
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__));
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__));
 
                // Get it from iterator which holds the pointer instance. If FALSE is returned
                $fileSize = $this->getIteratorInstance()->size();
 
                // Get it from iterator which holds the pointer instance. If FALSE is returned
                $fileSize = $this->getIteratorInstance()->size();
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] fileSize=%s', __METHOD__, __LINE__, $fileSize));
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] fileSize=%s', __METHOD__, __LINE__, $fileSize));
 
                /*
                 * The returned file size should not be FALSE or NULL as this means
 
                /*
                 * The returned file size should not be FALSE or NULL as this means
@@ -261,7 +274,7 @@ class BaseFileStack extends BaseStacker {
                $isInitialized = ($fileSize > 0);
 
                // Return result
                $isInitialized = ($fileSize > 0);
 
                // Return result
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] isInitialized=%d - EXIT!', __METHOD__, __LINE__, intval($isInitialized)));
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] isInitialized=%d - EXIT!', __METHOD__, __LINE__, intval($isInitialized)));
                return $isInitialized;
        }
 
                return $isInitialized;
        }
 
@@ -271,14 +284,14 @@ class BaseFileStack extends BaseStacker {
         * @return      void
         */
        private function createFileHeader () {
         * @return      void
         */
        private function createFileHeader () {
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__));
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__));
                // The file's header should not be initialized here
                assert(!$this->isFileHeaderInitialized());
 
                // Simple flush file header which will create it.
                $this->flushFileHeader();
 
                // The file's header should not be initialized here
                assert(!$this->isFileHeaderInitialized());
 
                // Simple flush file header which will create it.
                $this->flushFileHeader();
 
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] EXIT!!', __METHOD__, __LINE__));
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] EXIT!!', __METHOD__, __LINE__));
        }
 
        /**
        }
 
        /**
@@ -287,7 +300,7 @@ class BaseFileStack extends BaseStacker {
         * @return      void
         */
        private function flushFileHeader () {
         * @return      void
         */
        private function flushFileHeader () {
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__));
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__));
 
                // Put all informations together
                $header = sprintf('%s%s%s%s%s%s',
 
                // Put all informations together
                $header = sprintf('%s%s%s%s%s%s',
@@ -313,7 +326,7 @@ class BaseFileStack extends BaseStacker {
                // Write it to disk (header is always at seek position 0)
                $this->writeData(0, $header);
 
                // Write it to disk (header is always at seek position 0)
                $this->writeData(0, $header);
 
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] EXIT!', __METHOD__, __LINE__));
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] EXIT!', __METHOD__, __LINE__));
        }
 
        /**
        }
 
        /**
@@ -324,7 +337,7 @@ class BaseFileStack extends BaseStacker {
         * @return      void
         */
        private function writeData ($seekPosition, $data) {
         * @return      void
         */
        private function writeData ($seekPosition, $data) {
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] seekPosition=%s,data()=%s - CALLED!', __METHOD__, __LINE__, $seekPosition, strlen($data)));
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] seekPosition=%s,data()=%s - CALLED!', __METHOD__, __LINE__, $seekPosition, strlen($data)));
 
                // Write data at given position
                $this->getIteratorInstance()->writeAtPosition($seekPosition, $data);
 
                // Write data at given position
                $this->getIteratorInstance()->writeAtPosition($seekPosition, $data);
@@ -332,7 +345,7 @@ class BaseFileStack extends BaseStacker {
                // Update seek position
                $this->updateSeekPosition();
 
                // Update seek position
                $this->updateSeekPosition();
 
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] EXIT!', __METHOD__, __LINE__));
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] EXIT!', __METHOD__, __LINE__));
        }
 
        /**
        }
 
        /**
@@ -341,7 +354,7 @@ class BaseFileStack extends BaseStacker {
         * @return      void
         */
        private function preAllocateFile () {
         * @return      void
         */
        private function preAllocateFile () {
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__));
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__));
 
                // Is it enabled?
                if ($this->getConfigInstance()->getConfigEntry('file_stack_pre_allocate_enabled') != 'Y') {
 
                // Is it enabled?
                if ($this->getConfigInstance()->getConfigEntry('file_stack_pre_allocate_enabled') != 'Y') {
@@ -360,16 +373,16 @@ class BaseFileStack extends BaseStacker {
                 * minimum length = hash length + separator + name + minimum entry size = ?? + 1 + 10 + 1 = ??
                 */
                $minLengthEntry = self::getHashLength() + strlen(self::SEPARATOR_HASH_NAME) + self::LENGTH_NAME + 1;
                 * minimum length = hash length + separator + name + minimum entry size = ?? + 1 + 10 + 1 = ??
                 */
                $minLengthEntry = self::getHashLength() + strlen(self::SEPARATOR_HASH_NAME) + self::LENGTH_NAME + 1;
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] minLengthEntry=%s', __METHOD__, __LINE__, $minLengthEntry));
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] minLengthEntry=%s', __METHOD__, __LINE__, $minLengthEntry));
 
                // Calulcate seek position
                $seekPosition = $minLengthEntry * $this->getConfigInstance()->getConfigEntry('file_stack_pre_allocate_count');
 
                // Calulcate seek position
                $seekPosition = $minLengthEntry * $this->getConfigInstance()->getConfigEntry('file_stack_pre_allocate_count');
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] seekPosition=%s', __METHOD__, __LINE__, $seekPosition));
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] seekPosition=%s', __METHOD__, __LINE__, $seekPosition));
 
                // Now simply write a NUL there. This will pre-allocate the file.
                $this->writeData($seekPosition, chr(0));
 
 
                // Now simply write a NUL there. This will pre-allocate the file.
                $this->writeData($seekPosition, chr(0));
 
-               /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] EXIT!', __METHOD__, __LINE__));
+               //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] EXIT!', __METHOD__, __LINE__));
        }
 
        /**
        }
 
        /**