mirror of
https://github.com/penpot/penpot.git
synced 2026-09-07 12:40:12 +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
|
;; alligned writes, so for heteregeneus writes we use
|
||||||
;; the buffer abstraction (DataView) for perform
|
;; the buffer abstraction (DataView) for perform
|
||||||
;; surgical writes.
|
;; surgical writes.
|
||||||
(mem/write-u8 dview (+ offset 0) (sr/translate-grid-track-type type))
|
(-> offset
|
||||||
(mem/write-f32 dview (+ offset 1) value)
|
(mem/write-u8 dview (sr/translate-grid-track-type type))
|
||||||
(+ offset GRID-LAYOUT-ROW-U8-SIZE))
|
(mem/write-f32 dview value)
|
||||||
|
(mem/assert-written offset GRID-LAYOUT-ROW-U8-SIZE)))
|
||||||
|
|
||||||
offset
|
offset
|
||||||
entries)
|
entries)
|
||||||
|
|
||||||
@ -489,9 +491,12 @@
|
|||||||
;; alligned writes, so for heteregeneus writes we use
|
;; alligned writes, so for heteregeneus writes we use
|
||||||
;; the buffer abstraction (DataView) for perform
|
;; the buffer abstraction (DataView) for perform
|
||||||
;; surgical writes.
|
;; surgical writes.
|
||||||
(mem/write-u8 dview (+ offset 0) (sr/translate-grid-track-type type))
|
(-> offset
|
||||||
(mem/write-f32 dview (+ offset 1) value)
|
(mem/write-u8 dview (sr/translate-grid-track-type type))
|
||||||
(+ offset GRID-LAYOUT-COLUMN-U8-SIZE))
|
(mem/write-f32 dview value)
|
||||||
|
(mem/assert-written offset GRID-LAYOUT-COLUMN-U8-SIZE)))
|
||||||
|
|
||||||
|
|
||||||
offset
|
offset
|
||||||
entries)
|
entries)
|
||||||
|
|
||||||
@ -504,42 +509,42 @@
|
|||||||
dview (mem/get-data-view)]
|
dview (mem/get-data-view)]
|
||||||
|
|
||||||
(reduce-kv (fn [offset _ cell]
|
(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)]
|
(let [shape-id (-> (get cell :shapes) first)]
|
||||||
;; has_shape_id: u8,
|
(-> offset
|
||||||
;; (.set heap (sr/bool->u8 (d/not-empty? (:shapes cell))) (+ current-offset 20))
|
;; row: [u8; 4],
|
||||||
(mem/write-u8 dview (+ offset 20) (some? shape-id))
|
(mem/write-i32 dview (get cell :row))
|
||||||
|
|
||||||
;; shape_id_a: [u8; 4],
|
;; row_span: [u8; 4],
|
||||||
;; shape_id_b: [u8; 4],
|
(mem/write-i32 dview (get cell :row-span))
|
||||||
;; shape_id_c: [u8; 4],
|
|
||||||
;; shape_id_d: [u8; 4],
|
|
||||||
(mem/write-uuid dview (+ offset 21) (d/nilv shape-id uuid/zero)))
|
|
||||||
|
|
||||||
(+ 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
|
offset
|
||||||
cells)
|
cells)
|
||||||
|
|||||||
@ -67,12 +67,6 @@
|
|||||||
[heap offset size]
|
[heap offset size]
|
||||||
(.slice ^js heap offset (+ 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
|
(defn get-data-view
|
||||||
"Returns a heap wrapped in a DataView for surgical write operations"
|
"Returns a heap wrapped in a DataView for surgical write operations"
|
||||||
[]
|
[]
|
||||||
@ -80,25 +74,64 @@
|
|||||||
|
|
||||||
(defn write-u8
|
(defn write-u8
|
||||||
"Write unsigned int8. Expects a DataView instance"
|
"Write unsigned int8. Expects a DataView instance"
|
||||||
[target offset value]
|
[offset target value]
|
||||||
(buf/write-u8 target offset value))
|
(buf/write-u8 target offset value)
|
||||||
|
(+ offset 1))
|
||||||
|
|
||||||
(defn write-f32
|
(defn write-f32
|
||||||
"Write float32. Expects a DataView instance"
|
"Write float32. Expects a DataView instance"
|
||||||
[target offset value]
|
[offset target value]
|
||||||
(buf/write-f32 target offset value))
|
(buf/write-f32 target offset value)
|
||||||
|
(+ offset 4))
|
||||||
|
|
||||||
(defn write-i32
|
(defn write-i32
|
||||||
"Write int32. Expects a DataView instance"
|
"Write int32. Expects a DataView instance"
|
||||||
[target offset value]
|
[offset target value]
|
||||||
(buf/write-i32 target offset 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
|
(defn write-bool
|
||||||
"Write int32. Expects a DataView instance"
|
"Write int32. Expects a DataView instance"
|
||||||
[target offset value]
|
[offset target value]
|
||||||
(buf/write-bool target offset value))
|
(buf/write-bool target offset value)
|
||||||
|
(+ offset 1))
|
||||||
|
|
||||||
(defn write-uuid
|
(defn write-uuid
|
||||||
"Write uuid. Expects a DataView instance"
|
"Write uuid. Expects a DataView instance"
|
||||||
[target offset value]
|
[offset target value]
|
||||||
(buf/write-uuid target offset 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