| // Copyright 2021 The Go Authors. All rights reserved. | |
| // Use of this source code is governed by a BSD-style | |
| // license that can be found in the LICENSE file. | |
| package a | |
| type Pair[L, R any] struct { | |
| L L | |
| R R | |
| } | |
| func Two[L, R any](l L, r R) Pair[L, R] { | |
| return Pair[L, R]{L: l, R: r} | |
| } | |
| type Map[K, V any] interface { | |
| Put(K, V) | |
| Len() int | |
| Iterate(func(Pair[K, V]) bool) | |
| } | |
| type HashMap[K comparable, V any] struct { | |
| m map[K]V | |
| } | |
| func NewHashMap[K comparable, V any](capacity int) HashMap[K, V] { | |
| var m map[K]V | |
| if capacity >= 1 { | |
| m = make(map[K]V, capacity) | |
| } else { | |
| m = map[K]V{} | |
| } | |
| return HashMap[K, V]{m: m} | |
| } | |
| func (m HashMap[K, V]) Put(k K, v V) { | |
| m.m[k] = v | |
| } | |
| func (m HashMap[K, V]) Len() int { | |
| return len(m.m) | |
| } | |
| func (m HashMap[K, V]) Iterate(cb func(Pair[K, V]) bool) { | |
| for k, v := range m.m { | |
| if !cb(Two(k, v)) { | |
| return | |
| } | |
| } | |
| } |