On Sat, Jul 9, 2011 at 10:10 AM, stu <stuart.hungerf...@gmail.com> wrote:

> Hi,
>
> I'd like to make use of Java classes implementing the Java2D
> PathIterator interface:
>
>
> http://download.oracle.com/javase/6/docs/api/java/awt/geom/PathIterator.html
>
> Which leads to a serious impedance mismatch between immutable Clojure
> data structures and the iterator's approach of calling next() until
> isDone() and using currentSegment() to retrieve the point
> coordinates.
>
> I'd guess this kind of iterator is widely used in the Java world, so
> can some kind person point to an example of Clojure code using a Java
> iterator in this way?
>
> Thanks in advance,
>
> Stu
>

Clojure has a built in function, iterator-seq, which converts a
java.util.Iterator to a lazy-seq.  Lazy-seq's keep a copy of each data item
that they have grabbed from the iterator, so they hide the mutability of
Iterators.

http://clojuredocs.org/clojure_core/clojure.core/iterator-seq

Your interface doesn't subclass java.util.Iterator though, so you would need
to make something similar.

I haven't tested this, but maybe something like this:


(defn pathiterator-seq
  [i]
  (when-not (.isDone i)
    (lazy-seq
     (.next i)
     (let [arr (make-array Double/TYPE 6)
           type (.currentSegment i arr)]
       (cons {:type type :coords (into [] arr)}
             (pathiterator-seq i))))))


-- 
Dave

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to