(defstruct trie (value nil) (arcs nil))
(setf (symbol-function 'comp-<=) (complement #'comp->))
(setf (symbol-function 'comp->=) (complement #'comp-<))
(setf (symbol-function 'comp-/=) (complement #'comp-=))
(defstruct heap (array (make-array 5 :adjustable t)) (size 0) (key-fn #'identity) (value-fn #'identity) (array-increment 3/4) (comparator (number-comparator)))
(defstruct pool (count 0) (store (make-queue)) (add-strategie #'enqueue) (next-strategie (lambda (q) (let ((data (front q))) (dequeue q) (values data t)))))
Function POOL-ADD returns the number of elements of pool or nil if obj wasn't added to pool
Function POOL-NEXT returns the next object from the pool