Skip to content

Commit 7b4c926

Browse files
committed
[chore] [pdata] Avoid an allocation when copy oneOf fields
1 parent 6746dda commit 7b4c926

File tree

4 files changed

+73
-31
lines changed

4 files changed

+73
-31
lines changed

pdata/internal/cmd/pdatagen/internal/base_fields.go

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -172,11 +172,14 @@ const oneOfMessageSetTestFieldTemplate = `tv.orig.{{ .originOneOfFieldName }} =
172172
fillTest{{ .returnType }}(new{{ .returnType }}(tv.orig.Get{{ .returnType }}(), tv.state))`
173173

174174
const copyToValueOneOfMessageTemplate = ` case *{{ .originStructType }}:
175-
{{ .lowerFieldName }} := &{{ .originFieldPackageName}}.{{ .fieldName }}{}
176-
copyOrig{{ .returnType }}({{ .lowerFieldName }}, t.{{ .fieldName }})
177-
dest.{{ .originOneOfFieldName }} = &{{ .originStructType }}{
178-
{{ .fieldName }}: {{ .lowerFieldName }},
179-
}`
175+
{{ .lowerFieldName }}, ok := dest.{{ .originOneOfFieldName }}.(*{{ .originStructType }})
176+
if !ok || {{ .lowerFieldName }}.{{ .fieldName }} == nil {
177+
{{ .lowerFieldName }} = &{{ .originStructType }}{
178+
{{ .fieldName }}: &{{ .originFieldPackageName}}.{{ .fieldName }}{},
179+
}
180+
dest.{{ .originOneOfFieldName }} = {{ .lowerFieldName }}
181+
}
182+
copyOrig{{ .returnType }}({{ .lowerFieldName }}.{{ .fieldName }}, t.{{ .fieldName }})`
180183

181184
const accessorsOneOfPrimitiveTemplate = `// {{ .accessorFieldName }} returns the {{ .lowerFieldName }} associated with this {{ .structName }}.
182185
func (ms {{ .structName }}) {{ .accessorFieldName }}() {{ .returnType }} {
@@ -218,8 +221,12 @@ const oneOfPrimitiveSetTestFieldTemplate = `tv.orig.{{ .originOneOfFieldName }}
218221
{{- .originFieldName }}: {{ .testValue }}}`
219222

220223
const oneOfPrimitiveCopyOrigFieldTemplate = `case *{{ .originStructName }}_{{ .originFieldName }}:
221-
dest.{{ .originOneOfFieldName }} = &{{ .originStructName }}_{{ .originFieldName }}{
222-
{{- .originFieldName }}: t.{{ .originFieldName }}}`
224+
dest{{ .originOneOfFieldName }}, ok := dest.{{ .originOneOfFieldName }}.(*{{ .originStructName }}_{{ .originFieldName }})
225+
if !ok {
226+
dest{{ .originOneOfFieldName }} = &{{ .originStructName }}_{{ .originFieldName }}{}
227+
dest.{{ .originOneOfFieldName }} = dest{{ .originOneOfFieldName }}
228+
}
229+
dest{{ .originOneOfFieldName }}.{{ .originFieldName }} = t.{{ .originFieldName }}`
223230

224231
const oneOfPrimitiveSwitchCaseTemplate = `case *{{ .originStructName }}_{{ .originFieldName }}:
225232
return {{ .typeName }}`

pdata/pmetric/generated_exemplar.go

Lines changed: 12 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pdata/pmetric/generated_metric.go

Lines changed: 35 additions & 20 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pdata/pmetric/generated_numberdatapoint.go

Lines changed: 12 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)