From 888f4f09b0321f1294f185f6cbe8e4dcf1c6686c Mon Sep 17 00:00:00 2001 From: bloeys Date: Fri, 10 Jun 2022 11:30:53 +0400 Subject: [PATCH] Copy function --- nset.go | 19 +++++++++++++++++++ nset_test.go | 5 ++++- 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/nset.go b/nset.go index 7589d97..b23f1f7 100644 --- a/nset.go +++ b/nset.go @@ -149,6 +149,25 @@ func (n *NSet[T]) String() string { return b.String() } +func (n *NSet[T]) Copy() *NSet[T] { + + newSet := NewNSet[T]() + for i := 0; i < len(n.Buckets); i++ { + + b := &n.Buckets[i] + newB := &newSet.Buckets[i] + + newB.StorageUnitCount = b.StorageUnitCount + newB.Data = make([]StorageType, len(b.Data)) + + copy(newB.Data, b.Data) + } + + newSet.StorageUnitCount = n.StorageUnitCount + return newSet + +} + func NewNSet[T IntsIf]() *NSet[T] { n := &NSet[T]{ diff --git a/nset_test.go b/nset_test.go index 5830525..24e96c4 100755 --- a/nset_test.go +++ b/nset_test.go @@ -34,8 +34,11 @@ func TestNSet(t *testing.T) { IsEq(t, nset.BucketCount-1, n.GetBucketIndex(math.MaxUint32)) IsEq(t, math.MaxUint32/64/nset.BucketCount, n.GetStorageUnitIndex(math.MaxUint32)) + nCopy := n.Copy() n.Remove(1) - AllTrue(t, n.Contains(0), n.Contains(63), !n.Contains(1)) + + AllTrue(t, n.Contains(0), n.Contains(63), !n.Contains(1), nCopy.ContainsAll(0, 1, 63, math.MaxUint32)) + } func TestNSetFullRange(t *testing.T) {