Skip to content

Commit dd14ce9

Browse files
committed
Fill out Set interface - preliminary implementation only
1 parent 5a8a876 commit dd14ce9

File tree

1 file changed

+42
-1
lines changed

1 file changed

+42
-1
lines changed

py/set.go

Lines changed: 42 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44

55
package py
66

7-
var SetType = NewType("set", "set() -> new empty set object\nset(iterable) -> new set object\n\nBuild an unordered collection of unique elements.")
7+
var SetType = NewTypeX("set", "set() -> new empty set object\nset(iterable) -> new set object\n\nBuild an unordered collection of unique elements.", SetNew, nil)
88

99
type SetValue struct{}
1010

@@ -45,6 +45,17 @@ func (s *Set) Add(item Object) {
4545
s.items[item] = SetValue{}
4646
}
4747

48+
// SetNew
49+
func SetNew(metatype *Type, args Tuple, kwargs StringDict) Object {
50+
var iterable Object
51+
UnpackTuple(args, kwargs, "set", 0, 1, &iterable)
52+
if iterable == nil {
53+
return NewSet()
54+
}
55+
// FIXME should be able to initialise from an iterable!
56+
return NewSetFromItems(iterable.(Tuple))
57+
}
58+
4859
var FrozenSetType = NewType("frozenset", "frozenset() -> empty frozenset object\nfrozenset(iterable) -> frozenset object\n\nBuild an immutable unordered collection of unique elements.")
4960

5061
type FrozenSet struct {
@@ -69,3 +80,33 @@ func NewFrozenSetFromItems(items []Object) *FrozenSet {
6980
Set: *NewSetFromItems(items),
7081
}
7182
}
83+
84+
// Extend the set with items
85+
func (s *Set) Update(items []Object) {
86+
for _, item := range items {
87+
s.items[item] = SetValue{}
88+
}
89+
}
90+
91+
func (s *Set) M__len__() Object {
92+
return Int(len(s.items))
93+
}
94+
95+
func (s *Set) M__bool__() Object {
96+
return NewBool(len(s.items) > 0)
97+
}
98+
99+
func (s *Set) M__iter__() Object {
100+
items := make(Tuple, 0, len(s.items))
101+
for item := range s.items {
102+
items = append(items, item)
103+
}
104+
return NewIterator(items)
105+
}
106+
107+
// Check interface is satisfied
108+
var _ I__len__ = (*Set)(nil)
109+
var _ I__bool__ = (*Set)(nil)
110+
var _ I__iter__ = (*Set)(nil)
111+
112+
// var _ richComparison = (*Set)(nil)

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy