You are here

SeekableFileContent.php in Zircon Profile 8

File

vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/content/SeekableFileContent.php
View source
<?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);
  }

}

Classes

Namesort descending Description
SeekableFileContent Default implementation for file contents based on simple strings.