exercism/go/react/interfaces.go

50 lines
1.5 KiB
Go

package react
// A Reactor manages linked cells.
type Reactor interface {
// CreateInput creates an input cell linked into the reactor
// with the given initial value.
CreateInput(int) InputCell
// CreateCompute1 creates a compute cell which computes its value
// based on one other cell. The compute function will only be called
// if the value of the passed cell changes.
CreateCompute1(Cell, func(int) int) ComputeCell
// CreateCompute2 is like CreateCompute1, but depending on two cells.
// The compute function will only be called if the value of any of the
// passed cells changes.
CreateCompute2(Cell, Cell, func(int, int) int) ComputeCell
}
// A Cell is conceptually a holder of a value.
type Cell interface {
// Value returns the current value of the cell.
Value() int
}
// An InputCell has a changeable value, changing the value triggers updates to
// other cells.
type InputCell interface {
Cell
// SetValue sets the value of the cell.
SetValue(int)
}
// A ComputeCell always computes its value based on other cells and can
// call callbacks upon changes.
type ComputeCell interface {
Cell
// AddCallback adds a callback which will be called when the value changes.
// It returns a callback handle which can be used to remove the callback.
AddCallback(func(int)) CallbackHandle
// RemoveCallback removes a previously added callback, if it exists.
RemoveCallback(CallbackHandle)
}
// A CallbackHandle is used to remove previously added callbacks, see ComputeCell.
type CallbackHandle interface{}