summaryrefslogtreecommitdiff
path: root/set/elementary.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2020-10-16 09:04:06 +0100
committerPaul Buetow <paul@buetow.org>2020-10-16 09:04:06 +0100
commitda8837c515cbefadce9bdbb5e035398f89b283ec (patch)
tree54eadc99c0ae28695feefd526d83b415cd447bd6 /set/elementary.go
parent2de042b741957f1e06fdfb6e3cf9c8219ce4c655 (diff)
initial search tree set
Diffstat (limited to 'set/elementary.go')
-rw-r--r--set/elementary.go31
1 files changed, 17 insertions, 14 deletions
diff --git a/set/elementary.go b/set/elementary.go
index 63a3fd8..a9d367e 100644
--- a/set/elementary.go
+++ b/set/elementary.go
@@ -2,7 +2,7 @@ package set
type ElementaryElem struct {
key int
- val interface{}
+ val int
next *ElementaryElem
}
@@ -14,11 +14,11 @@ func NewElementary() *Elementary {
return &Elementary{}
}
-func (s Elementary) Empty() bool {
+func (s *Elementary) Empty() bool {
return s.root == nil
}
-func (s Elementary) Set(key int, val interface{}) {
+func (s *Elementary) Set(key int, val int) {
if s.Empty() {
s.root = &ElementaryElem{key, val, nil}
return
@@ -39,38 +39,41 @@ func (s Elementary) Set(key int, val interface{}) {
}
}
-func (s Elementary) Get(key int) interface{} {
+func (s *Elementary) Get(key int) (int, error) {
elem := s.root
for elem != nil {
if elem.key == key {
- return elem.val
+ return elem.val, nil
}
elem = elem.next
}
- return nil
+ return 0, NotFound
}
-func (s Elementary) Del(key int) interface{} {
+func (s *Elementary) Del(key int) (int, error) {
if s.Empty() {
- return nil
+ return 0, NotFound
}
if s.root.key == key {
- defer func() { s.root = nil }()
- return s.root.val
+ defer func() {
+ s.root = s.root.next
+ }()
+ return s.root.val, nil
}
elem := s.root
-
for elem.next != nil {
if elem.next.key == key {
- defer func() { elem.next = elem.next.next }()
- return elem.next.val
+ defer func() {
+ elem.next = elem.next.next
+ }()
+ return elem.next.val, nil
}
elem = elem.next
}
- return nil
+ return 0, NotFound
}