        (-target-count [this]
          (target-count target))
        (-target-move [this elem-idx before-idx]
-         (target-move target elem-idx before-idx))
-       (-target-remove [this elem-idx]
-         (target-remove target elem-idx))
-       (-target-clear [this]
-         (target-clear target)))
+         (target-move target elem-idx before-idx)))
 
      (defn pwrap [proj wrap-fn]
        (reify IProjection

  (-target-peek [this elem-idx])
  (-target-take [this elem-idx])
  (-target-count [this])
  (-target-move [this elem-idx before-idx])
  (-target-remove [this elem-idx])
  (-target-clear [this]))

(defn target-init [this source] (-target-init this source))



(defn target-move [this idx before-idx] (-target-move this idx before-idx))

(defn target-remove [this idx]
  (let [res (-target-take this idx)]
    (dispose res)))

(defn target-clear [this]
  (dotimes [i (target-count this)]
    (target-remove 0)))

(defprotocol IProjection
  (-project [this target enqueue-fn]))
