| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- // Copyright 2021 Andrew Werner.
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
- // implied. See the License for the specific language governing
- // permissions and limitations under the License.
- package btree
- import "github.com/ajwerner/btree/internal/abstract"
- // Map is a ordered map from K to V.
- type Map[K, V any] struct {
- abstract.Map[K, V, struct{}]
- }
- // MakeMap constructs a new Map with the provided comparison function.
- func MakeMap[K, V any](cmp func(K, K) int) Map[K, V] {
- return Map[K, V]{
- Map: abstract.MakeMap[K, V, struct{}](cmp, nil),
- }
- }
- // Clone clones the Map, lazily. It does so in constant time.
- func (m *Map[K, V]) Clone() Map[K, V] {
- return Map[K, V]{Map: m.Map.Clone()}
- }
- // Set is an ordered set of items of type T.
- type Set[T any] Map[T, struct{}]
- // MakeSet constructs a new Set with the provided comparison function.
- func MakeSet[T any](cmp func(T, T) int) Set[T] {
- return (Set[T])(MakeMap[T, struct{}](cmp))
- }
- // Clone clones the Set, lazily. It does so in constant time.
- func (t *Set[T]) Clone() Set[T] {
- return (Set[T])((*Map[T, struct{}])(t).Clone())
- }
- // Upsert inserts or updates the provided item. It returns
- // the overwritten item if a previous value existed for the key.
- func (t *Set[T]) Upsert(item T) (replaced T, overwrote bool) {
- replaced, _, overwrote = t.Map.Upsert(item, struct{}{})
- return replaced, overwrote
- }
- // Delete removes the value with the provided key. It returns true if the
- // item existed in the set.
- func (t *Set[K]) Delete(item K) (removed bool) {
- _, _, removed = t.Map.Delete(item)
- return removed
- }
|