Fix vector of strings for Java

Change-Id: If032b450230b15224b2661836c8a740398d207c5
This commit is contained in:
Bob Potter 2014-08-08 21:59:28 -05:00 committed by Wouter van Oortmerssen
parent 5da7bda826
commit 39d4b7e2bf
6 changed files with 18 additions and 3 deletions

View File

@ -41,7 +41,6 @@ public class Table {
// Create a java String from UTF-8 data stored inside the flatbuffer.
protected String __string(int offset) {
offset += bb_pos;
offset += bb.getInt(offset);
return new String(bb.array(), offset + SIZEOF_INT, bb.getInt(offset), Charset.forName("UTF-8"));
}

View File

@ -247,7 +247,7 @@ static void GenStruct(StructDef &struct_def,
}
break;
case BASE_TYPE_STRING:
code += offset_prefix + getter +"(o) : null";
code += offset_prefix + getter +"(o + bb_pos) : null";
break;
case BASE_TYPE_VECTOR: {
auto vectortype = field.value.type.VectorType();

View File

@ -52,6 +52,8 @@ class JavaTest {
// We set up the same values as monsterdata.json:
int str = fbb.createString("MyMonster");
int test1 = fbb.createString("test1");
int test2 = fbb.createString("test2");
Monster.startInventoryVector(fbb, 5);
for (byte i = 4; i >=0; i--) fbb.addByte(i);
@ -66,6 +68,11 @@ class JavaTest {
Test.createTest(fbb, (short)30, (byte)40);
int test4 = fbb.endVector();
Monster.startTestarrayofstringVector(fbb, 2);
fbb.addOffset(test2);
fbb.addOffset(test1);
int testArrayOfString = fbb.endVector();
Monster.startMonster(fbb);
Monster.addPos(fbb, Vec3.createVec3(fbb, 1.0f, 2.0f, 3.0f, 3.0,
(byte)4, (short)5, (byte)6));
@ -75,6 +82,7 @@ class JavaTest {
Monster.addTestType(fbb, (byte)1);
Monster.addTest(fbb, mon2);
Monster.addTest4(fbb, test4);
Monster.addTestarrayofstring(fbb, testArrayOfString);
int mon = Monster.endMonster(fbb);
fbb.finish(mon);
@ -135,6 +143,10 @@ class JavaTest {
Test test_1 = monster.test4(1);
TestEq(monster.test4Length(), 2);
TestEq(test_0.a() + test_0.b() + test_1.a() + test_1.b(), 100);
TestEq(monster.testarrayofstringLength(), 2);
TestEq(monster.testarrayofstring(0),"test1");
TestEq(monster.testarrayofstring(1),"test2");
}
static <T> void TestEq(T a, T b) {

View File

@ -14,7 +14,7 @@ public class Monster extends Table {
public Vec3 pos(Vec3 obj) { int o = __offset(4); return o != 0 ? obj.__init(o + bb_pos, bb) : null; }
public short mana() { int o = __offset(6); return o != 0 ? bb.getShort(o + bb_pos) : 150; }
public short hp() { int o = __offset(8); return o != 0 ? bb.getShort(o + bb_pos) : 100; }
public String name() { int o = __offset(10); return o != 0 ? __string(o) : null; }
public String name() { int o = __offset(10); return o != 0 ? __string(o + bb_pos) : null; }
public byte inventory(int j) { int o = __offset(14); return o != 0 ? bb.get(__vector(o) + j * 1) : 0; }
public int inventoryLength() { int o = __offset(14); return o != 0 ? __vector_len(o) : 0; }
public byte color() { int o = __offset(16); return o != 0 ? bb.get(o + bb_pos) : 8; }

Binary file not shown.

View File

@ -32,5 +32,9 @@
a: 30,
b: 40
}
],
testarrayofstring: [
"test1",
"test2"
]
}