|
11 | 11 | (:import |
12 | 12 | (java.util Optional) |
13 | 13 | (java.nio ByteBuffer) |
| 14 | + (java.nio IntBuffer) |
14 | 15 | (java.nio.charset StandardCharsets) |
15 | 16 | (org.rapidyaml Evt Rapidyaml) |
16 | 17 | (org.snakeyaml.engine.v2.api LoadSettings) |
|
240 | 241 | (let [parser ^Rapidyaml (new Rapidyaml) |
241 | 242 | _ (when TIMER |
242 | 243 | (.timingEnabled parser true)) |
243 | | - srcbytes (.getBytes yaml-string StandardCharsets/UTF_8) |
244 | | - srcbuffer (ByteBuffer/allocateDirect (alength srcbytes)) |
| 244 | + srcbytes ^"[B" (.getBytes yaml-string StandardCharsets/UTF_8) |
| 245 | + srcbuffer ^ByteBuffer (ByteBuffer/allocateDirect (alength srcbytes)) |
245 | 246 | _ (.put srcbuffer srcbytes) |
246 | | - masks (Rapidyaml/mkIntBuffer 5) |
| 247 | + masks ^IntBuffer (Rapidyaml/mkIntBuffer 5) |
247 | 248 | needed (.parseYsToEvtBuf parser srcbuffer masks) |
| 249 | + _ (.position srcbuffer 0) |
248 | 250 | _ (.put srcbuffer srcbytes) |
249 | | - masks (Rapidyaml/mkIntBuffer needed) |
| 251 | + masks ^IntBuffer (Rapidyaml/mkIntBuffer needed) |
250 | 252 | _ (.parseYsToEvtBuf parser srcbuffer masks) |
251 | | - ;; TODO: aget slow? |
252 | | - ;; https://stackoverflow.com/questions/10133094/clojure-why-is-aget-so-slow |
253 | 253 | get-str (fn [i] |
254 | | - (let [off (aget masks (inc i)) |
255 | | - len (aget masks (+ i 2))] |
| 254 | + (let [off (.get masks (inc i)) |
| 255 | + len (.get masks (+ i 2))] |
256 | 256 | (reduce |
257 | | - (fn [slice i] (str slice (char (aget srcbuffer i)))) |
| 257 | + (fn [slice i] (str slice (char (.get srcbuffer i)))) |
258 | 258 | "" (range off (+ off len)))))] |
259 | 259 |
|
260 | 260 | (loop [i 0, tag nil, anchor nil, events []] |
261 | 261 | (if (< i needed) |
262 | | - (let [mask (aget masks i) |
| 262 | + (let [mask (.get masks i) |
263 | 263 | type (event-type mask) |
264 | 264 | ; _ (WWW (Integer/toString mask 2) type) |
265 | 265 | sval (when (flag? HAS_STR mask) (get-str i)) |
|
0 commit comments