mirror of
https://github.com/penpot/penpot.git
synced 2026-04-27 04:08:23 +00:00
✨ Make mem write helpers receive offset as first arg
This commit is contained in:
parent
af02e12685
commit
5c4a60aee7
@ -469,9 +469,11 @@
|
||||
;; alligned writes, so for heteregeneus writes we use
|
||||
;; the buffer abstraction (DataView) for perform
|
||||
;; surgical writes.
|
||||
(mem/write-u8 dview (+ offset 0) (sr/translate-grid-track-type type))
|
||||
(mem/write-f32 dview (+ offset 1) value)
|
||||
(+ offset GRID-LAYOUT-ROW-U8-SIZE))
|
||||
(-> offset
|
||||
(mem/write-u8 dview (sr/translate-grid-track-type type))
|
||||
(mem/write-f32 dview value)
|
||||
(mem/assert-written offset GRID-LAYOUT-ROW-U8-SIZE)))
|
||||
|
||||
offset
|
||||
entries)
|
||||
|
||||
@ -489,9 +491,12 @@
|
||||
;; alligned writes, so for heteregeneus writes we use
|
||||
;; the buffer abstraction (DataView) for perform
|
||||
;; surgical writes.
|
||||
(mem/write-u8 dview (+ offset 0) (sr/translate-grid-track-type type))
|
||||
(mem/write-f32 dview (+ offset 1) value)
|
||||
(+ offset GRID-LAYOUT-COLUMN-U8-SIZE))
|
||||
(-> offset
|
||||
(mem/write-u8 dview (sr/translate-grid-track-type type))
|
||||
(mem/write-f32 dview value)
|
||||
(mem/assert-written offset GRID-LAYOUT-COLUMN-U8-SIZE)))
|
||||
|
||||
|
||||
offset
|
||||
entries)
|
||||
|
||||
@ -504,42 +509,42 @@
|
||||
dview (mem/get-data-view)]
|
||||
|
||||
(reduce-kv (fn [offset _ cell]
|
||||
;; row: [u8; 4],
|
||||
(mem/write-i32 dview (+ offset 0) (get cell :row))
|
||||
|
||||
;; row_span: [u8; 4],
|
||||
(mem/write-i32 dview (+ offset 4) (get cell :row-span))
|
||||
|
||||
;; column: [u8; 4],
|
||||
(mem/write-i32 dview (+ offset 8) (get cell :column))
|
||||
|
||||
;; column_span: [u8; 4],
|
||||
(mem/write-i32 dview (+ offset 12) (get cell :column-span))
|
||||
|
||||
;; has_align_self: u8,
|
||||
(mem/write-bool dview (+ offset 16) (some? (get cell :align-self)))
|
||||
|
||||
;; align_self: u8,
|
||||
(mem/write-u8 dview (+ offset 17) (get cell :align-self))
|
||||
|
||||
;; has_justify_self: u8,
|
||||
(mem/write-bool dview (+ offset 18) (get cell :justify-self))
|
||||
|
||||
;; justify_self: u8,
|
||||
(mem/write-u8 dview (+ offset 19) (sr/translate-justify-self (get cell :justify-self)))
|
||||
|
||||
(let [shape-id (-> (get cell :shapes) first)]
|
||||
;; has_shape_id: u8,
|
||||
;; (.set heap (sr/bool->u8 (d/not-empty? (:shapes cell))) (+ current-offset 20))
|
||||
(mem/write-u8 dview (+ offset 20) (some? shape-id))
|
||||
(-> offset
|
||||
;; row: [u8; 4],
|
||||
(mem/write-i32 dview (get cell :row))
|
||||
|
||||
;; shape_id_a: [u8; 4],
|
||||
;; shape_id_b: [u8; 4],
|
||||
;; shape_id_c: [u8; 4],
|
||||
;; shape_id_d: [u8; 4],
|
||||
(mem/write-uuid dview (+ offset 21) (d/nilv shape-id uuid/zero)))
|
||||
;; row_span: [u8; 4],
|
||||
(mem/write-i32 dview (get cell :row-span))
|
||||
|
||||
(+ offset GRID-LAYOUT-CELL-U8-SIZE))
|
||||
;; column: [u8; 4],
|
||||
(mem/write-i32 dview (get cell :column))
|
||||
|
||||
;; column_span: [u8; 4],
|
||||
(mem/write-i32 dview (get cell :column-span))
|
||||
|
||||
;; has_align_self: u8,
|
||||
(mem/write-bool dview (some? (get cell :align-self)))
|
||||
|
||||
;; align_self: u8,
|
||||
(mem/write-u8 dview (get cell :align-self))
|
||||
|
||||
;; has_justify_self: u8,
|
||||
(mem/write-bool dview (get cell :justify-self))
|
||||
|
||||
;; justify_self: u8,
|
||||
(mem/write-u8 dview (sr/translate-justify-self (get cell :justify-self)))
|
||||
|
||||
;; has_shape_id: u8,
|
||||
;; (.set heap (sr/bool->u8 (d/not-empty? (:shapes cell))) (+ current-offset 20))
|
||||
(mem/write-u8 dview (some? shape-id))
|
||||
|
||||
;; shape_id_a: [u8; 4],
|
||||
;; shape_id_b: [u8; 4],
|
||||
;; shape_id_c: [u8; 4],
|
||||
;; shape_id_d: [u8; 4],
|
||||
(mem/write-uuid dview (d/nilv shape-id uuid/zero))
|
||||
(mem/assert-written offset GRID-LAYOUT-CELL-U8-SIZE))))
|
||||
|
||||
offset
|
||||
cells)
|
||||
|
||||
@ -67,12 +67,6 @@
|
||||
[heap offset size]
|
||||
(.slice ^js heap offset (+ offset size)))
|
||||
|
||||
(defn view
|
||||
"Returns a new typed array on the same ArrayBuffer store and with the
|
||||
same element types as for this typed array."
|
||||
[heap offset size]
|
||||
(.subarray ^js heap offset (+ offset size)))
|
||||
|
||||
(defn get-data-view
|
||||
"Returns a heap wrapped in a DataView for surgical write operations"
|
||||
[]
|
||||
@ -80,25 +74,64 @@
|
||||
|
||||
(defn write-u8
|
||||
"Write unsigned int8. Expects a DataView instance"
|
||||
[target offset value]
|
||||
(buf/write-u8 target offset value))
|
||||
[offset target value]
|
||||
(buf/write-u8 target offset value)
|
||||
(+ offset 1))
|
||||
|
||||
(defn write-f32
|
||||
"Write float32. Expects a DataView instance"
|
||||
[target offset value]
|
||||
(buf/write-f32 target offset value))
|
||||
[offset target value]
|
||||
(buf/write-f32 target offset value)
|
||||
(+ offset 4))
|
||||
|
||||
(defn write-i32
|
||||
"Write int32. Expects a DataView instance"
|
||||
[target offset value]
|
||||
(buf/write-i32 target offset value))
|
||||
[offset target value]
|
||||
(buf/write-i32 target offset value)
|
||||
(+ offset 4))
|
||||
|
||||
(defn write-u32
|
||||
"Write int32. Expects a DataView instance"
|
||||
[offset target value]
|
||||
(buf/write-i32 target offset value)
|
||||
(+ offset 4))
|
||||
|
||||
(defn write-bool
|
||||
"Write int32. Expects a DataView instance"
|
||||
[target offset value]
|
||||
(buf/write-bool target offset value))
|
||||
[offset target value]
|
||||
(buf/write-bool target offset value)
|
||||
(+ offset 1))
|
||||
|
||||
(defn write-uuid
|
||||
"Write uuid. Expects a DataView instance"
|
||||
[target offset value]
|
||||
(buf/write-uuid target offset value))
|
||||
[offset target value]
|
||||
(buf/write-uuid target offset value)
|
||||
(+ offset 16))
|
||||
|
||||
(defn write-buffer
|
||||
[offset target value]
|
||||
(assert (instance? js/Uint8Array target) "target should be u8 addressable heap")
|
||||
|
||||
(let [value (cond
|
||||
(instance? js/ArrayBuffer value)
|
||||
(new js/Uint8Array. value)
|
||||
|
||||
(instance? js/Uint8Array value)
|
||||
value
|
||||
|
||||
:else
|
||||
(throw (js/Error. "unexpected type")))]
|
||||
(.set ^js target value offset)
|
||||
(+ offset (.-byteLength value))))
|
||||
|
||||
(defn assert-written
|
||||
[final-offset prev-offset expected]
|
||||
(assert (= expected (- final-offset prev-offset))
|
||||
(str "expected to be written " expected " but finally writted " (- final-offset prev-offset)))
|
||||
final-offset)
|
||||
|
||||
(defn size
|
||||
"Get buffer size"
|
||||
[o]
|
||||
(.-byteLength ^js o))
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user