Exemplo n.º 1
0
 public static function store($value)
 {
     if (\tool::debug()) {
         \tool::fprint("Storing " . get_called_class() . ":{$value}");
     }
     return Writer::convert('d', $value);
 }
Exemplo n.º 2
0
 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();
 }
Exemplo n.º 3
0
 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;
 }
Exemplo n.º 4
0
 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));
 }
Exemplo n.º 5
0
 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);
 }
Exemplo n.º 6
0
 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;
 }
Exemplo n.º 7
0
 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;
 }
Exemplo n.º 8
0
 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;
 }
Exemplo n.º 9
0
 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"));
 }
Exemplo n.º 10
0
 public function write(Tag $tag)
 {
     \tool::fprint("Writing ... " . get_called_class() . "@{$this->file->ftell()}");
     return $tag->save($this->file);
 }
Exemplo n.º 11
0
 public static function createFrom(Reader $file)
 {
     \tool::fprint("Reading ... " . get_called_class() . "::" . __FUNCTION__);
     return new static(TAG_String::readFrom($file), static::readFrom($file));
 }
Exemplo n.º 12
0
 public function save(SplFileObject $file)
 {
     \tool::fprint("Saving ... " . get_called_class());
     return $file->fwrite(Dictionary::mapName($this->id));
 }
Exemplo n.º 13
0
 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) : '');
 }