 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;    Top-level    ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
+(defn pp [q xs]
+  ;(println "adding" (count xs)) 
+  (queues/pq-add-all! q xs))
 
 (defn sahucs-inverted [henv]
   (let [e     (hierarchy/env henv)

      (do (assert (pred (get m k) v)) m)
    (assoc m k v)))


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; Data Structures ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

    (.add hs init-parent-entry)
    (SANode context a (atom init-result-map) (atom [[init-parent-entry ip-reward]]) hs)))


(defn gq-parent-key [parent-info]
  (if (= parent-info :fresh) :fresh (first (first parent-info))))

(deftype GQEntry [effects reward-to-state sanode remaining-parents-atom] :as this
    Object
    (equals [y] 
      (and (= effects (:effects y)) 
           (identical? sanode (:sanode y))
           (identical? (gq-parent-key @remaining-parents-atom) 
                       (gq-parent-key @(:remaining-parents-atom y)))))
    (hashCode [] 
      (unchecked-add (int (hash effects))
        (unchecked-multiply (int 13) 
          (unchecked-add (System/identityHashCode sanode)
            (unchecked-multiply (int 17) 
              (System/identityHashCode (gq-parent-key @remaining-parents-atom))))))))


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
