 
 (defmacro take-from-queue
   [queue]
-  `(loop []
-     (if (not (.isEmpty ~queue))
-       (.remove ~queue)
-       (do
-         (Thread/yield)
-         (recur)))))
-;  `(.take ~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))
 
 
 

  []
  (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 enqueue
  [queue data enqueued-counter dropped-counter]
  (println "Enqueueing data via:")
  (let [expr (condp (fn [^String v ^String s] (.contains s v)) queue-setup
               "add-counted-yield" `(if (< (.size ~queue) queue-size)
                                      (do
                                        (.add ~queue ~data)
