$this->currentBlock = $currentBlock;
}
+ /**
+ * Gets currently read data
+ *
+ * @return $current Currently read data
+ */
+ public function getCurrentBlock () {
+ // Return it
+ return $this->currentBlock;
+ }
+
/**
* Initializes this file class
*
$this->setPointerInstance($pointerInstance);
}
+ /**
+ * Writes data at given position
+ *
+ * @param $seekPosition Seek position
+ * @param $data Data to be written
+ * @param $flushHeader Whether to flush the header (default: flush)
+ * @return void
+ */
+ protected function writeData ($seekPosition, $data, $flushHeader = TRUE) {
+ //* 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->getPointerInstance()->writeAtPosition($seekPosition, $data);
+
+ // Update seek position
+ $this->updateSeekPosition();
+
+ // Flush the header?
+ if ($flushHeader === TRUE) {
+ // Flush header
+ $this->flushFileHeader();
+
+ // Seek to old position
+ $this->seekToOldPosition();
+ } // END - if
+
+ //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] EXIT!', __METHOD__, __LINE__));
+ }
+
+ /**
+ * Checks whether the file header is initialized
+ *
+ * @return $isInitialized Whether the file header is initialized
+ */
+ public function isFileHeaderInitialized () {
+ //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__));
+
+ // Default is not initialized
+ $isInitialized = FALSE;
+
+ // Is the file initialized?
+ 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));
+
+ // Is the rewind() call successfull?
+ if ($rewindStatus != 1) {
+ // Something bad happened
+ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] Could not rewind().', __METHOD__, __LINE__));
+ } // END - if
+
+ // Read file header
+ $this->getBlockInstance()->readFileHeader();
+
+ // The above method does already check the header
+ $isInitialized = TRUE;
+ } // END - if
+
+ // Return result
+ //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] isInitialized=%d - EXIT!', __METHOD__, __LINE__, intval($isInitialized)));
+ return $isInitialized;
+ }
+
+ /**
+ * Checks whether the assigned file has been initialized
+ *
+ * @return $isInitialized Whether the file's size is zero
+ */
+ public function isFileInitialized () {
+ //* 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->size();
+ //* 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
+ * that the pointer class does not work correctly.
+ */
+ assert(is_int($fileSize));
+
+ // Is more than 0 returned?
+ $isInitialized = ($fileSize > 0);
+
+ // Return result
+ //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] isInitialized=%d - EXIT!', __METHOD__, __LINE__, intval($isInitialized)));
+ return $isInitialized;
+ }
+
+ /**
+ * Creates the assigned file
+ *
+ * @return void
+ */
+ public function createFileHeader () {
+ //* 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->getBlockInstance()->flushFileHeader();
+
+ // Rewind seek position (to beginning of file) and update/flush file header
+ $this->rewineUpdateSeekPosition();
+
+ //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] EXIT!!', __METHOD__, __LINE__));
+ }
+
+ /**
+ * Pre-allocates file (if enabled) with some space for later faster write access.
+ *
+ * @param $type Type of the file
+ * @return void
+ */
+ public function preAllocateFile ($type) {
+ //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__));
+
+ // Is it enabled?
+ if ($this->getConfigInstance()->getConfigEntry($type . '_pre_allocate_enabled') != 'Y') {
+ // Not enabled
+ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] Not pre-allocating file.', __METHOD__, __LINE__));
+
+ // Don't continue here.
+ return;
+ } // END - if
+
+ // Message to user
+ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] Pre-allocating file ...', __METHOD__, __LINE__));
+
+ // Calculate minimum length for one entry
+ $minLengthEntry = $this->getBlockInstance()->calculateMinimumBlockLength();
+ //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] minLengthEntry=%s', __METHOD__, __LINE__, $minLengthEntry));
+
+ // Calulcate seek position
+ $seekPosition = $minLengthEntry * $this->getConfigInstance()->getConfigEntry($type . '_pre_allocate_count');
+ //* 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));
+
+ // Rewind seek position (to beginning of file) and update/flush file header
+ $this->rewineUpdateSeekPosition();
+
+ //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] EXIT!', __METHOD__, __LINE__));
+ }
+
/**
* Close a file source and set it's instance to null and the file name
* to empty
$this->next();
// Get current entry
- $current = $this->current();
+ $current = $this->getCurrentBlock();
- // Simply output it
- self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] current=%s', __METHOD__, __LINE__, print_r($current, TRUE)));
+ // Debug message
+ /* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] current()=%s', __METHOD__, __LINE__, strlen($current)));
} // END - while
//* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] EXIT!', __METHOD__, __LINE__));
assert($this->getBlockInstance() instanceof CalculatableBlock);
// First calculate minimum block length
- $length = $this->getBlockInstance()->caluclateMinimumBlockLength();
+ $length = $this->getBlockInstance()->calculateMinimumBlockLength();
// Short be more than zero!
assert($length > 0);
assert($this->getBlockInstance() instanceof CalculatableBlock);
// First calculate minimum block length
- $length = $this->getBlockInstance()->caluclateMinimumBlockLength();
+ $length = $this->getBlockInstance()->calculateMinimumBlockLength();
// Short be more than zero!
assert($length > 0);
// Return result
return $isValid;
}
+
+ /**
+ * Gets current seek position ("key").
+ *
+ * @return $key Current key in iteration
+ */
+ public function key () {
+ // Call pointer instance
+ return $this->getPointerInstance()->determineSeekPosition();
+ }
}
// [EOF]