private int GetMsgID(FlatBuffers.ByteBuffer bb) { int bb_pos = bb.GetInt(0); int vtable = bb_pos - bb.GetInt(bb_pos); var o = 4 < bb.GetShort(vtable) ? (int)bb.GetShort(vtable + 4) : 0; return(bb.GetInt(o + bb_pos)); }
public static int __offset(int vtableOffset, int offset, ByteBuffer bb) { int vtable = bb.Length - offset; return((int)bb.GetShort(vtable + vtableOffset - bb.GetInt(vtable)) + vtable); }
// Look up a field in the vtable, return an offset into the object, or 0 if the field is not // present. public int __offset(int vtableOffset) { int vtable = bb_pos - bb.GetInt(bb_pos); return(vtableOffset < bb.GetShort(vtable) ? (int)bb.GetShort(vtable + vtableOffset) : 0); }
public int EndObject() { if (_vtable == null) { throw new InvalidOperationException( "Flatbuffers: calling endObject without a startObject"); } AddInt((int)0); var vtableloc = Offset(); // Write out the current vtable. for (int i = _vtable.Length - 1; i >= 0; i--) { // Offset relative to the start of the table. short off = (short)(_vtable[i] != 0 ? vtableloc - _vtable[i] : 0); AddShort(off); } const int standardFields = 2; // The fields below: AddShort((short)(vtableloc - _objectStart)); AddShort((short)((_vtable.Length + standardFields) * sizeof(short))); // Search for an existing vtable that matches the current one. int existingVtable = 0; for (int i = 0; i < _numVtables; i++) { int vt1 = _bb.Length - _vtables[i]; int vt2 = _space; short len = _bb.GetShort(vt1); if (len == _bb.GetShort(vt2)) { for (int j = sizeof(short); j < len; j += sizeof(short)) { if (_bb.GetShort(vt1 + j) != _bb.GetShort(vt2 + j)) { goto endLoop; } } existingVtable = _vtables[i]; break; } endLoop : { } } if (existingVtable != 0) { // Found a match: // Remove the current vtable. _space = _bb.Length - vtableloc; // Point table to existing vtable. _bb.PutInt(_space, existingVtable - vtableloc); } else { // No match: // Add the location of the current vtable to the list of // vtables. if (_numVtables == _vtables.Length) { // Arrays.CopyOf(vtables num_vtables * 2); var newvtables = new int[_numVtables * 2]; Array.Copy(_vtables, newvtables, _vtables.Length); _vtables = newvtables; } ; _vtables[_numVtables++] = Offset(); // Point table to current vtable. _bb.PutInt(_bb.Length - vtableloc, Offset() - vtableloc); } _vtable = null; return(vtableloc); }
private object DeserializePropertyValue(int structBase, FieldTypeDefinition field) { var typeModel = field.TypeModel; var offset = GetFieldOffset(structBase, field.Offset); if (offset == 0) { // Nothing in buffer, use default value return(field.DefaultValueProvider.GetDefaultValue(field.TypeModel.Type)); } switch (typeModel.BaseType) { case BaseType.Bool: { return(_buffer.Get(offset + structBase) == 1); } case BaseType.Char: { return(_buffer.GetSbyte(offset + structBase)); } case BaseType.UType: case BaseType.UChar: { return(_buffer.Get(offset + structBase)); } case BaseType.Short: { return(_buffer.GetShort(offset + structBase)); } case BaseType.UShort: { return(_buffer.GetUshort(offset + structBase)); } case BaseType.Int: { return(_buffer.GetInt(offset + structBase)); } case BaseType.UInt: { return(_buffer.GetUint(offset + structBase)); } case BaseType.Long: { return(_buffer.GetLong(offset + structBase)); } case BaseType.ULong: { return(_buffer.GetUlong(offset + structBase)); } case BaseType.Float: { return(_buffer.GetFloat(offset + structBase)); } case BaseType.Double: { return(_buffer.GetDouble(offset + structBase)); } case BaseType.String: case BaseType.Struct: case BaseType.Vector: case BaseType.Union: { return(DeserializeReferenceType(structBase, offset, field)); } default: { throw new InvalidOperationException(); } } }
// Look up a field in the vtable, return an offset into the object, or 0 if the field is not // present. protected int __offset(int vtableOffset) { int vtable = bb_pos - bb.GetInt(bb_pos); return(vtableOffset < bb.GetShort(vtable) ? bb.GetShort(vtable + vtableOffset) : 0); }