public static function store($value) { if (\tool::debug()) { \tool::fprint("Storing " . get_called_class() . ":{$value}"); } return Writer::convert('d', $value); }
public function __construct($name = null, $content = array()) { \tool::fprint("Creating " . get_called_class() . (count($content) ? " with " . count($content) . " elements" : '')); parent::__construct(); $this->name = $name; $this->content = $content ? (array) $content : array(); }
public function save(SplFileObject $file) { $result = parent::save($file); if (isset($this->type)) { $result += $file->fwrite(Dictionary::mapName($this->type)); } else { if (count($this->content)) { throw new UnexpectedValueException('Populated list needs an explicit type cast.'); } else { $result += $file->fwrite(Dictionary::mapName('TAG_End')); } } $result += $file->fwrite(TAG_Int::store(count($this->content))); if (\tool::debug()) { \tool::fprint("Storing " . count($this->content) . " values of type {$this->type} @{$file->ftell()} ..."); } $type = $this->type; foreach ($this->content as $index => $tag) { if (!is_object($tag)) { $result += $file->fwrite($type::store($tag)); } else { if ($tag instanceof $this->type) { if (isset($tag->name)) { throw new UnexpectedValueException("List#{$index} is a named tag."); } $result += $tag->save($file); } else { throw new UnexpectedValueException("List#{$index} type '" . get_class($tag) . "' doesn't match the list type '{$this->type}'."); } } } return $result; }
public function write(Tag $tag) { \tool::fprint("Writing ... " . get_called_class() . "@{$this->file->ftell()}"); $tmp = new SplFileObject('php://memory', 'wb+'); $tag->save($tmp); $pos = $tmp->ftell(); $tmp->fseek(0); return $this->file->fwrite(gzencode($tmp->fread($pos), 9, FORCE_GZIP)); }
public static function store($value) { if ($value < -2147483648 || $value > 2147483647) { throw new RangeException('Value is out of allowed range for given type.'); } if (\tool::debug()) { \tool::fprint("Storing " . get_called_class() . ":{$value}"); } return Writer::convert('l', (int) $value); }
public static function store($value) { $len = strlen($value); if ($len < 0 || $len > 32767) { throw new \LengthException('Valid string length range is 0..32767.'); } if (\tool::debug()) { \tool::fprint("Storing " . get_called_class() . ":{$value}"); } return TAG_Short::store($len) . $value; }
public function save(SplFileObject $file) { $result = parent::save($file) + $file->fwrite(TAG_Int::store(count($this->content))); if (\tool::debug()) { \tool::fprint("Storing " . count($this->content) . " values @{$file->ftell()} ..."); } ksort($this->content); foreach ($this->content as $value) { $result += $file->fwrite(TAG_Byte::store($value)); } return $result; }
public function fread($length) { if ($length < 0) { throw new RuntimeException("Backward reads are not supported."); } \tool::fprint("Reading {$length} from " . get_called_class() . "::" . __FUNCTION__ . "@{$this->file->ftell()}"); if ($length) { $pos = $this->file->ftell(); $data = $this->file->fread($length); if ($data === false) { throw new RuntimeException("Error while reading from file pointer."); } if (strlen($data) < $length) { throw new UnderflowException("Read " . strlen($data) . " out of {$length} requested bytes from file pointer @{$pos}."); } } else { $data = ''; } return $data; }
public function save(SplFileObject $file) { $result = parent::save($file); if (\tool::debug()) { \tool::fprint("Storing " . count($this->content) . " values @{$file->ftell()} ..."); } $i = 1; foreach ($this->content as $tag) { if ($tag instanceof TAG_End) { break; } $result += $tag->save($file); $i++; } if (\tool::debug()) { if ($i < count($this->content)) { # TODO: Check if the tag is TAG_End at insetion times. \tool::fprint("Stored {$i} values! Don't stuff TAG_End in the middle of compound tags!"); } } return $result + $file->fwrite(Dictionary::mapName("TAG_End")); }
public function write(Tag $tag) { \tool::fprint("Writing ... " . get_called_class() . "@{$this->file->ftell()}"); return $tag->save($this->file); }
public static function createFrom(Reader $file) { \tool::fprint("Reading ... " . get_called_class() . "::" . __FUNCTION__); return new static(TAG_String::readFrom($file), static::readFrom($file)); }
public function save(SplFileObject $file) { \tool::fprint("Saving ... " . get_called_class()); return $file->fwrite(Dictionary::mapName($this->id)); }
public function save(SplFileObject $file) { \tool::fprint("Saving ... " . get_called_class() . (isset($this->name) ? ":{$this->name}" : '') . "@{$file->ftell()}"); return $file->fwrite(isset($this->name) ? Dictionary::mapName($this->id) . TAG_String::store($this->name) : ''); }