1 ! Copyright (C) 2023 Keldan Chapman.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: accessors kernel math math.order math.vectors ranges
7 M: range vneg >range< [ neg ] tri@ <range> ;
9 M: range v+n [ >range< ] dip '[ [ _ + ] bi@ ] dip <range> ;
10 M: range n+v swap v+n ;
12 M: range v-n neg v+n ;
13 M: range n-v >range< roll '[ [ _ swap - ] bi@ ] dip neg <range> ;
15 M: range v*n [ >range< ] dip '[ _ * ] tri@ <range> ;
16 M: range n*v swap v*n ;
18 M: range v/n recip v*n ;
20 M: range v+ over range? [
22 [ [ length>> ] bi@ min ]
23 [ [ step>> ] bi@ + ] 2tri \ range boa
24 ] [ call-next-method ] if ;
26 M: range v- >range< [ neg ] tri@ <range> v+ ;
28 M: range vavg over range?
30 [ call-next-method ] if ;