context.go 884 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. package seq
  2. import (
  3. "fmt"
  4. "reflect"
  5. )
  6. type Context struct {
  7. vars map[string]interface{}
  8. ret [][]interface{}
  9. rep []string
  10. }
  11. func NewContext() *Context {
  12. return &Context{
  13. vars: map[string]interface{}{},
  14. ret: [][]interface{}{},
  15. rep: []string{},
  16. }
  17. }
  18. func (sc *Context) Log(param ...interface{}) {
  19. sc.rep = append(sc.rep, fmt.Sprint(param...))
  20. }
  21. func (sc *Context) LogRep() {
  22. log.Println("Report:")
  23. for _, r := range sc.rep {
  24. log.Println(r)
  25. }
  26. }
  27. // Context
  28. func (sc *Context) Set(name string, value interface{}) {
  29. sc.vars[name] = value
  30. }
  31. func (sc *Context) Get(name string, valPtr ...interface{}) interface{} {
  32. if len(valPtr) > 0 {
  33. pv := reflect.ValueOf(valPtr[0])
  34. pv.Elem().Set(reflect.ValueOf(sc.vars[name]))
  35. }
  36. return sc.vars[name]
  37. }
  38. //Ret return the value from previous returns
  39. func (sc *Context) Ret(n, i int) interface{} {
  40. return sc.ret[n][i]
  41. }