Home | History | Annotate | Download | only in go
      1 package flatbuffers
      2 
      3 // Table wraps a byte slice and provides read access to its data.
      4 //
      5 // The variable `Pos` indicates the root of the FlatBuffers object therein.
      6 type Table struct {
      7 	Bytes []byte
      8 	Pos   UOffsetT // Always < 1<<31.
      9 }
     10 
     11 // Offset provides access into the Table's vtable.
     12 //
     13 // Fields which are deprecated are ignored by checking against the vtable's length.
     14 func (t *Table) Offset(vtableOffset VOffsetT) VOffsetT {
     15 	vtable := UOffsetT(SOffsetT(t.Pos) - t.GetSOffsetT(t.Pos))
     16 	if vtableOffset < t.GetVOffsetT(vtable) {
     17 		return t.GetVOffsetT(vtable + UOffsetT(vtableOffset))
     18 	}
     19 	return 0
     20 }
     21 
     22 // Indirect retrieves the relative offset stored at `offset`.
     23 func (t *Table) Indirect(off UOffsetT) UOffsetT {
     24 	return off + GetUOffsetT(t.Bytes[off:])
     25 }
     26 
     27 // String gets a string from data stored inside the flatbuffer.
     28 func (t *Table) String(off UOffsetT) string {
     29 	b := t.ByteVector(off)
     30 	return byteSliceToString(b)
     31 }
     32 
     33 // ByteVector gets a byte slice from data stored inside the flatbuffer.
     34 func (t *Table) ByteVector(off UOffsetT) []byte {
     35 	off += GetUOffsetT(t.Bytes[off:])
     36 	start := off + UOffsetT(SizeUOffsetT)
     37 	length := GetUOffsetT(t.Bytes[off:])
     38 	return t.Bytes[start : start+length]
     39 }
     40 
     41 // VectorLen retrieves the length of the vector whose offset is stored at
     42 // "off" in this object.
     43 func (t *Table) VectorLen(off UOffsetT) int {
     44 	off += t.Pos
     45 	off += GetUOffsetT(t.Bytes[off:])
     46 	return int(GetUOffsetT(t.Bytes[off:]))
     47 }
     48 
     49 // Vector retrieves the start of data of the vector whose offset is stored
     50 // at "off" in this object.
     51 func (t *Table) Vector(off UOffsetT) UOffsetT {
     52 	off += t.Pos
     53 	x := off + GetUOffsetT(t.Bytes[off:])
     54 	// data starts after metadata containing the vector length
     55 	x += UOffsetT(SizeUOffsetT)
     56 	return x
     57 }
     58 
     59 // Union initializes any Table-derived type to point to the union at the given
     60 // offset.
     61 func (t *Table) Union(t2 *Table, off UOffsetT) {
     62 	off += t.Pos
     63 	t2.Pos = off + t.GetUOffsetT(off)
     64 	t2.Bytes = t.Bytes
     65 }
     66 
     67 // GetBool retrieves a bool at the given offset.
     68 func (t *Table) GetBool(off UOffsetT) bool {
     69 	return GetBool(t.Bytes[off:])
     70 }
     71 
     72 // GetByte retrieves a byte at the given offset.
     73 func (t *Table) GetByte(off UOffsetT) byte {
     74 	return GetByte(t.Bytes[off:])
     75 }
     76 
     77 // GetUint8 retrieves a uint8 at the given offset.
     78 func (t *Table) GetUint8(off UOffsetT) uint8 {
     79 	return GetUint8(t.Bytes[off:])
     80 }
     81 
     82 // GetUint16 retrieves a uint16 at the given offset.
     83 func (t *Table) GetUint16(off UOffsetT) uint16 {
     84 	return GetUint16(t.Bytes[off:])
     85 }
     86 
     87 // GetUint32 retrieves a uint32 at the given offset.
     88 func (t *Table) GetUint32(off UOffsetT) uint32 {
     89 	return GetUint32(t.Bytes[off:])
     90 }
     91 
     92 // GetUint64 retrieves a uint64 at the given offset.
     93 func (t *Table) GetUint64(off UOffsetT) uint64 {
     94 	return GetUint64(t.Bytes[off:])
     95 }
     96 
     97 // GetInt8 retrieves a int8 at the given offset.
     98 func (t *Table) GetInt8(off UOffsetT) int8 {
     99 	return GetInt8(t.Bytes[off:])
    100 }
    101 
    102 // GetInt16 retrieves a int16 at the given offset.
    103 func (t *Table) GetInt16(off UOffsetT) int16 {
    104 	return GetInt16(t.Bytes[off:])
    105 }
    106 
    107 // GetInt32 retrieves a int32 at the given offset.
    108 func (t *Table) GetInt32(off UOffsetT) int32 {
    109 	return GetInt32(t.Bytes[off:])
    110 }
    111 
    112 // GetInt64 retrieves a int64 at the given offset.
    113 func (t *Table) GetInt64(off UOffsetT) int64 {
    114 	return GetInt64(t.Bytes[off:])
    115 }
    116 
    117 // GetFloat32 retrieves a float32 at the given offset.
    118 func (t *Table) GetFloat32(off UOffsetT) float32 {
    119 	return GetFloat32(t.Bytes[off:])
    120 }
    121 
    122 // GetFloat64 retrieves a float64 at the given offset.
    123 func (t *Table) GetFloat64(off UOffsetT) float64 {
    124 	return GetFloat64(t.Bytes[off:])
    125 }
    126 
    127 // GetUOffsetT retrieves a UOffsetT at the given offset.
    128 func (t *Table) GetUOffsetT(off UOffsetT) UOffsetT {
    129 	return GetUOffsetT(t.Bytes[off:])
    130 }
    131 
    132 // GetVOffsetT retrieves a VOffsetT at the given offset.
    133 func (t *Table) GetVOffsetT(off UOffsetT) VOffsetT {
    134 	return GetVOffsetT(t.Bytes[off:])
    135 }
    136 
    137 // GetSOffsetT retrieves a SOffsetT at the given offset.
    138 func (t *Table) GetSOffsetT(off UOffsetT) SOffsetT {
    139 	return GetSOffsetT(t.Bytes[off:])
    140 }
    141 
    142 // GetBoolSlot retrieves the bool that the given vtable location
    143 // points to. If the vtable value is zero, the default value `d`
    144 // will be returned.
    145 func (t *Table) GetBoolSlot(slot VOffsetT, d bool) bool {
    146 	off := t.Offset(slot)
    147 	if off == 0 {
    148 		return d
    149 	}
    150 
    151 	return t.GetBool(t.Pos + UOffsetT(off))
    152 }
    153 
    154 // GetByteSlot retrieves the byte that the given vtable location
    155 // points to. If the vtable value is zero, the default value `d`
    156 // will be returned.
    157 func (t *Table) GetByteSlot(slot VOffsetT, d byte) byte {
    158 	off := t.Offset(slot)
    159 	if off == 0 {
    160 		return d
    161 	}
    162 
    163 	return t.GetByte(t.Pos + UOffsetT(off))
    164 }
    165 
    166 // GetInt8Slot retrieves the int8 that the given vtable location
    167 // points to. If the vtable value is zero, the default value `d`
    168 // will be returned.
    169 func (t *Table) GetInt8Slot(slot VOffsetT, d int8) int8 {
    170 	off := t.Offset(slot)
    171 	if off == 0 {
    172 		return d
    173 	}
    174 
    175 	return t.GetInt8(t.Pos + UOffsetT(off))
    176 }
    177 
    178 // GetUint8Slot retrieves the uint8 that the given vtable location
    179 // points to. If the vtable value is zero, the default value `d`
    180 // will be returned.
    181 func (t *Table) GetUint8Slot(slot VOffsetT, d uint8) uint8 {
    182 	off := t.Offset(slot)
    183 	if off == 0 {
    184 		return d
    185 	}
    186 
    187 	return t.GetUint8(t.Pos + UOffsetT(off))
    188 }
    189 
    190 // GetInt16Slot retrieves the int16 that the given vtable location
    191 // points to. If the vtable value is zero, the default value `d`
    192 // will be returned.
    193 func (t *Table) GetInt16Slot(slot VOffsetT, d int16) int16 {
    194 	off := t.Offset(slot)
    195 	if off == 0 {
    196 		return d
    197 	}
    198 
    199 	return t.GetInt16(t.Pos + UOffsetT(off))
    200 }
    201 
    202 // GetUint16Slot retrieves the uint16 that the given vtable location
    203 // points to. If the vtable value is zero, the default value `d`
    204 // will be returned.
    205 func (t *Table) GetUint16Slot(slot VOffsetT, d uint16) uint16 {
    206 	off := t.Offset(slot)
    207 	if off == 0 {
    208 		return d
    209 	}
    210 
    211 	return t.GetUint16(t.Pos + UOffsetT(off))
    212 }
    213 
    214 // GetInt32Slot retrieves the int32 that the given vtable location
    215 // points to. If the vtable value is zero, the default value `d`
    216 // will be returned.
    217 func (t *Table) GetInt32Slot(slot VOffsetT, d int32) int32 {
    218 	off := t.Offset(slot)
    219 	if off == 0 {
    220 		return d
    221 	}
    222 
    223 	return t.GetInt32(t.Pos + UOffsetT(off))
    224 }
    225 
    226 // GetUint32Slot retrieves the uint32 that the given vtable location
    227 // points to. If the vtable value is zero, the default value `d`
    228 // will be returned.
    229 func (t *Table) GetUint32Slot(slot VOffsetT, d uint32) uint32 {
    230 	off := t.Offset(slot)
    231 	if off == 0 {
    232 		return d
    233 	}
    234 
    235 	return t.GetUint32(t.Pos + UOffsetT(off))
    236 }
    237 
    238 // GetInt64Slot retrieves the int64 that the given vtable location
    239 // points to. If the vtable value is zero, the default value `d`
    240 // will be returned.
    241 func (t *Table) GetInt64Slot(slot VOffsetT, d int64) int64 {
    242 	off := t.Offset(slot)
    243 	if off == 0 {
    244 		return d
    245 	}
    246 
    247 	return t.GetInt64(t.Pos + UOffsetT(off))
    248 }
    249 
    250 // GetUint64Slot retrieves the uint64 that the given vtable location
    251 // points to. If the vtable value is zero, the default value `d`
    252 // will be returned.
    253 func (t *Table) GetUint64Slot(slot VOffsetT, d uint64) uint64 {
    254 	off := t.Offset(slot)
    255 	if off == 0 {
    256 		return d
    257 	}
    258 
    259 	return t.GetUint64(t.Pos + UOffsetT(off))
    260 }
    261 
    262 // GetFloat32Slot retrieves the float32 that the given vtable location
    263 // points to. If the vtable value is zero, the default value `d`
    264 // will be returned.
    265 func (t *Table) GetFloat32Slot(slot VOffsetT, d float32) float32 {
    266 	off := t.Offset(slot)
    267 	if off == 0 {
    268 		return d
    269 	}
    270 
    271 	return t.GetFloat32(t.Pos + UOffsetT(off))
    272 }
    273 
    274 // GetFloat64Slot retrieves the float64 that the given vtable location
    275 // points to. If the vtable value is zero, the default value `d`
    276 // will be returned.
    277 func (t *Table) GetFloat64Slot(slot VOffsetT, d float64) float64 {
    278 	off := t.Offset(slot)
    279 	if off == 0 {
    280 		return d
    281 	}
    282 
    283 	return t.GetFloat64(t.Pos + UOffsetT(off))
    284 }
    285 
    286 // GetVOffsetTSlot retrieves the VOffsetT that the given vtable location
    287 // points to. If the vtable value is zero, the default value `d`
    288 // will be returned.
    289 func (t *Table) GetVOffsetTSlot(slot VOffsetT, d VOffsetT) VOffsetT {
    290 	off := t.Offset(slot)
    291 	if off == 0 {
    292 		return d
    293 	}
    294 	return VOffsetT(off)
    295 }
    296 
    297 // MutateBool updates a bool at the given offset.
    298 func (t *Table) MutateBool(off UOffsetT, n bool) bool {
    299 	WriteBool(t.Bytes[off:], n)
    300 	return true
    301 }
    302 
    303 // MutateByte updates a Byte at the given offset.
    304 func (t *Table) MutateByte(off UOffsetT, n byte) bool {
    305 	WriteByte(t.Bytes[off:], n)
    306 	return true
    307 }
    308 
    309 // MutateUint8 updates a Uint8 at the given offset.
    310 func (t *Table) MutateUint8(off UOffsetT, n uint8) bool {
    311 	WriteUint8(t.Bytes[off:], n)
    312 	return true
    313 }
    314 
    315 // MutateUint16 updates a Uint16 at the given offset.
    316 func (t *Table) MutateUint16(off UOffsetT, n uint16) bool {
    317 	WriteUint16(t.Bytes[off:], n)
    318 	return true
    319 }
    320 
    321 // MutateUint32 updates a Uint32 at the given offset.
    322 func (t *Table) MutateUint32(off UOffsetT, n uint32) bool {
    323 	WriteUint32(t.Bytes[off:], n)
    324 	return true
    325 }
    326 
    327 // MutateUint64 updates a Uint64 at the given offset.
    328 func (t *Table) MutateUint64(off UOffsetT, n uint64) bool {
    329 	WriteUint64(t.Bytes[off:], n)
    330 	return true
    331 }
    332 
    333 // MutateInt8 updates a Int8 at the given offset.
    334 func (t *Table) MutateInt8(off UOffsetT, n int8) bool {
    335 	WriteInt8(t.Bytes[off:], n)
    336 	return true
    337 }
    338 
    339 // MutateInt16 updates a Int16 at the given offset.
    340 func (t *Table) MutateInt16(off UOffsetT, n int16) bool {
    341 	WriteInt16(t.Bytes[off:], n)
    342 	return true
    343 }
    344 
    345 // MutateInt32 updates a Int32 at the given offset.
    346 func (t *Table) MutateInt32(off UOffsetT, n int32) bool {
    347 	WriteInt32(t.Bytes[off:], n)
    348 	return true
    349 }
    350 
    351 // MutateInt64 updates a Int64 at the given offset.
    352 func (t *Table) MutateInt64(off UOffsetT, n int64) bool {
    353 	WriteInt64(t.Bytes[off:], n)
    354 	return true
    355 }
    356 
    357 // MutateFloat32 updates a Float32 at the given offset.
    358 func (t *Table) MutateFloat32(off UOffsetT, n float32) bool {
    359 	WriteFloat32(t.Bytes[off:], n)
    360 	return true
    361 }
    362 
    363 // MutateFloat64 updates a Float64 at the given offset.
    364 func (t *Table) MutateFloat64(off UOffsetT, n float64) bool {
    365 	WriteFloat64(t.Bytes[off:], n)
    366 	return true
    367 }
    368 
    369 // MutateUOffsetT updates a UOffsetT at the given offset.
    370 func (t *Table) MutateUOffsetT(off UOffsetT, n UOffsetT) bool {
    371 	WriteUOffsetT(t.Bytes[off:], n)
    372 	return true
    373 }
    374 
    375 // MutateVOffsetT updates a VOffsetT at the given offset.
    376 func (t *Table) MutateVOffsetT(off UOffsetT, n VOffsetT) bool {
    377 	WriteVOffsetT(t.Bytes[off:], n)
    378 	return true
    379 }
    380 
    381 // MutateSOffsetT updates a SOffsetT at the given offset.
    382 func (t *Table) MutateSOffsetT(off UOffsetT, n SOffsetT) bool {
    383 	WriteSOffsetT(t.Bytes[off:], n)
    384 	return true
    385 }
    386 
    387 // MutateBoolSlot updates the bool at given vtable location
    388 func (t *Table) MutateBoolSlot(slot VOffsetT, n bool) bool {
    389 	if off := t.Offset(slot); off != 0 {
    390 		t.MutateBool(t.Pos+UOffsetT(off), n)
    391 		return true
    392 	}
    393 
    394 	return false
    395 }
    396 
    397 // MutateByteSlot updates the byte at given vtable location
    398 func (t *Table) MutateByteSlot(slot VOffsetT, n byte) bool {
    399 	if off := t.Offset(slot); off != 0 {
    400 		t.MutateByte(t.Pos+UOffsetT(off), n)
    401 		return true
    402 	}
    403 
    404 	return false
    405 }
    406 
    407 // MutateInt8Slot updates the int8 at given vtable location
    408 func (t *Table) MutateInt8Slot(slot VOffsetT, n int8) bool {
    409 	if off := t.Offset(slot); off != 0 {
    410 		t.MutateInt8(t.Pos+UOffsetT(off), n)
    411 		return true
    412 	}
    413 
    414 	return false
    415 }
    416 
    417 // MutateUint8Slot updates the uint8 at given vtable location
    418 func (t *Table) MutateUint8Slot(slot VOffsetT, n uint8) bool {
    419 	if off := t.Offset(slot); off != 0 {
    420 		t.MutateUint8(t.Pos+UOffsetT(off), n)
    421 		return true
    422 	}
    423 
    424 	return false
    425 }
    426 
    427 // MutateInt16Slot updates the int16 at given vtable location
    428 func (t *Table) MutateInt16Slot(slot VOffsetT, n int16) bool {
    429 	if off := t.Offset(slot); off != 0 {
    430 		t.MutateInt16(t.Pos+UOffsetT(off), n)
    431 		return true
    432 	}
    433 
    434 	return false
    435 }
    436 
    437 // MutateUint16Slot updates the uint16 at given vtable location
    438 func (t *Table) MutateUint16Slot(slot VOffsetT, n uint16) bool {
    439 	if off := t.Offset(slot); off != 0 {
    440 		t.MutateUint16(t.Pos+UOffsetT(off), n)
    441 		return true
    442 	}
    443 
    444 	return false
    445 }
    446 
    447 // MutateInt32Slot updates the int32 at given vtable location
    448 func (t *Table) MutateInt32Slot(slot VOffsetT, n int32) bool {
    449 	if off := t.Offset(slot); off != 0 {
    450 		t.MutateInt32(t.Pos+UOffsetT(off), n)
    451 		return true
    452 	}
    453 
    454 	return false
    455 }
    456 
    457 // MutateUint32Slot updates the uint32 at given vtable location
    458 func (t *Table) MutateUint32Slot(slot VOffsetT, n uint32) bool {
    459 	if off := t.Offset(slot); off != 0 {
    460 		t.MutateUint32(t.Pos+UOffsetT(off), n)
    461 		return true
    462 	}
    463 
    464 	return false
    465 }
    466 
    467 // MutateInt64Slot updates the int64 at given vtable location
    468 func (t *Table) MutateInt64Slot(slot VOffsetT, n int64) bool {
    469 	if off := t.Offset(slot); off != 0 {
    470 		t.MutateInt64(t.Pos+UOffsetT(off), n)
    471 		return true
    472 	}
    473 
    474 	return false
    475 }
    476 
    477 // MutateUint64Slot updates the uint64 at given vtable location
    478 func (t *Table) MutateUint64Slot(slot VOffsetT, n uint64) bool {
    479 	if off := t.Offset(slot); off != 0 {
    480 		t.MutateUint64(t.Pos+UOffsetT(off), n)
    481 		return true
    482 	}
    483 
    484 	return false
    485 }
    486 
    487 // MutateFloat32Slot updates the float32 at given vtable location
    488 func (t *Table) MutateFloat32Slot(slot VOffsetT, n float32) bool {
    489 	if off := t.Offset(slot); off != 0 {
    490 		t.MutateFloat32(t.Pos+UOffsetT(off), n)
    491 		return true
    492 	}
    493 
    494 	return false
    495 }
    496 
    497 // MutateFloat64Slot updates the float64 at given vtable location
    498 func (t *Table) MutateFloat64Slot(slot VOffsetT, n float64) bool {
    499 	if off := t.Offset(slot); off != 0 {
    500 		t.MutateFloat64(t.Pos+UOffsetT(off), n)
    501 		return true
    502 	}
    503 
    504 	return false
    505 }
    506