mirror of
https://github.com/hanzoai/tasks.git
synced 2026-10-04 02:04:03 +00:00
## What changed?
<!-- Describe what has changed in this PR -->
Remove license header from every file. Because it is really hard to
follow in this PR here is the summary:
1. License header is removed from all `.go` and `.proto` files
:fireworks::fireworks:🎆.
2. `LICENSE` file in the root directory has only Temporal and Uber
copyrights.
3. 5 other `LICENSE` files added to the packages which have copyrights
different from Temporal and Uber: Datadog, Xargin, "Mat Ryer, Tyler
Bunnell and contributors".
4. `license_file` flag is removed from all code generation tools.
5. `copyright_file` flag is removed from `go:generate mockgen`
directive.
6. All copyright related targets are removed from `Makefile`.
7. Updated Temporal copyright year to 2025 everywhere.
## Why?
<!-- Tell your future self why have you made these changes -->
I double checked with legal department that it is not needed to have
license header in every file. One file per repo is enough. I put all
copyrights to the root `LICENSE` file and removed header from all other
files. Also updated tools and `Makefile`.
63 lines
1.5 KiB
Go
63 lines
1.5 KiB
Go
package collection
|
|
|
|
// IndexedTakeList holds a set of values that can only be observed by being
|
|
// removed from the set. It is possible for this set to contain duplicate values
|
|
// as long as each value maps to a distinct index.
|
|
type (
|
|
IndexedTakeList[K comparable, V any] struct {
|
|
values []kv[K, V]
|
|
}
|
|
|
|
kv[K comparable, V any] struct {
|
|
key K
|
|
value V
|
|
removed bool
|
|
}
|
|
)
|
|
|
|
// NewIndexedTakeList constructs a new IndexedTakeSet by applying the provided
|
|
// indexer to each of the provided values.
|
|
func NewIndexedTakeList[K comparable, V any](
|
|
values []V,
|
|
indexer func(V) K,
|
|
) *IndexedTakeList[K, V] {
|
|
ret := &IndexedTakeList[K, V]{
|
|
values: make([]kv[K, V], 0, len(values)),
|
|
}
|
|
for _, v := range values {
|
|
ret.values = append(ret.values, kv[K, V]{key: indexer(v), value: v})
|
|
}
|
|
return ret
|
|
}
|
|
|
|
// Take finds a value in this set by its key and removes it, returning the
|
|
// value.
|
|
func (itl *IndexedTakeList[K, V]) Take(key K) (V, bool) {
|
|
var zero V
|
|
for i := 0; i < len(itl.values); i++ {
|
|
kv := &itl.values[i]
|
|
if kv.key != key {
|
|
continue
|
|
}
|
|
if kv.removed {
|
|
return zero, false
|
|
}
|
|
kv.removed = true
|
|
return kv.value, true
|
|
}
|
|
return zero, false
|
|
}
|
|
|
|
// TakeRemaining removes all remaining values from this set and returns them.
|
|
func (itl *IndexedTakeList[K, V]) TakeRemaining() []V {
|
|
out := make([]V, 0, len(itl.values))
|
|
for i := 0; i < len(itl.values); i++ {
|
|
kv := &itl.values[i]
|
|
if !kv.removed {
|
|
out = append(out, kv.value)
|
|
}
|
|
}
|
|
itl.values = nil
|
|
return out
|
|
}
|