@@ -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 ():]
}