protected function __construct ($className) {
// Call parent constructor
parent::__construct($className);
-
- // Calculate header size
- $this->setHeaderSize(
- strlen(self::STACK_MAGIC) +
- strlen(chr(BaseFile::SEPARATOR_HEADER_DATA)) +
- BaseFile::LENGTH_COUNT +
- strlen(chr(BaseFile::SEPARATOR_HEADER_DATA)) +
- BaseFile::LENGTH_POSITION +
- strlen(chr(BaseFile::SEPARATOR_HEADER_ENTRIES))
- );
-
- // Init counters and gaps array
- $this->initCountersGapsArray();
}
/**
$this->getIteratorInstance()->rewind();
// Then read it (see constructor for calculation)
- $data = $this->getIteratorInstance()->read($this->getHeaderSize());
- //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] Read %d bytes (%d wanted).', __METHOD__, __LINE__, strlen($data), $this->getHeaderSize()));
+ $data = $this->getIteratorInstance()->read($this->getIteratorInstance()->getHeaderSize());
+ //* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] Read %d bytes (%d wanted).', __METHOD__, __LINE__, strlen($data), $this->getIteratorInstance()->getHeaderSize()));
// Have all requested bytes been read?
- assert(strlen($data) == $this->getHeaderSize());
+ assert(strlen($data) == $this->getIteratorInstance()->getHeaderSize());
//* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] Passed assert().', __METHOD__, __LINE__));
// Last character must be the separator
$data = substr($data, 0, -1);
// And update seek position
- $this->updateSeekPosition();
+ $this->getIteratorInstance()->updateSeekPosition();
/*
* Now split it:
$header = explode(chr(BaseFile::SEPARATOR_HEADER_DATA), $data);
// Set header here
- $this->setHeader($header);
+ $this->getIteratorInstance()->setHeader($header);
// Check if the array has only 3 elements
//* NOISY-DEBUG: */ self::createDebugInstance(__CLASS__)->debugOutput(sprintf('[%s:%d:] header(%d)=%s', __METHOD__, __LINE__, count($header), print_r($header, TRUE)));
// Set iterator here
$this->setIteratorInstance($iteratorInstance);
+ // Calculate header size
+ $this->getIteratorInstance()->setHeaderSize(
+ strlen(self::STACK_MAGIC) +
+ strlen(chr(BaseFile::SEPARATOR_HEADER_DATA)) +
+ BaseFile::LENGTH_COUNT +
+ strlen(chr(BaseFile::SEPARATOR_HEADER_DATA)) +
+ BaseFile::LENGTH_POSITION +
+ strlen(chr(BaseFile::SEPARATOR_HEADER_ENTRIES))
+ );
+
+ // Init counters and gaps array
+ $this->getIteratorInstance()->initCountersGapsArray();
+
// Is the file's header initialized?
if (!$this->getIteratorInstance()->isFileHeaderInitialized()) {
// No, then create it (which may pre-allocate the stack)
// Return it
return $length;
}
+
+ /**
+ * 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
+ * @throws UnsupportedOperationException This method is not (and maybe never will be) supported
+ */
+ public function initCountersGapsArray () {
+ throw new UnsupportedOperationException(array($this, __FUNCTION__, $this->getIteratorInstance()->getPointerInstance()), self::EXCEPTION_UNSPPORTED_OPERATION);
+ }
+
+ /**
+ * Getter for header size
+ *
+ * @return $totalEntries Size of file header
+ * @throws UnsupportedOperationException This method is not (and maybe never will be) supported
+ */
+ public final function getHeaderSize () {
+ throw new UnsupportedOperationException(array($this, __FUNCTION__, $this->getIteratorInstance()->getPointerInstance()), self::EXCEPTION_UNSPPORTED_OPERATION);
+ }
+
+ /**
+ * Setter for header size
+ *
+ * @param $headerSize Size of file header
+ * @return void
+ * @throws UnsupportedOperationException This method is not (and maybe never will be) supported
+ */
+ public final function setHeaderSize ($headerSize) {
+ throw new UnsupportedOperationException(array($this, __FUNCTION__, $this->getIteratorInstance()->getPointerInstance()), self::EXCEPTION_UNSPPORTED_OPERATION);
+ }
+
+ /**
+ * Getter for header array
+ *
+ * @return $totalEntries Size of file header
+ * @throws UnsupportedOperationException This method is not (and maybe never will be) supported
+ */
+ public final function getHeader () {
+ throw new UnsupportedOperationException(array($this, __FUNCTION__, $this->getIteratorInstance()->getPointerInstance()), self::EXCEPTION_UNSPPORTED_OPERATION);
+ }
+
+ /**
+ * Setter for header
+ *
+ * @param $header Array for a file header
+ * @return void
+ * @throws UnsupportedOperationException This method is not (and maybe never will be) supported
+ */
+ public final function setHeader (array $header) {
+ throw new UnsupportedOperationException(array($this, __FUNCTION__, $this->getIteratorInstance()->getPointerInstance()), self::EXCEPTION_UNSPPORTED_OPERATION);
+ }
+
+ /**
+ * Updates seekPosition attribute from file to avoid to much access on file.
+ *
+ * @return void
+ * @throws UnsupportedOperationException This method is not (and maybe never will be) supported
+ */
+ public function updateSeekPosition () {
+ throw new UnsupportedOperationException(array($this, __FUNCTION__, $this->getIteratorInstance()->getPointerInstance()), self::EXCEPTION_UNSPPORTED_OPERATION);
+ }
}
// [EOF]