Skip to content

Instantly share code, notes, and snippets.

@bxcodec
Forked from mish15/flatbuffers-vector.go
Created June 5, 2017 08:54
Show Gist options
  • Select an option

  • Save bxcodec/aaa4156573c19e4fe72a3d197fd87f98 to your computer and use it in GitHub Desktop.

Select an option

Save bxcodec/aaa4156573c19e4fe72a3d197fd87f98 to your computer and use it in GitHub Desktop.

Revisions

  1. @mish15 mish15 created this gist Jun 23, 2015.
    67 changes: 67 additions & 0 deletions flatbuffers-vector.go
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,67 @@
    func (term *Term) Encode(version string) []byte {
    builder := flatbuffers.NewBuilder(0)

    // Preprocess the shotguns
    shotguns := make([]flatbuffers.UOffsetT, len(term.Shotgun))
    shotgunStrs := make([]flatbuffers.UOffsetT, len(term.Shotgun))
    for i := 0; i < len(term.Shotgun); i++ {
    shotgunStrs[i] = builder.CreateString(term.Shotgun[i].Term)
    }
    for i := 0; i < len(term.Shotgun); i++ {
    sjfb.ShotgunStart(builder)
    sjfb.ShotgunAddTerm(builder, shotgunStrs[i])
    sjfb.ShotgunAddPotency(builder, term.Shotgun[i].Potency)
    shotguns[i] = sjfb.ShotgunEnd(builder)
    }
    sjfb.TermStartShotgunVector(builder, len(term.Shotgun))
    for i := len(term.Shotgun) - 1; i >= 0; i-- {
    //for i := 0; i < len(term.Shotgun); i++ {
    builder.PrependUOffsetT(shotguns[i])
    }
    shotgun_vec := builder.EndVector(len(term.Shotgun))

    // Preprocess the clues
    clueStrs := make([]flatbuffers.UOffsetT, len(term.Clues))
    introStrs := make([]flatbuffers.UOffsetT, len(term.Clues))
    for i := 0; i < len(term.Clues); i++ {
    clueStrs[i] = builder.CreateString(term.Clues[i].Term)
    }
    for i := 0; i < len(term.Clues); i++ {
    introStrs[i] = builder.CreateString(term.Clues[i].Intro)
    }
    clues := make([]flatbuffers.UOffsetT, len(term.Clues))
    for i := 0; i < len(term.Clues); i++ {
    sjfb.ClueStart(builder)
    sjfb.ClueAddTerm(builder, clueStrs[i])
    sjfb.ClueAddIntro(builder, introStrs[i])
    sjfb.ClueAddPotency(builder, term.Clues[i].Potency)
    clues[i] = sjfb.ClueEnd(builder)
    }
    sjfb.TermStartCluesVector(builder, len(term.Clues))
    for i := len(term.Clues) - 1; i >= 0; i-- {
    //for i := 0; i < len(term.Clues); i++ {
    builder.PrependUOffsetT(clues[i])
    }
    clues_vec := builder.EndVector(len(term.Clues))

    // Start packing the final term
    sjfb.TermStart(builder)

    termStr := builder.CreateString(term.TermStr)
    sjfb.TermAddTermStr(builder, termStr)
    sjfb.TermAddSlot(builder, term.Slot)
    sjfb.TermAddNumDocuments(builder, term.NumDocuments)
    sjfb.TermAddNumWords(builder, int16(term.NumWords))
    sjfb.TermAddShotgun(builder, shotgun_vec)
    sjfb.TermAddClues(builder, clues_vec)

    sjfb.TermAddInteractionPos(builder, int16(term.InteractionsPos))
    sjfb.TermAddInteractionNeg(builder, int16(term.InteractionsNeg))
    sjfb.TermAddHardcodedScore(builder, int16(term.HardcodedScore))
    sjfb.TermAddInfogain(builder, term.Infogain)

    obj := sjfb.TermEnd(builder)
    builder.Finish(obj)

    return builder.Bytes[builder.Head():]
    }