Version 1
[yaffs-website] / vendor / mikey179 / vfsStream / src / main / php / org / bovigo / vfs / content / SeekableFileContent.php
diff --git a/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/content/SeekableFileContent.php b/vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/content/SeekableFileContent.php
new file mode 100644 (file)
index 0000000..e748000
--- /dev/null
@@ -0,0 +1,129 @@
+<?php
+/**
+ * This file is part of vfsStream.
+ *
+ * For the full copyright and license information, please view the LICENSE
+ * file that was distributed with this source code.
+ *
+ * @package  org\bovigo\vfs
+ */
+namespace org\bovigo\vfs\content;
+/**
+ * Default implementation for file contents based on simple strings.
+ *
+ * @since  1.3.0
+ */
+abstract class SeekableFileContent implements FileContent
+{
+    /**
+     * current position within content
+     *
+     * @type  int
+     */
+    private $offset = 0;
+
+    /**
+     * reads the given amount of bytes from content
+     *
+     * @param   int     $count
+     * @return  string
+     */
+    public function read($count)
+    {
+        $data = $this->doRead($this->offset, $count);
+        $this->offset += $count;
+        return $data;
+    }
+
+    /**
+     * actual reading of given byte count starting at given offset
+     *
+     * @param  int  $offset
+     * @param  int  $count
+     */
+    protected abstract function doRead($offset, $count);
+
+    /**
+     * seeks to the given offset
+     *
+     * @param   int   $offset
+     * @param   int   $whence
+     * @return  bool
+     */
+    public function seek($offset, $whence)
+    {
+        switch ($whence) {
+            case SEEK_CUR:
+                $this->offset += $offset;
+                return true;
+
+            case SEEK_END:
+                $this->offset = $this->size() + $offset;
+                return true;
+
+            case SEEK_SET:
+                $this->offset = $offset;
+                return true;
+
+            default:
+                return false;
+        }
+
+        return false;
+    }
+
+    /**
+     * checks whether pointer is at end of file
+     *
+     * @return  bool
+     */
+    public function eof()
+    {
+        return $this->size() <= $this->offset;
+    }
+
+    /**
+     * writes an amount of data
+     *
+     * @param   string  $data
+     * @return  amount of written bytes
+     */
+    public function write($data)
+    {
+        $dataLength    = strlen($data);
+        $this->doWrite($data, $this->offset, $dataLength);
+        $this->offset += $dataLength;
+        return $dataLength;
+    }
+
+    /**
+     * actual writing of data with specified length at given offset
+     *
+     * @param   string  $data
+     * @param   int     $offset
+     * @param   int     $length
+     */
+    protected abstract function doWrite($data, $offset, $length);
+
+    /**
+     * for backwards compatibility with vfsStreamFile::bytesRead()
+     *
+     * @return  int
+     * @deprecated
+     */
+    public function bytesRead()
+    {
+        return $this->offset;
+    }
+
+    /**
+     * for backwards compatibility with vfsStreamFile::readUntilEnd()
+     *
+     * @return  string
+     * @deprecated
+     */
+    public function readUntilEnd()
+    {
+        return substr($this->content(), $this->offset);
+    }
+}