MCPcopy Index your code
hub / github.com/tinylib/msgp / structmap

Method structmap

gen/encode.go:173–277  ·  view source on GitHub ↗
(s *Struct)

Source from the content-addressed store, hash-verified

171}
172
173func (e *encodeGen) structmap(s *Struct) {
174 oeIdentPrefix := randIdent()
175
176 var data []byte
177 nfields := len(s.Fields)
178 bm := bmask{
179 bitlen: nfields,
180 varname: oeIdentPrefix + "Mask",
181 }
182
183 omitempty := s.AnyHasTagPart("omitempty")
184 omitzero := s.AnyHasTagPart("omitzero")
185 var closeZero bool
186 var fieldNVar string
187 if omitempty || omitzero {
188
189 fieldNVar = oeIdentPrefix + "Len"
190
191 e.p.printf("\n// check for omitted fields")
192 e.p.printf("\n%s := uint32(%d)", fieldNVar, nfields)
193 e.p.printf("\n%s", bm.typeDecl())
194 e.p.printf("\n_ = %s", bm.varname)
195 for i, sf := range s.Fields {
196 if !e.p.ok() {
197 return
198 }
199 if ize := sf.FieldElem.IfZeroExpr(); ize != "" && sf.HasTagPart("omitempty") {
200 e.p.printf("\nif %s {", ize)
201 e.p.printf("\n%s--", fieldNVar)
202 e.p.printf("\n%s", bm.setStmt(i))
203 e.p.printf("\n}")
204 } else if sf.HasTagPart("omitzero") {
205 e.p.printf("\nif %s.IsZero() {", sf.FieldElem.Varname())
206 e.p.printf("\n%s--", fieldNVar)
207 e.p.printf("\n%s", bm.setStmt(i))
208 e.p.printf("\n}")
209 }
210 }
211
212 e.p.printf("\n// variable map header, size %s", fieldNVar)
213 e.p.varWriteMapHeader("en", fieldNVar, nfields)
214 e.p.print("\nif err != nil { return }")
215 if !e.p.ok() {
216 return
217 }
218
219 // Skip block, if no fields are set.
220 if nfields > 1 {
221 e.p.printf("\n\n// skip if no fields are to be emitted")
222 e.p.printf("\nif %s != 0 {", fieldNVar)
223 closeZero = true
224 }
225
226 } else {
227
228 // non-omit version
229 data = msgp.AppendMapHeader(nil, uint32(nfields))
230 e.p.printf("\n// map header, size %d", nfields)

Callers 1

gStructMethod · 0.95

Calls 15

typeDeclMethod · 0.95
setStmtMethod · 0.95
FuseMethod · 0.95
fuseHookMethod · 0.95
readExprMethod · 0.95
AppendMapHeaderFunction · 0.92
AppendStringFunction · 0.92
randIdentFunction · 0.85
SetIsAllowNilFunction · 0.85
setTypeParamsFunction · 0.85
nextFunction · 0.85
AnyHasTagPartMethod · 0.80

Tested by

no test coverage detected