range.go 583 B

123456789101112131415161718192021222324252627282930
  1. package rules
  2. import (
  3. "math/big"
  4. )
  5. import (
  6. "fw/rt2"
  7. "fw/rt2/frame"
  8. )
  9. func bit_range(_f interface{}, _t interface{}) interface{} {
  10. f := int32Of(_f)
  11. t := int32Of(_t)
  12. ret := big.NewInt(0)
  13. for i := f; i <= t; i++ {
  14. ret = ret.SetBit(ret, int(i), 1)
  15. }
  16. return ret
  17. }
  18. func rangeSeq(f frame.Frame) (frame.Sequence, frame.WAIT) {
  19. n := rt2.NodeOf(f)
  20. return This(expectExpr(f, n.Left(), func(...IN) OUT {
  21. return expectExpr(f, n.Right(), func(...IN) OUT {
  22. rt2.DataOf(f.Parent())[n] = bit_range(rt2.DataOf(f)[n.Left()], rt2.DataOf(f)[n.Right()])
  23. return End()
  24. })
  25. }))
  26. }