Update code for internal system
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
package util
|
||||
|
||||
import "io"
|
||||
import "image/color"
|
||||
|
||||
// IndexOf returns the index of needle within haystack. If needle does not exist
|
||||
@@ -99,3 +100,32 @@ func (this *Memo[T]) InvalidateTo (value T) {
|
||||
this.Invalidate()
|
||||
this.cache = value
|
||||
}
|
||||
|
||||
// Cycler stores a value and an accompanying io.Closer. When the value is set,
|
||||
// the closer associated with the previous value is closed.
|
||||
type Cycler[T any] struct {
|
||||
value T
|
||||
closer io.Closer
|
||||
}
|
||||
|
||||
// Value returns the cycler's value.
|
||||
func (this *Cycler[T]) Value () T {
|
||||
return this.value
|
||||
}
|
||||
|
||||
// Set sets the value and associated closer, closing the previous one.
|
||||
func (this *Cycler[T]) Set (value T, closer io.Closer) (err error) {
|
||||
if this.closer != nil {
|
||||
err = this.closer.Close()
|
||||
}
|
||||
this.value = value
|
||||
this.closer = closer
|
||||
return err
|
||||
}
|
||||
|
||||
// Close closes the associated closer early.
|
||||
func (this *Cycler[T]) Close () error {
|
||||
err := this.closer.Close()
|
||||
this.closer = nil
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user