15ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma<?php 25ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma/* 35ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * Copyright 2015 Google Inc. 45ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * 55ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * Licensed under the Apache License, Version 2.0 (the "License"); 65ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * you may not use this file except in compliance with the License. 75ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * You may obtain a copy of the License at 85ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * 95ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * http://www.apache.org/licenses/LICENSE-2.0 105ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * 115ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * Unless required by applicable law or agreed to in writing, software 125ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * distributed under the License is distributed on an "AS IS" BASIS, 135ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 145ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * See the License for the specific language governing permissions and 155ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * limitations under the License. 165ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 175ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 1869a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara/// @file 1969a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara/// @addtogroup flatbuffers_php_api 2069a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara/// @{ 2169a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara 225ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunmanamespace Google\FlatBuffers; 235ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 245ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunmaclass FlatbufferBuilder 255ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma{ 265ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 2769a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * Internal ByteBuffer for the FlatBuffer data. 285ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @var ByteBuffer $bb 295ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 305ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public $bb; 315ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 3269a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara /// @cond FLATBUFFERS_INTERNAL 335ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 345ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @var int $space 355ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 365ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma protected $space; 375ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 385ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 395ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @var int $minalign 405ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 415ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma protected $minalign = 1; 425ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 435ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 445ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @var array $vtable 455ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 465ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma protected $vtable; 475ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 485ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 495ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @var int $vtable_in_use 505ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 515ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma protected $vtable_in_use = 0; 525ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 535ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 545ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @var bool $nested 555ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 565ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma protected $nested = false; 575ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 585ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 595ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @var int $object_start 605ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 615ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma protected $object_start; 625ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 635ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 645ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @var array $vtables 655ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 665ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma protected $vtables = array(); 675ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 685ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 695ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @var int $num_vtables 705ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 715ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma protected $num_vtables = 0; 725ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 735ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 745ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @var int $vector_num_elems 755ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 765ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma protected $vector_num_elems = 0; 775ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 785ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 795ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @var bool $force_defaults 805ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 815ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma protected $force_defaults = false; 8269a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara /// @endcond 835ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 845ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 8569a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * Create a FlatBufferBuilder with a given initial size. 865ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * 875ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $initial_size initial byte buffer size. 885ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 895ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function __construct($initial_size) 905ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 915ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($initial_size <= 0) { 925ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $initial_size = 1; 935ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 945ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->space = $initial_size; 955ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->bb = $this->newByteBuffer($initial_size); 965ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 975ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 9869a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara /// @cond FLATBUFFERS_INTERNAL 995ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 1005ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * create new bytebuffer 1015ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * 1025ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $size 1035ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @return ByteBuffer 1045ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 1055ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma private function newByteBuffer($size) 1065ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 1075ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma return new ByteBuffer($size); 1085ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 1095ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 1105ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 11169a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * Returns the current ByteBuffer offset. 1125ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * 1135ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @return int 1145ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 1155ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function offset() 1165ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 1175ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma return $this->bb->capacity() - $this->space; 1185ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 1195ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 1205ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 1215ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * padding buffer 1225ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * 1235ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $byte_size 1245ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 1255ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function pad($byte_size) 1265ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 1275ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma for ($i = 0; $i < $byte_size; $i++) { 1285ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->bb->putByte(--$this->space, "\0"); 1295ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 1305ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 1315ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 1325ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 1335ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * prepare bytebuffer 1345ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * 1355ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $size 1365ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $additional_bytes 1375ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @throws \Exception 1385ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 1395ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function prep($size, $additional_bytes) 1405ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 1415ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($size > $this->minalign) { 1425ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->minalign = $size; 1435ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 1445ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 1455ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $align_size = ((~($this->bb->capacity() - $this->space + $additional_bytes)) + 1) & ($size - 1); 1465ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma while ($this->space < $align_size + $size + $additional_bytes) { 1475ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $old_buf_size = $this->bb->capacity(); 1485ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->bb = $this->growByteBuffer($this->bb); 1495ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->space += $this->bb->capacity() - $old_buf_size; 1505ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 1515ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 1525ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->pad($align_size); 1535ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 1545ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 1555ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 1565ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param ByteBuffer $bb 1575ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @return ByteBuffer 1585ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @throws \Exception 1595ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 1605ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma private static function growByteBuffer(ByteBuffer $bb) 1615ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 1625ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $old_buf_size = $bb->capacity(); 1635ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if (($old_buf_size & 0xC0000000) != 0) { 1645ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma throw new \Exception("FlatBuffers: cannot grow buffer beyond 2 gigabytes"); 1655ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 1665ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $new_buf_size = $old_buf_size << 1; 1675ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 1685ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $bb->setPosition(0); 1695ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $nbb = new ByteBuffer($new_buf_size); 1705ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 1715ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $nbb->setPosition($new_buf_size - $old_buf_size); 1725ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 1735ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma // TODO(chobie): is this little bit faster? 1745ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma //$nbb->_buffer = substr_replace($nbb->_buffer, $bb->_buffer, $new_buf_size - $old_buf_size, strlen($bb->_buffer)); 1755ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma for ($i = $new_buf_size - $old_buf_size, $j = 0; $j < strlen($bb->_buffer); $i++, $j++) { 1765ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $nbb->_buffer[$i] = $bb->_buffer[$j]; 1775ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 1785ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 1795ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma return $nbb; 1805ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 1815ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 1825ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 1835ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $x 1845ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 1855ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function putBool($x) 1865ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 1875ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->bb->put($this->space -= 1, chr((int)(bool)($x))); 1885ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 1895ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 1905ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 1915ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $x 1925ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 1935ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function putByte($x) 1945ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 1955ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->bb->put($this->space -= 1, chr($x)); 1965ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 1975ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 1985ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 1995ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $x 2005ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 2015ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function putSbyte($x) 2025ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 2035ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->bb->put($this->space -= 1, chr($x)); 2045ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 2055ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 2065ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 2075ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $x 2085ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 2095ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function putShort($x) 2105ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 2115ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->bb->putShort($this->space -= 2, $x); 2125ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 2135ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 2145ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 2155ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $x 2165ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 2175ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function putUshort($x) 2185ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 2195ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->bb->putUshort($this->space -= 2, $x); 2205ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 2215ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 2225ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 2235ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $x 2245ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 2255ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function putInt($x) 2265ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 2275ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->bb->putInt($this->space -= 4, $x); 2285ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 2295ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 2305ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 2315ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $x 2325ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 2335ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function putUint($x) 2345ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 2355ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($x > PHP_INT_MAX) { 236cf7e4b027ada723c782f0e25615c080f0bdac006Antoine Descamps throw new \InvalidArgumentException("your platform can't handle uint correctly. use 64bit machine."); 2375ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 2385ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 2395ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->bb->putUint($this->space -= 4, $x); 2405ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 2415ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 2425ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 2435ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $x 2445ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 2455ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function putLong($x) 2465ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 2475ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($x > PHP_INT_MAX) { 24864fa8ba9a99234edd7cf8b09820603c0a2c287eaAntoine Descamps throw new \InvalidArgumentException("Your platform can't handle long correctly. Use a 64bit machine."); 2495ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 2505ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 2515ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->bb->putLong($this->space -= 8, $x); 2525ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 2535ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 2545ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 2555ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $x 2565ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 2575ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function putUlong($x) 2585ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 2595ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($x > PHP_INT_MAX) { 26064fa8ba9a99234edd7cf8b09820603c0a2c287eaAntoine Descamps throw new \InvalidArgumentException("Your platform can't handle ulong correctly. This is a php limitation. Please wait for the extension release."); 2615ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 2625ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 2635ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->bb->putUlong($this->space -= 8, $x); 2645ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 2655ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 2665ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 2675ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $x 2685ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 2695ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function putFloat($x) 2705ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 2715ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->bb->putFloat($this->space -= 4, $x); 2725ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 2735ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 2745ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 2755ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $x 2765ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 2775ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function putDouble($x) 2785ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 2795ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->bb->putDouble($this->space -= 8, $x); 2805ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 28169a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara /// @endcond 2825ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 2835ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 28469a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * Add a `bool` to the buffer, properly aligned, and grows the buffer (if necessary). 28569a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * @param $x The `bool` to add to the buffer. 2865ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 2875ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addBool($x) 2885ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 2895ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->prep(1, 0); 2905ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->putBool($x); 2915ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 2925ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 2935ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 29469a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * Add a `byte` to the buffer, properly aligned, and grows the buffer (if necessary). 29569a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * @param $x The `byte` to add to the buffer. 2965ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 2975ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addByte($x) 2985ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 2995ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->prep(1, 0); 3005ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->putByte($x); 3015ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 3025ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 3035ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 30469a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * Add a `signed byte` to the buffer, properly aligned, and grows the buffer (if necessary). 30569a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * @param $x The `signed byte` to add to the buffer. 3065ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 3075ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addSbyte($x) 3085ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 3095ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->prep(1, 0); 3105ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->putSbyte($x); 3115ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 3125ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 3135ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 31469a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * Add a `short` to the buffer, properly aligned, and grows the buffer (if necessary). 31569a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * @param $x The `short` to add to the buffer. 3165ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 3175ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addShort($x) 3185ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 3195ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->prep(2, 0); 3205ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->putShort($x); 3215ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 3225ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 3235ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 32469a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * Add an `unsigned short` to the buffer, properly aligned, and grows the buffer (if necessary). 32569a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * @param $x The `unsigned short` to add to the buffer. 3265ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 3275ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addUshort($x) 3285ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 3295ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->prep(2, 0); 3305ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->putUshort($x); 3315ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 3325ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 3335ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 33469a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * Add an `int` to the buffer, properly aligned, and grows the buffer (if necessary). 33569a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * @param $x The `int` to add to the buffer. 3365ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 3375ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addInt($x) 3385ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 3395ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->prep(4, 0); 3405ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->putInt($x); 3415ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 3425ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 3435ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 34469a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * Add an `unsigned int` to the buffer, properly aligned, and grows the buffer (if necessary). 34569a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * @param $x The `unsigned int` to add to the buffer. 3465ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 3475ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addUint($x) 3485ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 3495ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->prep(4, 0); 3505ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->putUint($x); 3515ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 3525ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 3535ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 35469a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * Add a `long` to the buffer, properly aligned, and grows the buffer (if necessary). 35569a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * @param $x The `long` to add to the buffer. 3565ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 3575ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addLong($x) 3585ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 3595ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->prep(8, 0); 3605ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->putLong($x); 3615ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 3625ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 3635ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 36469a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * Add an `unsigned long` to the buffer, properly aligned, and grows the buffer (if necessary). 36569a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * @param $x The `unsigned long` to add to the buffer. 3665ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 3675ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addUlong($x) 3685ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 3695ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->prep(8, 0); 3705ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->putUlong($x); 3715ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 3725ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 3735ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 37469a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * Add a `float` to the buffer, properly aligned, and grows the buffer (if necessary). 37569a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * @param $x The `float` to add to the buffer. 3765ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 3775ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addFloat($x) 3785ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 3795ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->prep(4, 0); 3805ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->putFloat($x); 3815ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 3825ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 3835ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 38469a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * Add a `double` to the buffer, properly aligned, and grows the buffer (if necessary). 38569a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * @param $x The `double` to add to the buffer. 3865ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 3875ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addDouble($x) 3885ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 3895ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->prep(8, 0); 3905ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->putDouble($x); 3915ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 3925ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 39369a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara /// @cond FLATBUFFERS_INTERNAL 3945ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 3955ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $o 3965ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $x 3975ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $d 3985ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 3995ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addBoolX($o, $x, $d) 4005ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 4015ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($this->force_defaults || $x != $d) { 4025ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->addBool($x); 4035ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->slot($o); 4045ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 4055ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 4065ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 4075ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 4085ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $o 4095ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $x 4105ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $d 4115ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 4125ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addByteX($o, $x, $d) 4135ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 4145ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($this->force_defaults || $x != $d) { 4155ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->addByte($x); 4165ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->slot($o); 4175ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 4185ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 4195ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 4205ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 4215ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $o 4225ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $x 4235ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $d 4245ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 4255ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addSbyteX($o, $x, $d) 4265ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 4275ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($this->force_defaults || $x != $d) { 4285ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->addSbyte($x); 4295ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->slot($o); 4305ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 4315ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 4325ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 4335ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 4345ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $o 4355ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $x 4365ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $d 4375ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 4385ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addShortX($o, $x, $d) 4395ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 4405ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($this->force_defaults || $x != $d) { 4415ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->addShort($x); 4425ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->slot($o); 4435ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 4445ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 4455ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 4465ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 4475ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $o 4485ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $x 4495ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $d 4505ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 4515ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addUshortX($o, $x, $d) 4525ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 4535ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($this->force_defaults || $x != $d) { 4545ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->addUshort($x); 4555ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->slot($o); 4565ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 4575ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 4585ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 4595ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 4605ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $o 4615ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $x 4625ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $d 4635ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 4645ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addIntX($o, $x, $d) 4655ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 4665ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($this->force_defaults || $x != $d) { 4675ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->addInt($x); 4685ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->slot($o); 4695ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 4705ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 4715ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 4725ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 4735ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $o 4745ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $x 4755ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $d 4765ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 4775ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addUintX($o, $x, $d) 4785ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 4795ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($this->force_defaults || $x != $d) { 4805ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->addUint($x); 4815ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->slot($o); 4825ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 4835ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 4845ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 4855ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 4865ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $o 4875ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $x 4885ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $d 4895ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 4905ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addLongX($o, $x, $d) 4915ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 4925ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($this->force_defaults || $x != $d) { 4935ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->addLong($x); 4945ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->slot($o); 4955ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 4965ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 4975ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 4985ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 4995ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $o 5005ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $x 5015ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $d 5025ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 5035ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addUlongX($o, $x, $d) 5045ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 5055ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($this->force_defaults || $x != $d) { 5065ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->addUlong($x); 5075ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->slot($o); 5085ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 5095ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 5105ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 5115ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 5125ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 5135ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $o 5145ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $x 5155ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $d 5165ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 5175ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addFloatX($o, $x, $d) 5185ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 5195ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($this->force_defaults || $x != $d) { 5205ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->addFloat($x); 5215ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->slot($o); 5225ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 5235ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 5245ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 5255ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 5265ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $o 5275ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $x 5285ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $d 5295ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 5305ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addDoubleX($o, $x, $d) 5315ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 5325ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($this->force_defaults || $x != $d) { 5335ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->addDouble($x); 5345ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->slot($o); 5355ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 5365ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 5375ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 5385ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 5395ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $o 5405ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $x 5415ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $d 5425ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @throws \Exception 5435ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 5445ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addOffsetX($o, $x, $d) 5455ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 5465ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($this->force_defaults || $x != $d) { 5475ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->addOffset($x); 5485ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->slot($o); 5495ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 5505ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 55169a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara /// @endcond 5525ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 5535ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 55469a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * Adds on offset, relative to where it will be written. 55569a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * @param $off The offset to add to the buffer. 55669a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * @throws \Exception Throws an exception if `$off` is greater than the underlying ByteBuffer's 55769a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * offest. 5585ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 5595ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addOffset($off) 5605ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 5615ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->prep(Constants::SIZEOF_INT, 0); // Ensure alignment is already done 5625ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($off > $this->offset()) { 5635ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma throw new \Exception(""); 5645ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 5655ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 5665ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $off = $this->offset() - $off + Constants::SIZEOF_INT; 5675ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->putInt($off); 5685ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 5695ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 57069a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara /// @cond FLATBUFFERS_INTERNAL 5715ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 5725ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $elem_size 5735ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $num_elems 5745ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $alignment 5755ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @throws \Exception 5765ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 5775ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function startVector($elem_size, $num_elems, $alignment) 5785ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 5795ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->notNested(); 5805ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->vector_num_elems = $num_elems; 5815ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->prep(Constants::SIZEOF_INT, $elem_size * $num_elems); 5825ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->prep($alignment, $elem_size * $num_elems); // Just in case alignemnt > int; 5835ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 5845ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 5855ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 5865ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @return int 5875ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 5885ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function endVector() 5895ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 5905ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->putUint($this->vector_num_elems); 5915ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma return $this->offset(); 5925ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 5935ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 5945ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma protected function is_utf8($bytes) 5955ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 596dbecdf209de88ed0910ba602d326d33b5aefed93Antoine Descamps if (function_exists('mb_detect_encoding')) { 597dbecdf209de88ed0910ba602d326d33b5aefed93Antoine Descamps return (bool) mb_detect_encoding($bytes, 'UTF-8', true); 598dbecdf209de88ed0910ba602d326d33b5aefed93Antoine Descamps } 599ac1015e3c417ecb18d8f449a4e6aaaff3c4f53b9Wouter van Oortmerssen 6005ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $len = strlen($bytes); 6015ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($len < 1) { 6025ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /* NOTE: always return 1 when passed string is null */ 6035ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma return true; 6045ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 6055ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 6065ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma for ($j = 0, $i = 0; $i < $len; $i++) { 6075ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma // check ACII 6085ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($bytes[$j] == "\x09" || 6095ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $bytes[$j] == "\x0A" || 6105ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $bytes[$j] == "\x0D" || 6115ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma ($bytes[$j] >= "\x20" && $bytes[$j] <= "\x7E")) { 6125ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $j++; 6135ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma continue; 6145ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 6155ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 6165ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /* non-overlong 2-byte */ 6175ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ((($i+1) <= $len) && 6185ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma ($bytes[$j] >= "\xC2" && $bytes[$j] <= "\xDF" && 6195ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma ($bytes[$j+1] >= "\x80" && $bytes[$j+1] <= "\xBF"))) { 6205ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $j += 2; 6215ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $i++; 6225ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma continue; 6235ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 6245ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 6255ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /* excluding overlongs */ 6265ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ((($i + 2) <= $len) && 6275ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $bytes[$j] == "\xE0" && 6285ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma ($bytes[$j+1] >= "\xA0" && $bytes[$j+1] <= "\xBF" && 6295ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma ($bytes[$j+2] >= "\x80" && $bytes[$j+2] <= "\xBF"))) { 6305ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $bytes += 3; 6315ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $i +=2; 6325ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma continue; 6335ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 6345ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 6355ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /* straight 3-byte */ 6365ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ((($i+2) <= $len) && 6375ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma (($bytes[$j] >= "\xE1" && $bytes[$j] <= "\xEC") || 6385ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $bytes[$j] == "\xEE" || 6395ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $bytes[$j] = "\xEF") && 6405ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma ($bytes[$j+1] >= "\x80" && $bytes[$j+1] <= "\xBF") && 6415ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma ($bytes[$j+2] >= "\x80" && $bytes[$j+2] <= "\xBF")) { 6425ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $j += 3; 6435ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $i += 2; 6445ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma continue; 6455ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 6465ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 6475ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /* excluding surrogates */ 6485ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ((($i+2) <= $len) && 6495ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $bytes[$j] == "\xED" && 6505ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma ($bytes[$j+1] >= "\x80" && $bytes[$j+1] <= "\x9f" && 6515ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma ($bytes[$j+2] >= "\x80" && $bytes[$j+2] <= "\xBF"))) { 6525ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $j += 3; 6535ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $i += 2; 6545ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma continue; 6555ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 6565ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 6575ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /* planes 1-3 */ 6585ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ((($i + 3) <= $len) && 6595ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $bytes[$j] == "\xF0" && 6605ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma ($bytes[$j+1] >= "\x90" && $bytes[$j+1] <= "\xBF") && 6615ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma ($bytes[$j+2] >= "\x80" && $bytes[$j+2] <= "\xBF") && 6625ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma ($bytes[$j+3] >= "\x80" && $bytes[$j+3] <= "\xBF")) { 6635ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $j += 4; 6645ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $i += 3; 6655ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma continue; 6665ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 6675ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 6685ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 6695ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /* planes 4-15 */ 6705ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ((($i+3) <= $len) && 6715ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $bytes[$j] >= "\xF1" && $bytes[$j] <= "\xF3" && 6725ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $bytes[$j+1] >= "\x80" && $bytes[$j+1] <= "\xBF" && 6735ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $bytes[$j+2] >= "\x80" && $bytes[$j+2] <= "\xBF" && 6745ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $bytes[$j+3] >= "\x80" && $bytes[$j+3] <= "\xBF" 6755ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma ) { 6765ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $j += 4; 6775ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $i += 3; 6785ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma continue; 6795ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 6805ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 6815ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /* plane 16 */ 6825ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ((($i+3) <= $len) && 6835ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $bytes[$j] == "\xF4" && 6845ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma ($bytes[$j+1] >= "\x80" && $bytes[$j+1] <= "\x8F") && 6855ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma ($bytes[$j+2] >= "\x80" && $bytes[$j+2] <= "\xBF") && 6865ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma ($bytes[$j+3] >= "\x80" && $bytes[$j+3] <= "\xBF") 6875ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma ) { 6885ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $bytes += 4; 6895ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $i += 3; 6905ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma continue; 6915ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 6925ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 6935ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 6945ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma return false; 6955ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 6965ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 6975ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma return true; 6985ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 69969a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara /// @endcond 7005ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 7015ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 70269a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * Encode the string `$s` in the buffer using UTF-8. 70369a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * @param string $s The string to encode. 70469a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * @return int The offset in the buffer where the encoded string starts. 70569a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * @throws InvalidArgumentException Thrown if the input string `$s` is not 70669a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * UTF-8. 7075ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 7085ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function createString($s) 7095ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 7105ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if (!$this->is_utf8($s)) { 7115ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma throw new \InvalidArgumentException("string must be utf-8 encoded value."); 7125ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 7135ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 7145ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->notNested(); 7155ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->addByte(0); // null terminated 7165ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->startVector(1, strlen($s), 1); 7175ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->space -= strlen($s); 7185ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma for ($i = $this->space, $j = 0 ; $j < strlen($s) ; $i++, $j++) { 7195ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->bb->_buffer[$i] = $s[$j]; 7205ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 7215ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma return $this->endVector(); 7225ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 7235ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 72469a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara /// @cond FLATBUFFERS_INTERNAL 7255ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 7265ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @throws \Exception 7275ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 7285ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function notNested() 7295ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 7305ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($this->nested) { 7315ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma throw new \Exception("FlatBuffers; object serialization must not be nested"); 7325ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 7335ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 7345ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 7355ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 7365ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $obj 7375ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @throws \Exception 7385ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 7395ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function nested($obj) 7405ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 7415ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($obj != $this->offset()) { 7425ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma throw new \Exception("FlatBuffers: struct must be serialized inline"); 7435ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 7445ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 7455ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 7465ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 7475ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $numfields 7485ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @throws \Exception 7495ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 7505ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function startObject($numfields) 7515ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 7525ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->notNested(); 7535ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($this->vtable == null || count($this->vtable) < $numfields) { 7545ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->vtable = array(); 7555ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 7565ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 7575ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->vtable_in_use = $numfields; 7585ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma for ($i = 0; $i < $numfields; $i++) { 7595ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->vtable[$i] = 0; 7605ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 7615ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 7625ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->nested = true; 7635ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->object_start = $this->offset(); 7645ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 7655ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 7665ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 7675ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $voffset 7685ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $x 7695ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $d 7705ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @throws \Exception 7715ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 7725ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addStructX($voffset, $x, $d) 7735ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 7745ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($x != $d) { 7755ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->nested($x); 7765ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->slot($voffset); 7775ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 7785ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 7795ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 7805ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 7815ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $voffset 7825ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $x 7835ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $d 7845ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @throws \Exception 7855ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 7865ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function addStruct($voffset, $x, $d) 7875ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 7885ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($x != $d) { 7895ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->nested($x); 7905ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->slot($voffset); 7915ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 7925ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 7935ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 7945ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 7955ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $voffset 7965ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 7975ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function slot($voffset) 7985ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 7995ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->vtable[$voffset] = $this->offset(); 8005ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 8015ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 8025ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 8035ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @return int 8045ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @throws \Exception 8055ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 8065ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function endObject() 8075ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 8085ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($this->vtable == null || !$this->nested) { 8095ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma throw new \Exception("FlatBuffers: endObject called without startObject"); 8105ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 8115ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 8125ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->addInt(0); 8135ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $vtableloc = $this->offset(); 8145ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 815ac1015e3c417ecb18d8f449a4e6aaaff3c4f53b9Wouter van Oortmerssen $i = $this->vtable_in_use -1; 816ac1015e3c417ecb18d8f449a4e6aaaff3c4f53b9Wouter van Oortmerssen // Trim trailing zeroes. 817ac1015e3c417ecb18d8f449a4e6aaaff3c4f53b9Wouter van Oortmerssen for (; $i >= 0 && $this->vtable[$i] == 0; $i--) {} 818ac1015e3c417ecb18d8f449a4e6aaaff3c4f53b9Wouter van Oortmerssen $trimmed_size = $i + 1; 819ac1015e3c417ecb18d8f449a4e6aaaff3c4f53b9Wouter van Oortmerssen for (; $i >= 0; $i--) { 8205ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $off = ($this->vtable[$i] != 0) ? $vtableloc - $this->vtable[$i] : 0; 8215ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->addShort($off); 8225ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 8235ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 8245ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $standard_fields = 2; // the fields below 8255ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->addShort($vtableloc - $this->object_start); 826ac1015e3c417ecb18d8f449a4e6aaaff3c4f53b9Wouter van Oortmerssen $this->addShort(($trimmed_size + $standard_fields) * Constants::SIZEOF_SHORT); 8275ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 8285ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma // search for an existing vtable that matches the current one. 8295ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $existing_vtable = 0; 8305ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 8315ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma for ($i = 0; $i < $this->num_vtables; $i++) { 8325ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $vt1 = $this->bb->capacity() - $this->vtables[$i]; 8335ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $vt2 = $this->space; 8345ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 8355ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $len = $this->bb->getShort($vt1); 8365ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 8375ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($len == $this->bb->getShort($vt2)) { 8385ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma for ($j = Constants::SIZEOF_SHORT; $j < $len; $j += Constants::SIZEOF_SHORT) { 8395ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($this->bb->getShort($vt1 + $j) != $this->bb->getShort($vt2 + $j)) { 8405ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma continue 2; 8415ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 8425ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 8435ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $existing_vtable = $this->vtables[$i]; 8445ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma break; 8455ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 8465ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 8475ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 8485ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($existing_vtable != 0) { 8495ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma // Found a match: 8505ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma // Remove the current vtable 8515ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->space = $this->bb->capacity() - $vtableloc; 8525ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->bb->putInt($this->space, $existing_vtable - $vtableloc); 8535ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } else { 8545ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma // No Match: 8555ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma // Add the location of the current vtable to the list of vtables 8565ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($this->num_vtables == count($this->vtables)) { 8575ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $vtables = $this->vtables; 8585ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->vtables = array(); 8595ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma // copy of 8605ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma for ($i = 0; $i < count($vtables) * 2; $i++) { 8615ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->vtables[$i] = ($i < count($vtables)) ? $vtables[$i] : 0; 8625ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 8635ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 8645ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->vtables[$this->num_vtables++] = $this->offset(); 8655ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->bb->putInt($this->bb->capacity() - $vtableloc, $this->offset() - $vtableloc); 8665ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 8675ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 8685ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->nested = false; 8695ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->vtable = null; 8705ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma return $vtableloc; 8715ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 8725ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 8735ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 8745ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $table 8755ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @param $field 8765ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @throws \Exception 8775ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 8785ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function required($table, $field) 8795ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 8805ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $table_start = $this->bb->capacity() - $table; 8815ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $vtable_start = $table_start - $this->bb->getInt($table_start); 8825ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $ok = $this->bb->getShort($vtable_start + $field) != 0; 8835ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 8845ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if (!$ok) { 8855ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma throw new \Exception("FlatBuffers: field " . $field . " must be set"); 8865ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 8875ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 88869a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara /// @endcond 8895ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 8905ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 89169a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * Finalize a buffer, pointing to the given `$root_table`. 89269a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * @param $root_table An offest to be added to the buffer. 89369a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * @param $file_identifier A FlatBuffer file identifier to be added to the 89469a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * buffer before `$root_table`. This defaults to `null`. 89569a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * @throws InvalidArgumentException Thrown if an invalid `$identifier` is 89669a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * given, where its length is not equal to 89769a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * `Constants::FILE_IDENTIFIER_LENGTH`. 8985ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 8995ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function finish($root_table, $identifier = null) 9005ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 9015ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if ($identifier == null) { 9025ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->prep($this->minalign, Constants::SIZEOF_INT); 9035ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->addOffset($root_table); 9045ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->bb->setPosition($this->space); 9055ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } else { 9065ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->prep($this->minalign, Constants::SIZEOF_INT + Constants::FILE_IDENTIFIER_LENGTH); 9075ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma if (strlen($identifier) != Constants::FILE_IDENTIFIER_LENGTH) { 9085ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma throw new \InvalidArgumentException( 9095ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma sprintf("FlatBuffers: file identifier must be length %d", 9105ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma Constants::FILE_IDENTIFIER_LENGTH)); 9115ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 9125ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 9135ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma for ($i = Constants::FILE_IDENTIFIER_LENGTH - 1; $i >= 0; 9145ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $i--) { 9155ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->addByte(ord($identifier[$i])); 9165ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 9175ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->finish($root_table); 9185ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 9195ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 9205ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 9215ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 92269a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * In order to save space, fields that are set to their default value don't 92369a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * get serialized into the buffer. 92469a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * @param bool $forceDefaults When set to `true`, always serializes default 92569a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * values. 9265ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 9275ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function forceDefaults($forceDefaults) 9285ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 9295ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->force_defaults = $forceDefaults; 9305ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 9315ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 9325ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 93369a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * Get the ByteBuffer representing the FlatBuffer. 93469a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * @return ByteBuffer The ByteBuffer containing the FlatBuffer data. 9355ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 9365ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function dataBuffer() 9375ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 9385ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma return $this->bb; 9395ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 9405ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 94169a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara /// @cond FLATBUFFERS_INTERNAL 9425ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 9435ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma * @return int 9445ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 9455ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function dataStart() 9465ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 9475ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma return $this->space; 9485ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 94969a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara /// @endcond 9505ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 9515ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma /** 95269a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * Utility function to copy and return the FlatBuffer data from the 95369a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * underlying ByteBuffer. 95469a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * @return string A string (representing a byte[]) that contains a copy 95569a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara * of the FlatBuffer data. 9565ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma */ 9575ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma public function sizedByteArray() 9585ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma { 9595ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $start = $this->space; 9605ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $length = $this->bb->capacity() - $this->space; 9615ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 9625ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $result = str_repeat("\0", $length); 9635ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->bb->setPosition($start); 9645ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma $this->bb->getX($result); 9655ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma 9665ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma return $result; 9675ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma } 9685ce86826718c938e38b0f57e4bc5840fe15a1565Shuhei Taunma} 96969a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara 97069a31b807a85e9a5ca4efb839f37ecb6dcf3eed5Mark Klara/// @} 971