NM, huge difference in performance even with the cast.
Old version:
(time (dotimes [_ 1000] (byte-array-contains? header 0xFE)))
"Elapsed time: 337.312 msecs"
New version:
(time (dotimes [_ 1000] (byte-array-contains? header 0xFE)))
"Elapsed time: 4.278 msecs"
On that note, is there a native way to check whether a byte array
contains a given value? The contains? function seems to indicate
whether a given index exists in the array rather than inspecting the
actual value? My best stab at the moment is as follows:
(defn byte-array-contains? [coll key]
"scans a byte array for a given value"
(loop [i 0]
(if (< i (count coll))
(if (== (int (byte key)) (int (byte (aget coll i))))
true
(recur (inc i))))))
Travis
On May 14, 11:40 am, tmountain <[email protected]> wrote:
> If that's the case, would I even get a performance increase, or would
> the cast overhead cost more than the implicit reflection?
>
> On May 14, 11:32 am, David Nolen <[email protected]> wrote:
>
> > This baffled me as well. You need to cast to int.
>
> > On Thu, May 14, 2009 at 11:22 AM, tmountain <[email protected]> wrote:
>
> > > I'm trying to optimize some code I've written, and I have set warn on
> > > reflection as advised. I'm having a hard time getting a simple
> > > statement to avoid reflection.
>
> > > user=> (== (byte 0x1) (byte 0x1))
> > > Reflection warning, line: 33 - call to equiv can't be resolved.
>
> > > Can you use type hints on primitive types? I've tried obvious stuff
> > > like:
>
> > > user=> (== #^byte (byte 0x1) #^byte (byte 0x1))
> > > Reflection warning, line: 4 - call to equiv can't be resolved.
>
> > > and other variations without success.
>
> > > Thanks,
> > > Travis
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---