Add convenience functions for reading and writing addresses

This commit is contained in:
Joshua Suskalo 2022-01-18 15:39:49 -06:00
parent d6cfa115e1
commit 5c560e684d

View file

@ -385,6 +385,19 @@
(^double [^MemorySegment segment ^long offset ^ByteOrder byte-order] (^double [^MemorySegment segment ^long offset ^ByteOrder byte-order]
(MemoryAccess/getDoubleAtOffset segment offset byte-order))) (MemoryAccess/getDoubleAtOffset segment offset byte-order)))
(defn read-address
"Reads a [[MemoryAddress]] from the `segment`, at an optional `offset`."
{:inline
(fn read-address-inline
([segment]
`(MemoryAccess/getAddress ~segment))
([segment offset]
`(MemoryAccess/getAddressAtOffset ~segment ~offset)))}
(^MemoryAddress [^MemorySegment segment]
(MemoryAccess/getAddress segment))
(^MemoryAddress [^MemorySegment segment ^long offset]
(MemoryAccess/getAddressAtOffset segment offset)))
(defn write-byte (defn write-byte
"Writes a [[byte]] to the `segment`, at an optional `offset`." "Writes a [[byte]] to the `segment`, at an optional `offset`."
{:inline {:inline
@ -511,6 +524,19 @@
(^double [^MemorySegment segment ^long offset ^ByteOrder byte-order ^double value] (^double [^MemorySegment segment ^long offset ^ByteOrder byte-order ^double value]
(MemoryAccess/setDoubleAtOffset segment offset byte-order value))) (MemoryAccess/setDoubleAtOffset segment offset byte-order value)))
(defn write-address
"Writes a [[MemoryAddress]] to the `segment`, at an optional `offset`."
{:inline
(fn write-address-inline
([segment value]
`(MemoryAccess/setAddress ~segment ~value))
([segment offset value]
`(MemoryAccess/setAddressAtOffset ~segment ~offset ~value)))}
(^MemoryAddress [^MemorySegment segment ^MemoryAddress value]
(MemoryAccess/setAddress segment value))
(^MemoryAddress [^MemorySegment segment ^long offset ^MemoryAddress value]
(MemoryAccess/setAddressAtOffset segment offset value)))
(defn- type-dispatch (defn- type-dispatch
"Gets a type dispatch value from a (potentially composite) type." "Gets a type dispatch value from a (potentially composite) type."
[type] [type]