mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-02 04:04:19 +00:00
Merge pull request #2790 from chobie/php-table-fix
(PHP) fixes getting indirect table, also fixes getInt method on 32bit machine
This commit is contained in:
@@ -399,8 +399,13 @@ class ByteBuffer
|
||||
$sign = $index + (ByteBuffer::isLittleEndian() ? 3 : 0);
|
||||
$issigned = isset($this->_buffer[$sign]) && ord($this->_buffer[$sign]) & 0x80;
|
||||
|
||||
// 4294967296 = 1 << 32 = Maximum unsigned 32-bit int
|
||||
return $issigned ? $result - 4294967296 : $result;
|
||||
if (PHP_INT_SIZE > 4) {
|
||||
// 4294967296 = 1 << 32 = Maximum unsigned 32-bit int
|
||||
return $issigned ? $result - 4294967296 : $result;
|
||||
} else {
|
||||
// 32bit / Windows treated number as signed integer.
|
||||
return $result;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -249,7 +249,13 @@ namespace php {
|
||||
NumToString(field.value.offset) +
|
||||
");\n";
|
||||
code += Indent + Indent;
|
||||
code += "return $o != 0 ? $obj->init($o + $this->bb_pos, $this->bb) : ";
|
||||
code += "return $o != 0 ? $obj->init(";
|
||||
if (field.value.type.struct_def->fixed)
|
||||
{
|
||||
code += "$o + $this->bb_pos, $this->bb) : ";
|
||||
} else {
|
||||
code += "$this->__indirect($o + $this->bb_pos), $this->bb) : ";
|
||||
}
|
||||
code += GenDefaultValue(field.value) + ";\n";
|
||||
code += Indent + "}\n\n";
|
||||
}
|
||||
|
||||
@@ -188,7 +188,7 @@ class Monster extends Table
|
||||
{
|
||||
$obj = new Monster();
|
||||
$o = $this->__offset(28);
|
||||
return $o != 0 ? $obj->init($o + $this->bb_pos, $this->bb) : 0;
|
||||
return $o != 0 ? $obj->init($this->__indirect($o + $this->bb_pos), $this->bb) : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -214,7 +214,7 @@ class Monster extends Table
|
||||
{
|
||||
$obj = new Stat();
|
||||
$o = $this->__offset(32);
|
||||
return $o != 0 ? $obj->init($o + $this->bb_pos, $this->bb) : 0;
|
||||
return $o != 0 ? $obj->init($this->__indirect($o + $this->bb_pos), $this->bb) : 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -37,6 +37,9 @@
|
||||
"test1",
|
||||
"test2"
|
||||
],
|
||||
enemy: {
|
||||
name: "Fred"
|
||||
},
|
||||
testarrayofbools:[
|
||||
true, false, true
|
||||
],
|
||||
|
||||
Binary file not shown.
@@ -30,6 +30,10 @@ function main()
|
||||
|
||||
// We set up the same values as monsterdata.json:
|
||||
$str = $fbb->createString("MyMonster");
|
||||
$name = $fbb->createString('Fred');
|
||||
\MyGame\Example\Monster::startMonster($fbb);
|
||||
\MyGame\Example\Monster::addName($fbb, $name);
|
||||
$enemy = \MyGame\Example\Monster::endMonster($fbb);
|
||||
|
||||
$inv = \MyGame\Example\Monster::CreateInventoryVector($fbb, array(0, 1, 2, 3, 4));
|
||||
|
||||
@@ -62,6 +66,7 @@ function main()
|
||||
\MyGame\Example\Monster::AddTest($fbb, $mon2);
|
||||
\MyGame\Example\Monster::AddTest4($fbb, $test4);
|
||||
\MyGame\Example\Monster::AddTestarrayofstring($fbb, $testArrayOfString);
|
||||
\MyGame\Example\Monster::AddEnemy($fbb, $enemy);
|
||||
\MyGame\Example\Monster::AddTestbool($fbb, false);
|
||||
$mon = \MyGame\Example\Monster::EndMonster($fbb);
|
||||
|
||||
@@ -132,6 +137,10 @@ function test_buffer(Assert $assert, Google\FlatBuffers\ByteBuffer $bb) {
|
||||
$assert->strictEqual($monster->GetTestarrayofstringLength(), 2);
|
||||
$assert->strictEqual($monster->GetTestarrayofstring(0), 'test1');
|
||||
$assert->strictEqual($monster->GetTestarrayofstring(1), 'test2');
|
||||
|
||||
$fred = $monster->getEnemy();
|
||||
$assert->Equal('Fred', $fred->getName());
|
||||
|
||||
$assert->strictEqual($monster->GetTestbool(), false);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user