Add copy method to VarSet

This commit is contained in:
Jeffrey Regan
2019-06-07 13:01:34 -07:00
parent c9300edead
commit d9b0c4c84c
3 changed files with 14 additions and 9 deletions

View File

@@ -39,7 +39,7 @@ func (ra *ResAccumulator) ResMap() resmap.ResMap {
// Vars returns a copy of underlying vars. // Vars returns a copy of underlying vars.
func (ra *ResAccumulator) Vars() []types.Var { func (ra *ResAccumulator) Vars() []types.Var {
return ra.varSet.Set() return ra.varSet.AsSlice()
} }
func (ra *ResAccumulator) AppendAll( func (ra *ResAccumulator) AppendAll(
@@ -75,7 +75,7 @@ func (ra *ResAccumulator) MergeAccumulator(other *ResAccumulator) (err error) {
if err != nil { if err != nil {
return err return err
} }
return ra.varSet.MergeSet(&other.varSet) return ra.varSet.MergeSet(other.varSet)
} }
// makeVarReplacementMap returns a map of Var names to // makeVarReplacementMap returns a map of Var names to

View File

@@ -75,15 +75,20 @@ type VarSet struct {
set []Var set []Var
} }
// Set returns a copy of the var set. // AsSlice returns the vars as a slice.
func (vs *VarSet) Set() []Var { func (vs *VarSet) AsSlice() []Var {
s := make([]Var, len(vs.set)) s := make([]Var, len(vs.set))
copy(s, vs.set) copy(s, vs.set)
return s return s
} }
// Copy returns a copy of the var set.
func (vs *VarSet) Copy() VarSet {
return VarSet{set: vs.AsSlice()}
}
// MergeSet absorbs other vars with error on name collision. // MergeSet absorbs other vars with error on name collision.
func (vs *VarSet) MergeSet(incoming *VarSet) error { func (vs *VarSet) MergeSet(incoming VarSet) error {
return vs.MergeSlice(incoming.set) return vs.MergeSlice(incoming.set)
} }

View File

@@ -89,7 +89,7 @@ func TestDefaulting(t *testing.T) {
} }
func TestVarSet(t *testing.T) { func TestVarSet(t *testing.T) {
set := &VarSet{} set := VarSet{}
vars := []Var{ vars := []Var{
{ {
Name: "SHELLVARS", Name: "SHELLVARS",
@@ -120,10 +120,10 @@ func TestVarSet(t *testing.T) {
} }
for _, v := range vars { for _, v := range vars {
if !set.Contains(v) { if !set.Contains(v) {
t.Fatalf("set %v should contain var %v", set.Set(), v) t.Fatalf("set %v should contain var %v", set.AsSlice(), v)
} }
} }
set2 := &VarSet{} set2 := VarSet{}
err = set2.MergeSet(set) err = set2.MergeSet(set)
if err != nil { if err != nil {
t.Fatalf("unexpected err: %v", err) t.Fatalf("unexpected err: %v", err)
@@ -144,7 +144,7 @@ func TestVarSet(t *testing.T) {
t.Fatalf("unexpected field path: %v", v.FieldRef.FieldPath) t.Fatalf("unexpected field path: %v", v.FieldRef.FieldPath)
} }
// Confirm sorting. // Confirm sorting.
names := set2.Set() names := set2.AsSlice()
if names[0].Name != "AWARD" || if names[0].Name != "AWARD" ||
names[1].Name != "BACKEND" || names[1].Name != "BACKEND" ||
names[2].Name != "SHELLVARS" { names[2].Name != "SHELLVARS" {