gnuvince / clj-starcraft

No description has been added.

Clone this repository (size: 138.8 KB): HTTPS / SSH
$ hg clone http://bitbucket.org/gnuvince/clj-starcraft/
commit 48: 49513e3ec01f
parent 47: 20dd6adcb9d0
branch: default
removed extraneous parameter from make-reader and renamed getters to readers
Vincent Foley / gnuvince
12 months ago

Changed (Δ39 bytes):

raw changeset »

src/starcraft/replay/parse.clj (8 lines added, 9 lines removed)

Up to file-list src/starcraft/replay/parse.clj:

11
11
12
12
13
13
(defmacro make-reader
14
  [type get-fn mask-fn]
14
  [get-fn mask-fn]
15
15
  `(fn [#^ByteBuffer buf# len#]
16
16
     (if (= len# 1)
17
17
       (~mask-fn (. buf# (~get-fn)))
18
       (let [arr# #^"[I" (make-array (. Integer TYPE) len#)]
18
       (let [#^"[I" arr# (int-array len#)]
19
19
         (dotimes [i# len#]
20
           (aset arr# i# (~mask-fn (. buf# (~get-fn)))))
20
           (aset-int arr# i# (~mask-fn (. buf# (~get-fn)))))
21
21
         arr#))))
22
22
23
24
23
(def read-field
25
24
     (let [mask8 (fn [x] (bit-and x 0xff))
26
25
           mask16 (fn [x] (bit-and x 0xffff))
27
           read-bytes (make-reader Byte get mask8)
28
           read-shorts (make-reader Short getShort mask16)
29
           read-ints (make-reader Integer getInt identity)
30
           getters {Byte read-bytes
26
           read-bytes (make-reader get mask8)
27
           read-shorts (make-reader getShort mask16)
28
           read-ints (make-reader getInt identity)
29
           readers {Byte read-bytes
31
30
                    Short read-shorts
32
31
                    Integer read-ints
33
32
                    String read-null-string}]
35
34
         (let [real-size (if (vector? size)
36
35
                           (apply read-field buf size)
37
36
                           size)]
38
           ((getters type) buf real-size)))))
37
           ((readers type) buf real-size)))))
39
38
40
39
41
40
(defn parse-buffer