]> gitweb.factorcode.org Git - factor.git/blob - basis/named-tuples/named-tuples.factor
functors: inline the parts of interpolate this needs
[factor.git] / basis / named-tuples / named-tuples.factor
1 ! Copyright (C) 2018 John Benediktsson
2 ! See http://factorcode.org/license.txt for BSD license
3
4 USING: accessors assocs classes classes.tuple
5 classes.tuple.private kernel math sequences sequences.private
6 slots.private ;
7
8 IN: named-tuples
9
10 MIXIN: named-tuple
11
12 M: named-tuple assoc-size tuple-size ;
13
14 M: named-tuple at*
15     [ nip ] [ ?offset-of-slot ] 2bi [ slot t ] [ drop f f ] if* ;
16
17 M: named-tuple set-at set-slot-named ;
18
19 M: named-tuple >alist
20     dup class-of all-slots
21     [ [ offset>> slot ] [ name>> ] bi swap ] with { } map>assoc ;
22
23 INSTANCE: named-tuple assoc
24
25 M: named-tuple length tuple-size ;
26
27 M: named-tuple nth-unsafe
28     [ integer>fixnum ] dip array-nth ;
29
30 M: named-tuple set-nth-unsafe
31     [ integer>fixnum ] dip set-array-nth ;
32
33 M: named-tuple like class-of slots>tuple ;
34
35 INSTANCE: named-tuple sequence
36