X-Git-Url: https://git.mxchange.org/?p=core.git;a=blobdiff_plain;f=inc%2Fclasses%2Fmain%2Fclass_BaseFrameworkSystem.php;h=033718d949958c02f9eb54fee8e5cfe9d24cb094;hp=217920972cee11886751fead79aae0ede6f89997;hb=8a21e1ffb5dec3e25ae578eab611b7f14c68d649;hpb=3082d3f331e7181f607ca02dae7cd0e54ddeef5a diff --git a/inc/classes/main/class_BaseFrameworkSystem.php b/inc/classes/main/class_BaseFrameworkSystem.php index 21792097..033718d9 100644 --- a/inc/classes/main/class_BaseFrameworkSystem.php +++ b/inc/classes/main/class_BaseFrameworkSystem.php @@ -2913,6 +2913,27 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { $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 * @@ -2958,10 +2979,11 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { * @return $isInitialized Whether the file header is initialized */ protected function isFileHeaderInitialized () { + //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__)); + // Is the method there? assert(is_callable(array($this, 'readFileHeader'))); - //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__)); // Default is not initialized $isInitialized = FALSE; @@ -3022,23 +3044,47 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { */ 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(); + // 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 () { + // Seek to currently ("old") saved position + $this->getIteratorInstance()->seek($this->getSeekPosition()); + } + /** * 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) { + 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 @@ -3047,11 +3093,15 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Update seek position $this->updateSeekPosition(); - // Flush header - $this->flushHeader(); + // Flush the header? + if ($flushHeader === TRUE) { + // Flush header + $this->flushFileHeader(); + + // Seek to old position + $this->seekToOldPosition(); + } // END - if - // Seek to old position - $this->seekToOldPosition(); //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] EXIT!', __METHOD__, __LINE__)); } @@ -3064,6 +3114,9 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { protected function preAllocateFile ($type) { //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] CALLED!', __METHOD__, __LINE__)); + // caluclateMinimumFileEntryLength() must be callable + assert(is_callable(array($this, 'caluclateMinimumFileEntryLength'))); + // Is it enabled? if ($this->getConfigInstance()->getConfigEntry($type . '_pre_allocate_enabled') != 'Y') { // Not enabled @@ -3076,11 +3129,8 @@ class BaseFrameworkSystem extends stdClass implements FrameworkInterface { // Message to user self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] Pre-allocating file ...', __METHOD__, __LINE__)); - /* - * Calculate minimum length for one entry: - * minimum length = hash length + separator + name + minimum entry size = ?? + 1 + 10 + 1 = ?? - */ - $minLengthEntry = self::getHashLength() + strlen(self::SEPARATOR_HASH_NAME) + self::LENGTH_NAME + 1; + // Calculate minimum length for one entry + $minLengthEntry = $this->caluclateMinimumFileEntryLength(); //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] minLengthEntry=%s', __METHOD__, __LINE__, $minLengthEntry)); // Calulcate seek position