]> gitweb.factorcode.org Git - factor.git/blob - basis/models/range/range.factor
8e230a2d0c1a22874236e65d0ab5a19500f22ae4
[factor.git] / basis / models / range / range.factor
1 ! Copyright (C) 2008 Slava Pestov.\r
2 ! See http://factorcode.org/license.txt for BSD license.\r
3 USING: accessors kernel models arrays sequences math math.order\r
4 models.compose ;\r
5 IN: models.range\r
6 \r
7 TUPLE: range < compose ;\r
8 \r
9 : <range> ( value min max page -- range )\r
10     4array [ <model> ] map range new-compose ;\r
11 \r
12 : range-model ( range -- model ) dependencies>> first ;\r
13 : range-page ( range -- model ) dependencies>> second ;\r
14 : range-min ( range -- model ) dependencies>> third ;\r
15 : range-max ( range -- model ) dependencies>> fourth ;\r
16 \r
17 M: range range-value\r
18     [ range-model value>> ] keep clamp-value ;\r
19 \r
20 M: range range-page-value range-page value>> ;\r
21 \r
22 M: range range-min-value range-min value>> ;\r
23 \r
24 M: range range-max-value range-max value>> ;\r
25 \r
26 M: range range-max-value*\r
27     [ range-max-value ] [ range-page-value ] bi [-] ;\r
28 \r
29 M: range set-range-value\r
30     [ clamp-value ] [ range-model ] bi set-model ;\r
31 \r
32 M: range set-range-page-value range-page set-model ;\r
33 \r
34 M: range set-range-min-value range-min set-model ;\r
35 \r
36 M: range set-range-max-value range-max set-model ;\r
37 \r
38 : move-by ( amount range -- )\r
39     [ range-value + ] keep set-range-value ;\r
40 \r
41 : move-by-page ( amount range -- )\r
42     [ range-page-value * ] keep move-by ;\r