1 ! Copyright (C) 2008 Slava Pestov.
2 ! See https://factorcode.org/license.txt for BSD license.
3 USING: accessors kernel models sequences ;
6 TUPLE: product < model ;
8 : new-product ( models class -- product )
10 swap clone >>dependencies ; inline
12 : <product> ( models -- product )
15 : product-value ( model quot -- seq )
16 [ dependencies>> ] dip map ; inline
18 : set-product-value ( seq model quot -- )
19 [ dependencies>> ] dip 2each ; inline
21 M: product model-changed
23 dup [ value>> ] product-value >>value
26 M: product model-activated dup model-changed ;
28 M: product update-model
29 [ value>> ] keep [ set-model ] set-product-value ;
31 M: product range-value
32 [ range-value ] product-value ;
34 M: product range-page-value
35 [ range-page-value ] product-value ;
37 M: product range-min-value
38 [ range-min-value ] product-value ;
40 M: product range-max-value
41 [ range-max-value ] product-value ;
43 M: product range-max-value*
44 [ range-max-value* ] product-value ;
46 M: product set-range-value
48 [ set-range-value ] set-product-value ;
50 M: product set-range-page-value
51 [ set-range-page-value ] set-product-value ;
53 M: product set-range-min-value
54 [ set-range-min-value ] set-product-value ;
56 M: product set-range-max-value
57 [ set-range-max-value ] set-product-value ;