2121package templates
2222
2323import (
24+ "fmt"
2425 "sort"
2526 "strings"
2627 "text/template"
@@ -52,7 +53,7 @@ var funcMap = template.FuncMap{
5253 // Get sorted flag names to avoid changes in the generated code. Go map iteration order is not guaranteed.
5354 for flag , name := range model .PropertyFlagNames {
5455 if val & flag != 0 { // if this flag is set
55- result = append (result , "OBXPropertyFlags_ " + cccToUc (name ))
56+ result = append (result , "OBXPropertyFlags. " + cccToUc (name ))
5657 }
5758 }
5859
@@ -71,7 +72,7 @@ var funcMap = template.FuncMap{
7172 // Get sorted flag names to avoid changes in the generated code. Go map iteration order is not guaranteed.
7273 for flag , name := range model .EntityFlagNames {
7374 if val & flag != 0 { // if this flag is set
74- result = append (result , "OBXEntityFlags_ " + cccToUc (name ))
75+ result = append (result , "OBXEntityFlags. " + cccToUc (name ))
7576 }
7677 }
7778
@@ -90,7 +91,7 @@ var funcMap = template.FuncMap{
9091 // Get sorted flag names to avoid changes in the generated code. Go map iteration order is not guaranteed.
9192 for flag , name := range model .HnswFlagNames {
9293 if val & flag != 0 { // if this flag is set
93- result = append (result , "OBXHnswFlags_ " + name )
94+ result = append (result , "OBXHnswFlags. " + name )
9495 }
9596 }
9697
@@ -101,7 +102,7 @@ var funcMap = template.FuncMap{
101102 } else if len (result ) > 0 {
102103 return result [0 ]
103104 }
104- return "OBXHnswFlags_NONE "
105+ return "OBXHnswFlags.NONE "
105106 },
106107 "PrintComments" : func (tabs int , comments []string ) string {
107108 var result string
@@ -114,4 +115,128 @@ var funcMap = template.FuncMap{
114115 return optional == "std::unique_ptr" || optional == "std::shared_ptr"
115116 },
116117 "ToUpper" : strings .ToUpper ,
118+
119+ "AddField" : func (property model.Property ) string {
120+ varName := "object." + property .Name
121+ notSupportedComment := fmt .Sprint ("// Not supported: " , model .PropertyTypeNames [property .Type ])
122+ isNullable := (property .Flags & model .PropertyFlagNotNull ) == 0
123+
124+ var str string
125+
126+ if isNullable {
127+ str += "if (" + varName + " != null) {\n "
128+ }
129+
130+ switch property .Type {
131+ case model .PropertyTypeBool :
132+ varVal := fmt .Sprint (varName , " ? 1 : 0" )
133+ str += fmt .Sprintln ("fbb.addFieldInt8(" , property .FbSlot (), ", " , varVal , ");" )
134+ case model .PropertyTypeByte :
135+ str += fmt .Sprintln ("fbb.addFieldInt8(" , property .FbSlot (), ", " , varName , ");" )
136+ case model .PropertyTypeShort :
137+ str += fmt .Sprintln ("fbb.addFieldInt16(" , property .FbSlot (), ", " , varName , ");" )
138+ case model .PropertyTypeChar :
139+ str += fmt .Sprintln ("fbb.addFieldInt16(" , property .FbSlot (), ", " , varName , ");" )
140+ case model .PropertyTypeInt :
141+ str += fmt .Sprintln ("fbb.addFieldInt32(" , property .FbSlot (), ", " , varName , ");" )
142+ case model .PropertyTypeLong :
143+ str += fmt .Sprintln ("fbb.addFieldInt64(" , property .FbSlot (), ", " , varName , ");" )
144+ case model .PropertyTypeFloat :
145+ str += fmt .Sprintln ("fbb.addFieldFloat32(" , property .FbSlot (), ", " , varName , ");" )
146+ case model .PropertyTypeDouble :
147+ str += fmt .Sprintln ("fbb.addFieldFloat64(" , property .FbSlot (), ", " , varName , ");" )
148+ case model .PropertyTypeString :
149+ return "" // Not an inline field
150+ case model .PropertyTypeDate :
151+ str += fmt .Sprintln ("fbb.addFieldInt64(" , property .FbSlot (), ", " , varName , ");" )
152+ case model .PropertyTypeRelation :
153+ return "" // Not an inline field
154+ case model .PropertyTypeDateNano :
155+ str += notSupportedComment
156+ case model .PropertyTypeByteVector :
157+ return "" // Not an inline field
158+ case model .PropertyTypeFloatVector :
159+ return "" // Not an inline field
160+ case model .PropertyTypeStringVector :
161+ return "" // Not an inline field
162+ default :
163+ panic ("Unknown property type" )
164+ }
165+
166+ if isNullable {
167+ str += "}"
168+ }
169+ return str
170+ },
171+
172+ "CreateOffsetProperty" : func (property model.Property ) string {
173+ offsetVar := property .Name + "_offset"
174+ fieldVar := "object." + property .Name
175+
176+ switch property .Type {
177+ case model .PropertyTypeString :
178+ return fmt .Sprint ("const " , offsetVar , " = fbb.createString(" , fieldVar , ");" )
179+ case model .PropertyTypeByteVector :
180+ return fmt .Sprint ("const " , offsetVar , " = fbb.createByteVector(Uint8Array.from(" , fieldVar , "));" )
181+ case model .PropertyTypeFloatVector :
182+ return fmt .Sprint ("const " , offsetVar , " = fbb.createByteVector(new Uint8Array(Float32Array.from(" , fieldVar , ")));" )
183+ case model .PropertyTypeStringVector :
184+ return "" // TODO: string vectors not supported right now
185+ default :
186+ return ""
187+ }
188+ },
189+
190+ "AddFieldOffset" : func (property model.Property ) string {
191+ offsetVarName := property .Name + "_offset"
192+ return fmt .Sprint ("fbb.addFieldOffset(" , property .FbSlot (), "," , offsetVarName , ");" )
193+ },
194+
195+ "WriteGetAssignOffset" : func (property model.Property ) string {
196+ value , err := property .FbvTableOffset ()
197+ if err != nil {
198+ panic (err )
199+ }
200+ offsetVarName := property .Name + "_offset"
201+ return fmt .Sprint ("const " , offsetVarName , " = bb.__offset(bbPos, " , value , ");" )
202+ },
203+
204+ "ReadProperty" : func (property model.Property ) string {
205+ offsetVarName := property .Name + "_offset"
206+ assignLhs := "outObject." + property .Name + " = "
207+ switch property .Type {
208+ case model .PropertyTypeBool :
209+ return fmt .Sprint (assignLhs , "bb.readInt8(bbPos + " , offsetVarName , ") ? true : false;" )
210+ case model .PropertyTypeByte :
211+ return fmt .Sprint (assignLhs , "bb.readInt8(bbPos + " , offsetVarName , ");" )
212+ case model .PropertyTypeShort :
213+ return fmt .Sprint (assignLhs , "bb.readInt16(bbPos + " , offsetVarName , ");" )
214+ case model .PropertyTypeChar :
215+ return fmt .Sprint (assignLhs , "bb.readInt16(bbPos + " , offsetVarName , ");" )
216+ case model .PropertyTypeInt :
217+ return fmt .Sprint (assignLhs , "bb.readInt32(bbPos + " , offsetVarName , ");" )
218+ case model .PropertyTypeLong :
219+ return fmt .Sprint (assignLhs , "bb.readInt64(bbPos + " , offsetVarName , ");" )
220+ case model .PropertyTypeFloat :
221+ return fmt .Sprint (assignLhs , "bb.readFloat32(bbPos + " , offsetVarName , ");" )
222+ case model .PropertyTypeDouble :
223+ return fmt .Sprint (assignLhs , "bb.readFloat64(bbPos + " , offsetVarName , ");" )
224+ case model .PropertyTypeString :
225+ return fmt .Sprint (assignLhs , "bb.__string(bbPos + " , offsetVarName , ");" )
226+ case model .PropertyTypeDate :
227+ return fmt .Sprint (assignLhs , "bb.readInt64(bbPos + " , offsetVarName , ");" )
228+ case model .PropertyTypeRelation :
229+ return fmt .Sprint ("// " , assignLhs , "PropertyTypeRelation" ) // TODO
230+ case model .PropertyTypeDateNano :
231+ return fmt .Sprint ("// " , assignLhs , "PropertyTypeDateNano" ) // TODO
232+ case model .PropertyTypeByteVector :
233+ return fmt .Sprint ("// " , assignLhs , "PropertyTypeByteVector" ) // TODO
234+ case model .PropertyTypeFloatVector :
235+ return fmt .Sprint ("// " , assignLhs , "PropertyTypeFloatVector" ) // TODO
236+ case model .PropertyTypeStringVector :
237+ return fmt .Sprint ("// " , assignLhs , "PropertyTypeStringVector" ) // TODO
238+ default :
239+ return ""
240+ }
241+ },
117242}
0 commit comments