]> gitweb.factorcode.org Git - factor.git/blob - extra/containers/containers.factor
containers: experimental container syntax
[factor.git] / extra / containers / containers.factor
1 USING: accessors assocs deques dlists growable kernel math
2 sequences sets ;
3
4 IN: containers
5
6 GENERIC: count ( obj -- n )
7
8 M: sequence count length ;
9 M: assoc count assoc-size ;
10 M: set count cardinality ;
11
12 GENERIC: capacity ( obj -- n )
13
14 M: object capacity count ;
15 M: growable capacity underlying>> length ;
16
17 GENERIC: contains? ( elt obj -- ? )
18
19 M: sequence contains? member? ;
20 M: assoc contains? key? ;
21 M: set contains? sets:in? ;
22 M: deque contains? deque-member? ;
23
24 GENERIC: items ( obj -- seq )
25
26 M: sequence items ;
27 M: set items members ;
28 M: assoc items >alist ;
29 M: dlist items dlist>sequence ;
30
31 GENERIC: empty? ( obj -- ? )
32
33 M: object empty? count zero? ; inline
34 M: dlist empty? front>> not ; inline
35 M: deque empty? deque-empty? ; inline
36
37 GENERIC: add ( elt obj -- )
38
39 M: sequence add push ;
40 M: set add adjoin ;
41
42 GENERIC: lookup ( key obj -- elt )
43 M: sequence lookup nth ;
44 M: assoc lookup at ;
45
46 ! XXX: at ( key obj -- elt ) and of ( obj key -- elt )
47
48 GENERIC: remove ( elt obj -- )
49
50 M: sequence remove remove-nth! drop ;
51 M: set remove delete ;
52
53 GENERIC: remove-all ( obj -- )
54
55 M: sequence remove-all delete-all ;
56 M: assoc remove-all clear-assoc ;
57 M: set remove-all clear-set ;
58 M: deque remove-all clear-deque ;
59
60 GENERIC: like ( obj exemplar -- newobj )
61
62 M: sequence like sequences:like ;
63 M: assoc like assoc-like ;
64 M: set like set-like ;
65
66 GENERIC: clone-like ( obj exemplar -- newobj )
67
68 M: sequence clone-like sequences:clone-like ;
69 M: assoc clone-like assoc-clone-like ;