 ;                  "ArrayBlockingQueue_put"))]
 ;                  "ArrayBlockingQueue_put-counted-yield"))]
                   "ArrayBlockingQueue_add-counted-yield"))]
+;                  "ArrayBlockingQueue_add-counted-yield_remove-yield"))]
 ;                  "ArrayBlockingQueue_offer"))]
 ;                  "ArrayBlockingQueue_offer-counted-yield"))]
 ;                  "LinkedTransferQueue_transfer"))]

  []
  (println "Setting up queue creation for:" queue-setup)
  (let [expr (condp (fn [^String v ^String s] (.startsWith s v)) queue-setup
               "LinkedBlockingQueue" `(LinkedBlockingQueue. queue-size)
               "ArrayBlockingQueue" `(ArrayBlockingQueue. queue-size)
               "LinkedTransferQueue" `(LinkedTransferQueue.))]
    (println expr)
    expr))


(defmacro take-from-queue
  [queue]
  (println "Retrieving data from queue via:")
  (let [expr (condp (fn [^String v ^String s] (.endsWith s v)) queue-setup
               "remove-yield" `(loop []
                                 (if (not (.isEmpty ~queue))
                                   (.remove ~queue)
                                   (do
                                     (Thread/yield)
                                     (recur))))
               `(.take ~queue))]
    (println expr)
    expr))



