1 USING: classes kernel accessors sequences fry assocs mongodb.tuple.collection
2 words classes.tuple slots generic ;
4 IN: mongodb.tuple.state
8 CONSTANT: MDB_TUPLE_INFO "_mfd_t_info"
9 CONSTANT: MDB_DIRTY_FLAG "d?"
10 CONSTANT: MDB_PERSISTENT_FLAG "p?"
11 CONSTANT: MDB_DIRTY_ADVICE "mdb-dirty-set"
15 SYMBOL: mdb-dirty-handling?
17 : advised-with? ( name word loc -- ? )
18 word-prop key? ; inline
20 : <tuple-info> ( tuple -- tuple-info )
22 [ [ name>> ] dip push ]
23 [ [ vocabulary>> ] dip push ] 2bi ; inline
25 : tuple-info ( assoc -- tuple-info )
26 [ MDB_TUPLE_INFO ] dip at ; inline
28 : set-tuple-info ( tuple assoc -- )
29 [ <tuple-info> MDB_TUPLE_INFO ] dip set-at ; inline
31 : tuple-info? ( assoc -- ? )
32 [ MDB_TUPLE_INFO ] dip key? ;
34 : tuple-meta ( tuple -- assoc )
35 dup _mfd>> [ ] [ H{ } clone [ >>_mfd ] keep ] if* nip ; inline
37 : dirty? ( tuple -- ? )
38 [ MDB_DIRTY_FLAG ] dip tuple-meta at ;
40 : mark-dirty ( tuple -- )
41 [ t MDB_DIRTY_FLAG ] dip tuple-meta set-at ;
43 : persistent? ( tuple -- ? )
44 [ MDB_PERSISTENT_FLAG ] dip tuple-meta at ;
46 : mark-persistent ( tuple -- )
47 [ t MDB_PERSISTENT_FLAG ] dip tuple-meta [ set-at ] keep
48 [ f MDB_DIRTY_FLAG ] dip set-at ;
50 : needs-store? ( tuple -- ? )
51 [ persistent? not ] [ dirty? ] bi or ;