USING: formatting words classes.mixin kernel fry compiler.units accessors classes classes.tuple ; IN: mongodb.persistent MIXIN: persistent-tuple SLOT: _p_oid SLOT: _p_info TUPLE: oid { a initial: 0 } { b initial: 0 } ; TUPLE: persistent-info type vocab collection dirty? mt ; GENERIC: persistent-tuple-class ( tuple -- class ) M: tuple persistent-tuple-class ( tuple -- class ) class persistent-tuple-class ; M: tuple-class persistent-tuple-class ( class -- class' ) [ [ vocabulary>> ] [ name>> ] bi ] keep ! name vocab class [ "%s_%s" sprintf ] dip swap dup ! class new_name new_name P_VOCAB lookup dup ! class new_name vo/f vo/f [ [ drop drop ] dip ] [ drop define-persistent-tuple ] if ; GENERIC: make-persistent ( tuple -- 'tuple ) M: tuple make-persistent ( tuple -- 'tuple ) [let* | tuple [ ] class [ tuple class ] 'tuple [ class persistent-tuple-class new ] | ] ;