Add an Optional type to util
This commit is contained in:
parent
38054a95bb
commit
d4c08a0f8c
@ -91,17 +91,11 @@ func (this *Memo[T]) Value () T {
|
|||||||
// Invalidate marks the Memo's value as invalid, which will cause it to be
|
// Invalidate marks the Memo's value as invalid, which will cause it to be
|
||||||
// updated the next time Value is called.
|
// updated the next time Value is called.
|
||||||
func (this *Memo[T]) Invalidate () {
|
func (this *Memo[T]) Invalidate () {
|
||||||
|
var zero T
|
||||||
|
this.cache = zero
|
||||||
this.valid = false
|
this.valid = false
|
||||||
}
|
}
|
||||||
|
|
||||||
// InvalidateTo invalidates the Memo and sets its value. The new value will be
|
|
||||||
// entirely inaccessible. This is only intended to be used for setting a
|
|
||||||
// reference to nil
|
|
||||||
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,
|
// Cycler stores a value and an accompanying io.Closer. When the value is set,
|
||||||
// the closer associated with the previous value is closed.
|
// the closer associated with the previous value is closed.
|
||||||
type Cycler[T any] struct {
|
type Cycler[T any] struct {
|
||||||
@ -130,3 +124,28 @@ func (this *Cycler[T]) Close () error {
|
|||||||
this.closer = nil
|
this.closer = nil
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Optional is an optional value.
|
||||||
|
type Optional[T any] struct {
|
||||||
|
value T
|
||||||
|
exists bool
|
||||||
|
}
|
||||||
|
|
||||||
|
// Value returns the value and true if the value exists. If not, it returns the
|
||||||
|
// last set value and false.
|
||||||
|
func (this *Optional[T]) Value () (T, bool) {
|
||||||
|
return this.value, this.exists
|
||||||
|
}
|
||||||
|
|
||||||
|
// Set sets the value.
|
||||||
|
func (this *Optional[T]) Set (value T) {
|
||||||
|
this.value = value
|
||||||
|
this.exists = true
|
||||||
|
}
|
||||||
|
|
||||||
|
// Unset unsets the value.
|
||||||
|
func (this *Optional[T]) Unset () {
|
||||||
|
var zero T
|
||||||
|
this.value = zero
|
||||||
|
this.exists = false
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user