forked from tongxin97/noise
-
Notifications
You must be signed in to change notification settings - Fork 0
/
reduce.go
33 lines (28 loc) · 932 Bytes
/
reduce.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
package callbacks
type ReduceCallbackManager struct {
seqMgr *SequentialCallbackManager
}
func NewReduceCallbackManager() *ReduceCallbackManager {
return &ReduceCallbackManager{
seqMgr: NewSequentialCallbackManager(),
}
}
func (m *ReduceCallbackManager) UnsafelySetReverse() *ReduceCallbackManager {
m.seqMgr.UnsafelySetReverse()
return m
}
func (m *ReduceCallbackManager) RegisterCallback(c ReduceCallback) {
m.seqMgr.RegisterCallback(func(params ...interface{}) error {
valueOut := params[0].(*interface{})
var err error
*valueOut, err = c(*valueOut, params[1:]...)
return err
})
}
// RunCallbacks runs all callbacks on a variadic parameter list, and de-registers callbacks
// that throw an error.
func (m *ReduceCallbackManager) RunCallbacks(in interface{}, params ...interface{}) (res interface{}, errs []error) {
errs = m.seqMgr.RunCallbacks(append([]interface{}{&in}, params...)...)
res = in
return
}