Skip to content

Commit

Permalink
Overrides =copy for PackedSets (#21417)
Browse files Browse the repository at this point in the history
  • Loading branch information
ringabout committed Feb 26, 2023
1 parent 89a6093 commit 6fea221
Showing 1 changed file with 14 additions and 15 deletions.
29 changes: 14 additions & 15 deletions lib/std/packedsets.nim
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,6 @@
##
## Supports any Ordinal type.
##
## .. note:: Currently the assignment operator `=` for `PackedSet[A]`
## performs some rather meaningless shallow copy. Since Nim currently does
## not allow the assignment operator to be overloaded, use the `assign proc
## <#assign,PackedSet[A],PackedSet[A]>`_ to get a deep copy.
##
## See also
## ========
## * `sets module <sets.html>`_ for more general hash sets
Expand Down Expand Up @@ -412,18 +407,9 @@ proc isNil*[A](x: PackedSet[A]): bool {.inline.} =

x.head.isNil and x.elems == 0

proc assign*[A](dest: var PackedSet[A], src: PackedSet[A]) =
proc `=copy`*[A](dest: var PackedSet[A], src: PackedSet[A]) =
## Copies `src` to `dest`.
## `dest` does not need to be initialized by the `initPackedSet proc <#initPackedSet>`_.
runnableExamples:
var
a = initPackedSet[int]()
b = initPackedSet[int]()
b.incl(5)
b.incl(7)
a.assign(b)
assert len(a) == 2

if src.elems <= src.a.len:
dest.data = @[]
dest.max = 0
Expand Down Expand Up @@ -452,6 +438,19 @@ proc assign*[A](dest: var PackedSet[A], src: PackedSet[A]) =
dest.data[h] = n
it = it.next

proc assign*[A](dest: var PackedSet[A], src: PackedSet[A]) {.inline, deprecated.} =
## Copies `src` to `dest`.
## `dest` does not need to be initialized by the `initPackedSet proc <#initPackedSet>`_.
runnableExamples:
var
a = initPackedSet[int]()
b = initPackedSet[int]()
b.incl(5)
b.incl(7)
a.assign(b)
assert len(a) == 2
`=copy`(dest, src)

proc union*[A](s1, s2: PackedSet[A]): PackedSet[A] =
## Returns the union of the sets `s1` and `s2`.
##
Expand Down

0 comments on commit 6fea221

Please sign in to comment.