Skip to content

Commit

Permalink
[pdata] Add CopyTo and MoveTo methods to primitive slices (#6044)
Browse files Browse the repository at this point in the history
  • Loading branch information
dmitryax authored Sep 9, 2022
1 parent c442fb8 commit 36f0b5c
Show file tree
Hide file tree
Showing 6 changed files with 121 additions and 43 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@
- Add `skip-get-modules` builder flag to support isolated environment executions (#6009)
- Skip unnecessary Go binary path validation when the builder is used with `skip-compilation` and `skip-get-modules` flags (#6026)
- Add mapstructure hook function for confmap.Unmarshaler interface (#6029)
- Add CopyTo and MoveTo methods to primitive slices (#6044)

### 🧰 Bug fixes 🧰

Expand Down
23 changes: 1 addition & 22 deletions pdata/internal/cmd/pdatagen/internal/base_fields.go
Original file line number Diff line number Diff line change
Expand Up @@ -52,14 +52,6 @@ func (ms ${structName}) Set${fieldName}(v ${returnType}) {
ms.getOrig().${originFieldName} = v
}`

const copyToPrimitiveSliceTestTemplate = ` if len(ms.getOrig().${originFieldName}) == 0 {
dest.getOrig().${originFieldName} = nil
} else {
dest.getOrig().${originFieldName} = make(${rawType}, len(ms.getOrig().${originFieldName}))
copy(dest.getOrig().${originFieldName}, ms.getOrig().${originFieldName})
}
`

const accessorsPrimitiveSliceTemplate = `// ${fieldName} returns the ${lowerFieldName} associated with this ${structName}.
func (ms ${structName}) ${fieldName}() ${packageName}${returnType} {
return ${packageName}${returnType}(internal.New${returnType}(&ms.getOrig().${originFieldName}))
Expand Down Expand Up @@ -516,20 +508,7 @@ func (psf *primitiveSliceField) generateSetWithTestValue(sb *strings.Builder) {
}

func (psf *primitiveSliceField) generateCopyToValue(ms baseStruct, sb *strings.Builder) {
sb.WriteString(os.Expand(copyToPrimitiveSliceTestTemplate, func(name string) string {
switch name {
case "structName":
return ms.getName()
case "originFieldName":
return psf.originFieldName
case "rawType":
return psf.rawType
case "returnType":
return psf.returnType
default:
panic(name)
}
}))
sb.WriteString("\tms." + psf.fieldName + "().CopyTo(dest." + psf.fieldName + "())")
}

var _ baseField = (*primitiveSliceField)(nil)
Expand Down
29 changes: 29 additions & 0 deletions pdata/internal/cmd/pdatagen/internal/primitive_slice_structs.go
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,17 @@ func (ms ${structName}) SetAt(i int, val ${itemType}) {
(*ms.getOrig())[i] = val
}
// MoveTo moves ${structName} to another instance.
func (ms ${structName}) MoveTo(dest ${structName}) {
*dest.getOrig() = *ms.getOrig()
*ms.getOrig() = nil
}
// CopyTo copies ${structName} to another instance.
func (ms ${structName}) CopyTo(dest ${structName}) {
*dest.getOrig() = copy${structName}(*ms.getOrig())
}
func copy${structName}(from []${itemType}) []${itemType} {
if len(from) == 0 {
return nil
Expand All @@ -82,6 +93,24 @@ const immutableSliceTestTemplate = `func TestNew${structName}(t *testing.T) {
ms.FromRaw([]${itemType}{3})
assert.Equal(t, 1, ms.Len())
assert.Equal(t, ${itemType}(3), ms.At(0))
cp := New${structName}()
ms.CopyTo(cp)
ms.SetAt(0, ${itemType}(2))
assert.Equal(t, ${itemType}(2), ms.At(0))
assert.Equal(t, ${itemType}(3), cp.At(0))
ms.CopyTo(cp)
assert.Equal(t, ${itemType}(2), cp.At(0))
mv := New${structName}()
ms.MoveTo(mv)
assert.Equal(t, 0, ms.Len())
assert.Equal(t, 1, mv.Len())
assert.Equal(t, ${itemType}(2), mv.At(0))
ms.FromRaw([]${itemType}{1, 2, 3})
ms.MoveTo(mv)
assert.Equal(t, 3, mv.Len())
assert.Equal(t, ${itemType}(1), mv.At(0))
}`

const primitiveSliceInternalTemplate = `
Expand Down
33 changes: 33 additions & 0 deletions pdata/pcommon/generated_primitive_slice.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

54 changes: 54 additions & 0 deletions pdata/pcommon/generated_primitive_slice_test.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

24 changes: 3 additions & 21 deletions pdata/pmetric/generated_metrics.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 36f0b5c

Please sign in to comment.