#+xcvb (module (:depends-on ("grain-interface"))) (in-package :xcvb) (defvar *ordered-grains* (make-array '(0) :adjustable t :fill-pointer 0) "Array mapping numbers to grains, so we can associate them and have compact FMIM set representations. Each grain should conversely have a number mapping back to this array...") (defmethod grain-ordinal :before ((grain grain)) (unless (slot-boundp grain 'ordinal) (setf (grain-ordinal grain) (vector-push-extend grain *ordered-grains*)))) (defun check-grain-ordinal (ordinal) (check-type ordinal fixnum) (assert (< ordinal (fill-pointer *ordered-grains*)))) (defun ordinal-grain (ordinal) (check-grain-ordinal ordinal) (aref *ordered-grains* ordinal)) #| (define-interface ( ) () (:singleton) (:method base-interface () ) (:method encode-key (grain) (grain-ordinal grain)) (:method decode-key (ordinal) (ordinal-grain ordinal))) (defparameter ) |#