123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113 |
- import boolbase from "boolbase";
- export function compile(parsed) {
- const a = parsed[0];
-
- const b = parsed[1] - 1;
-
- if (b < 0 && a <= 0)
- return boolbase.falseFunc;
-
- if (a === -1)
- return (index) => index <= b;
- if (a === 0)
- return (index) => index === b;
-
- if (a === 1)
- return b < 0 ? boolbase.trueFunc : (index) => index >= b;
-
- const absA = Math.abs(a);
-
- const bMod = ((b % absA) + absA) % absA;
- return a > 1
- ? (index) => index >= b && index % absA === bMod
- : (index) => index <= b && index % absA === bMod;
- }
- export function generate(parsed) {
- const a = parsed[0];
-
- let b = parsed[1] - 1;
- let n = 0;
-
- if (a < 0) {
- const aPos = -a;
-
- const minValue = ((b % aPos) + aPos) % aPos;
- return () => {
- const val = minValue + aPos * n++;
- return val > b ? null : val;
- };
- }
- if (a === 0)
- return b < 0
- ?
- () => null
- :
- () => (n++ === 0 ? b : null);
- if (b < 0) {
- b += a * Math.ceil(-b / a);
- }
- return () => a * n++ + b;
- }
|