]> gitweb.factorcode.org Git - factor.git/blob - extra/game/models/util/util.factor
core, basis, extra: Remove DOS line endings from files.
[factor.git] / extra / game / models / util / util.factor
1 ! Copyright (C) 2010 Erik Charlebois.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: sequences accessors kernel locals assocs ;
4 IN: game.models.util
5
6 TUPLE: indexed-seq dseq iseq rassoc ;
7 INSTANCE: indexed-seq sequence
8
9 M: indexed-seq length
10     iseq>> length ; inline
11
12 M: indexed-seq nth
13     [ iseq>> nth ] keep dseq>> nth ; inline
14
15 M:: indexed-seq set-nth ( elt n seq -- )
16     seq dseq>>   :> dseq
17     seq iseq>>   :> iseq
18     seq rassoc>> :> rassoc
19     seq length n = not [ elt n seq immutable ] when
20     elt rassoc at
21     [
22         iseq push
23     ]
24     [
25         dseq length
26         [ elt rassoc set-at ]
27         [ iseq push ] bi
28         elt dseq push
29     ] if* ; inline
30
31 : <indexed-seq> ( dseq-exemplar iseq-exemplar rassoc-exemplar -- indexed-seq )
32     indexed-seq new
33     swap clone >>rassoc
34     swap clone >>iseq
35     swap clone >>dseq ;
36
37 M: indexed-seq new-resizable
38     [ dseq>> ] [ iseq>> ] [ rassoc>> ] tri <indexed-seq>
39     dup -rot
40     [ [ dseq>> new-resizable ] keep dseq<< ]
41     [ [ iseq>> new-resizable ] keep iseq<< ]
42     [ [ rassoc>> clone nip ] keep rassoc<< ]
43     2tri ;