Path: blob/master/src/applications/files/engine/PhabricatorFileChunkIterator.php
12241 views
<?php12final class PhabricatorFileChunkIterator3extends Phobject4implements Iterator {56private $chunks;7private $cursor;8private $begin;9private $end;10private $data;1112public function __construct(array $chunks, $begin = null, $end = null) {13$chunks = msort($chunks, 'getByteStart');14$this->chunks = $chunks;1516if ($begin !== null) {17foreach ($chunks as $key => $chunk) {18if ($chunk->getByteEnd() >= $begin) {19unset($chunks[$key]);20}21break;22}23$this->begin = $begin;24}2526if ($end !== null) {27foreach ($chunks as $key => $chunk) {28if ($chunk->getByteStart() <= $end) {29unset($chunks[$key]);30}31}32$this->end = $end;33}34}3536public function current() {37$chunk = head($this->chunks);38$data = $chunk->getDataFile()->loadFileData();3940if ($this->end !== null) {41if ($chunk->getByteEnd() > $this->end) {42$data = substr($data, 0, ($this->end - $chunk->getByteStart()));43}44}4546if ($this->begin !== null) {47if ($chunk->getByteStart() < $this->begin) {48$data = substr($data, ($this->begin - $chunk->getByteStart()));49}50}5152return $data;53}5455public function key() {56return head_key($this->chunks);57}5859public function next() {60unset($this->chunks[$this->key()]);61}6263public function rewind() {64return;65}6667public function valid() {68return (count($this->chunks) > 0);69}7071}727374