mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-28 06:38:05 +00:00
Add key lookup support for tables in Go (#7644)
* Add support for key lookup for tables in Go * Run clang format * Run go fmt on tests * Remove TODO in tests * Update LookupByKey API * Update LookupByKey API * Don't use resolvePointer in expectEq * Use generated getters instead of reading values directly from buffer * Fix typo Co-authored-by: Derek Bailey <derekbailey@google.com>
This commit is contained in:
@@ -1,5 +1,7 @@
|
||||
package flatbuffers
|
||||
|
||||
import "sort"
|
||||
|
||||
// Builder is a state machine for creating FlatBuffer objects.
|
||||
// Use a Builder to construct object(s) starting from leaf nodes.
|
||||
//
|
||||
@@ -315,6 +317,25 @@ func (b *Builder) EndVector(vectorNumElems int) UOffsetT {
|
||||
return b.Offset()
|
||||
}
|
||||
|
||||
// CreateVectorOfTables serializes slice of table offsets into a vector.
|
||||
func (b *Builder) CreateVectorOfTables(offsets []UOffsetT) UOffsetT {
|
||||
b.assertNotNested()
|
||||
b.StartVector(4, len(offsets), 4)
|
||||
for i := len(offsets) - 1; i >= 0; i-- {
|
||||
b.PrependUOffsetT(offsets[i])
|
||||
}
|
||||
return b.EndVector(len(offsets))
|
||||
}
|
||||
|
||||
type KeyCompare func(o1, o2 UOffsetT, buf []byte) bool
|
||||
|
||||
func (b *Builder) CreateVectorOfSortedTables(offsets []UOffsetT, keyCompare KeyCompare) UOffsetT {
|
||||
sort.Slice(offsets, func(i, j int) bool {
|
||||
return keyCompare(offsets[i], offsets[j], b.Bytes)
|
||||
})
|
||||
return b.CreateVectorOfTables(offsets)
|
||||
}
|
||||
|
||||
// CreateSharedString Checks if the string is already written
|
||||
// to the buffer before calling CreateString
|
||||
func (b *Builder) CreateSharedString(s string) UOffsetT {
|
||||
|
||||
@@ -23,3 +23,8 @@ func GetSizePrefixedRootAs(buf []byte, offset UOffsetT, fb FlatBuffer) {
|
||||
func GetSizePrefix(buf []byte, offset UOffsetT) uint32 {
|
||||
return GetUint32(buf[offset:])
|
||||
}
|
||||
|
||||
// GetIndirectOffset retrives the relative offset in the provided buffer stored at `offset`.
|
||||
func GetIndirectOffset(buf []byte, offset UOffsetT) UOffsetT {
|
||||
return offset + GetUOffsetT(buf[offset:])
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user