GetShort() public method

public GetShort ( int offset ) : short
offset int
return short
Esempio n. 1
0
    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));
    }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        // 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);
        }
Esempio n. 4
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();
            }
            }
        }
Esempio n. 6
0
        // 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);
        }