You are here

class LargeFileContent in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/content/LargeFileContent.php \org\bovigo\vfs\content\LargeFileContent

File content implementation to mock large files.

When content is written via write() the data will be written into the positions according to the current offset. When content is read via read() it will use the already written data. If no data is written at the offsets to read those offsets will be filled with spaces. Please note that accessing the whole content via content() will deliver a string with the length of the originally defined size. It is not advisable to do so with large sizes, except you have enough memory and time. :-)

@since 1.3.0

Hierarchy

Expanded class hierarchy of LargeFileContent

2 files declare their use of LargeFileContent
vfsStream.php in vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/vfsStream.php
vfsStreamWrapperLargeFileTestCase.php in vendor/mikey179/vfsStream/src/test/php/org/bovigo/vfs/vfsStreamWrapperLargeFileTestCase.php

File

vendor/mikey179/vfsStream/src/main/php/org/bovigo/vfs/content/LargeFileContent.php, line 25

Namespace

org\bovigo\vfs\content
View source
class LargeFileContent extends SeekableFileContent implements FileContent {

  /**
   * byte array of written content
   *
   * @type  char[]
   */
  private $content = array();

  /**
   * file size in bytes
   *
   * @type  int
   */
  private $size;

  /**
   * constructor
   *
   * @param  int  $size  file size in bytes
   */
  public function __construct($size) {
    $this->size = $size;
  }

  /**
   * create large file with given size in kilobyte
   *
   * @param   int  $kilobyte
   * @return  LargeFileContent
   */
  public static function withKilobytes($kilobyte) {
    return new self($kilobyte * 1024);
  }

  /**
   * create large file with given size in megabyte
   *
   * @param   int  $megabyte
   * @return  LargeFileContent
   */
  public static function withMegabytes($megabyte) {
    return self::withKilobytes($megabyte * 1024);
  }

  /**
   * create large file with given size in gigabyte
   *
   * @param   int  $gigabyte
   * @return  LargeFileContent
   */
  public static function withGigabytes($gigabyte) {
    return self::withMegabytes($gigabyte * 1024);
  }

  /**
   * returns actual content
   *
   * @return  string
   */
  public function content() {
    return $this
      ->doRead(0, $this->size);
  }

  /**
   * returns size of content
   *
   * @return  int
   */
  public function size() {
    return $this->size;
  }

  /**
   * actual reading of given byte count starting at given offset
   *
   * @param  int  $offset
   * @param  int  $count
   */
  protected function doRead($offset, $count) {
    if ($offset + $count > $this->size) {
      $count = $this->size - $offset;
    }
    $result = '';
    for ($i = 0; $i < $count; $i++) {
      if (isset($this->content[$i + $offset])) {
        $result .= $this->content[$i + $offset];
      }
      else {
        $result .= ' ';
      }
    }
    return $result;
  }

  /**
   * actual writing of data with specified length at given offset
   *
   * @param   string  $data
   * @param   int     $offset
   * @param   int     $length
   */
  protected function doWrite($data, $offset, $length) {
    for ($i = 0; $i < $length; $i++) {
      $this->content[$i + $offset] = $data[$i];
    }
    if ($offset >= $this->size) {
      $this->size += $length;
    }
    elseif ($offset + $length > $this->size) {
      $this->size = $offset + $length;
    }
  }

  /**
   * Truncates a file to a given length
   *
   * @param   int  $size length to truncate file to
   * @return  bool
   */
  public function truncate($size) {
    $this->size = $size;
    foreach (array_filter(array_keys($this->content), function ($pos) use ($size) {
      return $pos >= $size;
    }) as $removePos) {
      unset($this->content[$removePos]);
    }
    return true;
  }

}

Members

Namesort descending Modifiers Type Description Overrides
LargeFileContent::$content private property byte array of written content
LargeFileContent::$size private property file size in bytes
LargeFileContent::content public function returns actual content Overrides FileContent::content
LargeFileContent::doRead protected function actual reading of given byte count starting at given offset Overrides SeekableFileContent::doRead
LargeFileContent::doWrite protected function actual writing of data with specified length at given offset Overrides SeekableFileContent::doWrite
LargeFileContent::size public function returns size of content Overrides FileContent::size
LargeFileContent::truncate public function Truncates a file to a given length Overrides FileContent::truncate
LargeFileContent::withGigabytes public static function create large file with given size in gigabyte
LargeFileContent::withKilobytes public static function create large file with given size in kilobyte
LargeFileContent::withMegabytes public static function create large file with given size in megabyte
LargeFileContent::__construct public function constructor
SeekableFileContent::$offset private property current position within content
SeekableFileContent::bytesRead public function for backwards compatibility with vfsStreamFile::bytesRead()
SeekableFileContent::eof public function checks whether pointer is at end of file Overrides FileContent::eof
SeekableFileContent::read public function reads the given amount of bytes from content Overrides FileContent::read
SeekableFileContent::readUntilEnd public function for backwards compatibility with vfsStreamFile::readUntilEnd()
SeekableFileContent::seek public function seeks to the given offset Overrides FileContent::seek
SeekableFileContent::write public function writes an amount of data Overrides FileContent::write