<?php
/**
- * @copyright Copyright (C) 2021, Friendica
+ * @copyright Copyright (C) 2010-2022, the Friendica project
*
* @license GNU AGPL version 3 or any later version
*
* @param string $filename File to open
* @return $this
*/
- public function open(string $filename)
+ public function open(string $filename): ReversedFileReader
{
$this->fh = fopen($filename, 'r');
if (!$this->fh) {
return $this;
}
- private function _read($size)
+ /**
+ * Read $size bytes behind last position
+ *
+ * @param int $size
+ * @return string
+ */
+ private function _read(int $size): string
{
$this->pos -= $size;
fseek($this->fh, $this->pos);
return fread($this->fh, $size);
}
+ /**
+ * Read next line from end of file
+ * Return null if no lines are left to read
+ *
+ * @return string|null Depending on data being buffered
+ */
private function _readline()
{
$buffer = & $this->buffer;
if ($this->pos == 0) {
return array_pop($buffer);
}
+ if (is_null($buffer)) {
+ return null;
+ }
if (count($buffer) > 1) {
return array_pop($buffer);
}
}
}
+ /**
+ * Fetch next line from end and set it as current iterator value.
+ *
+ * @see Iterator::next()
+ * @return void
+ */
public function next()
{
++$this->key;
$this->value = $this->_readline();
}
+ /**
+ * Rewind iterator to the first line at the end of file
+ *
+ * @see Iterator::rewind()
+ * @return void
+ */
public function rewind()
{
if ($this->filesize > 0) {
}
}
- public function key()
+ /**
+ * Return current line number, starting from zero at the end of file
+ *
+ * @see Iterator::key()
+ * @return int
+ */
+ public function key(): int
{
return $this->key;
}
- public function current()
+ /**
+ * Return current line
+ *
+ * @see Iterator::current()
+ * @return string
+ */
+ public function current(): string
{
return $this->value;
}
- public function valid()
+ /**
+ * Checks if current iterator value is valid, that is, we readed all lines in files
+ *
+ * @see Iterator::valid()
+ * @return bool
+ */
+ public function valid(): bool
{
return ! is_null($this->value);
}