- * Creates the assigned file
- *
- * @return void
- */
- protected function createFileHeader () {
- //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__));
-
- // The method flushFileHeader() must be callable
- assert(is_callable(array($this, 'flushFileHeader')));
-
- // The file's header should not be initialized here
- assert(!$this->isFileHeaderInitialized());
-
- // Simple flush file header which will create it.
- $this->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__));
- }
-
- /**
- * 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__));
-
- // 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__));
- }
-
- /**
- * 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->getIteratorInstance()->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__));
- }
-
- /**
- * Pre-allocates file (if enabled) with some space for later faster write access.
- *
- * @param $type Type of the file
- * @return void
- */
- protected function preAllocateFile ($type) {
- //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__));
-
- // caluclateMinimumBlockLength() must be callable
- assert(is_callable(array($this, 'caluclateMinimumBlockLength')));
-
- // 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->caluclateMinimumBlockLength();
- //* 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__));
- }
-
- /**
- * Checks whether the block separator has been found