Package org.jruby.ext.ffi
Class MemoryIO
java.lang.Object
org.jruby.ext.ffi.MemoryIO
- Direct Known Subclasses:
ArrayMemoryIO
,InvalidMemoryIO
,SwappedMemoryIO
Abstracted memory operations.
This abstracts read/write operations to either a native memory area, or a java ByteBuffer.
-
Field Summary
Fields -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionfinal long
address()
Gets the native address of this memory region.abstract Object
array()
abstract int
abstract int
abstract ByteBuffer
Creates a view of this memory object as a java NIO byte buffer.abstract MemoryIO
dup()
Duplicates thisMemoryIO
, including its contents.abstract void
get
(long offset, byte[] dst, int off, int len) Reads an array of bytes from the memory area at the specified offset.abstract void
get
(long offset, double[] dst, int off, int len) Reads an array of doubles from the memory area at the specified offset.abstract void
get
(long offset, float[] dst, int off, int len) Reads an array of floats from the memory area at the specified offset.abstract void
get
(long offset, int[] dst, int off, int len) Reads an array of ints from the memory area at the specified offset.abstract void
get
(long offset, long[] dst, int off, int len) Reads an array of longs from the memory area at the specified offset.abstract void
get
(long offset, short[] dst, int off, int len) Reads an array of shorts from the memory area at the specified offset.abstract long
getAddress
(long offset) Reads a pointer value at the specified offset within the memory area.abstract byte
getByte
(long offset) Reads an 8 bit integer value from the memory area.abstract double
getDouble
(long offset) Reads a double value from the memory area.abstract float
getFloat
(long offset) Reads a float value from the memory area.abstract int
getInt
(long offset) Reads a 32 bit integer value from the memory area.abstract long
getLong
(long offset) Reads a 64 bit integer value from the memory area.abstract MemoryIO
getMemoryIO
(long offset) Reads a pointer value at the specified offset within the memory area, and wraps it in an abstract memory accessor.abstract long
getNativeLong
(long offset) Reads a native long integer value from the memory area.abstract short
getShort
(long offset) Reads a 16 bit integer value from the memory area.abstract byte[]
getZeroTerminatedByteArray
(long offset) Reads a zero terminated byte array (e.g.abstract byte[]
getZeroTerminatedByteArray
(long offset, int maxlen) Reads a zero terminated byte array (e.g.abstract int
indexOf
(long offset, byte value) Gets the first index within the memory area of a particular 8 bit value.abstract int
indexOf
(long offset, byte value, int maxlen) Gets the first index within the memory area of a particular 8 bit value.final boolean
isDirect()
Checks if the memory area is a native memory pointer.final boolean
isNull()
Checks if the memory area is NULL.abstract ByteOrder
order()
Gets theByteOrder
thisMemoryIO
instance will read/write values to memory in.abstract void
put
(long offset, byte[] src, int off, int len) Writes an array of bytes to the memory area at the specified offset.abstract void
put
(long offset, double[] src, int off, int len) Writes an array of doubles to the memory area at the specified offset.abstract void
put
(long offset, float[] src, int off, int len) Writes an array of floats to the memory area at the specified offset.abstract void
put
(long offset, int[] src, int off, int len) Writes an array of ints to the memory area at the specified offset.abstract void
put
(long offset, long[] src, int off, int len) Writes an array of longs to the memory area at the specified offset.abstract void
put
(long offset, short[] src, int off, int len) Writes an array of shorts to the memory area at the specified offset.abstract void
putAddress
(long offset, long value) Writes a pointer value to the memory area at the specified offset.abstract void
putByte
(long offset, byte value) Writes an 8 bit integer value to the memory area at the specified offset.abstract void
putDouble
(long offset, double value) Writes a 64 bit float value to the memory area at the specified offset.abstract void
putFloat
(long offset, float value) Writes a 32 bit float value to the memory area at the specified offset.abstract void
putInt
(long offset, int value) Writes a 32 bit integer value to the memory area at the specified offset.abstract void
putLong
(long offset, long value) Writes a 64 bit integer value to the memory area at the specified offset.abstract void
putMemoryIO
(long offset, MemoryIO value) Writes a pointer value to the memory area at the specified offset.abstract void
putNativeLong
(long offset, long value) Writes a native long integer value to the memory area at the specified offset.abstract void
putShort
(long offset, short value) Writes a 16 bit integer value to the memory area at the specified offset.abstract void
putZeroTerminatedByteArray
(long offset, byte[] bytes, int off, int len) Writes a byte array to memory, and appends a zero terminatorabstract void
setMemory
(long offset, long size, byte value) Sets the contents of the memory area to the value.abstract MemoryIO
slice
(long offset) Creates a new MemoryIO pointing to a subset of the memory area of thisMemoryIO
.abstract MemoryIO
slice
(long offset, long size) Creates a new MemoryIO pointing to a subset of the memory area of thisMemoryIO
.
-
Field Details
-
isDirect
protected final boolean isDirect -
address
protected final long address
-
-
Constructor Details
-
MemoryIO
protected MemoryIO(boolean direct, long address)
-
-
Method Details
-
isNull
public final boolean isNull()Checks if the memory area is NULL.- Returns:
true
if the memory area is invalid.
-
isDirect
public final boolean isDirect()Checks if the memory area is a native memory pointer.- Returns:
true
if the memory area is a native pointer.
-
address
public final long address()Gets the native address of this memory region. May return NULL (0) if this is not a direct pointer.- Returns:
- A long value containing the native memory address
-
array
-
arrayOffset
public abstract int arrayOffset() -
arrayLength
public abstract int arrayLength() -
order
Gets theByteOrder
thisMemoryIO
instance will read/write values to memory in.- Returns:
- The current ByteOrder
-
slice
Creates a new MemoryIO pointing to a subset of the memory area of thisMemoryIO
.- Parameters:
offset
- The offset within the existing memory area to start the newMemoryIO
at.- Returns:
- A
MemoryIO
instance.
-
slice
Creates a new MemoryIO pointing to a subset of the memory area of thisMemoryIO
.- Parameters:
offset
- The offset within the existing memory area to start the newMemoryIO
at.size
- The size of the new slice.- Returns:
- A
MemoryIO
instance.
-
dup
Duplicates thisMemoryIO
, including its contents.- Returns:
- A
MemoryIO
instance.
-
asByteBuffer
Creates a view of this memory object as a java NIO byte buffer.- Returns:
- A ByteBuffer instance
-
getByte
public abstract byte getByte(long offset) Reads an 8 bit integer value from the memory area.- Parameters:
offset
- The offset within the memory area to read the value.- Returns:
- The 8 bit integer value read from
offset
-
getShort
public abstract short getShort(long offset) Reads a 16 bit integer value from the memory area.- Parameters:
offset
- The offset within the memory area to read the value.- Returns:
- The 16 bit integer value read from
offset
-
getInt
public abstract int getInt(long offset) Reads a 32 bit integer value from the memory area.- Parameters:
offset
- The offset within the memory area to read the value.- Returns:
- The 32 bit integer value read from
offset
-
getLong
public abstract long getLong(long offset) Reads a 64 bit integer value from the memory area.- Parameters:
offset
- The offset within the memory area to read the value.- Returns:
- The 64 bit integer value read from
offset
-
getNativeLong
public abstract long getNativeLong(long offset) Reads a native long integer value from the memory area.A native long is 32bits on either ILP32 or LLP64 architectures, and 64 bits on an LP64 architecture.
This means that it will always read a 32bit value on Windows, but on Unix systems such as MacOS or Linux, it will read a 32bit value on 32bit systems, and a 64bit value on 64bit systems.
- Parameters:
offset
- The offset within the memory area to read the value.- Returns:
- The native long value read from
offset
-
getFloat
public abstract float getFloat(long offset) Reads a float value from the memory area.- Parameters:
offset
- The offset within the memory area to read the value.- Returns:
- The float value read from
offset
-
getDouble
public abstract double getDouble(long offset) Reads a double value from the memory area.- Parameters:
offset
- The offset within the memory area to read the value.- Returns:
- The double value read from
offset
-
getAddress
public abstract long getAddress(long offset) Reads a pointer value at the specified offset within the memory area.- Parameters:
offset
- The offset within the memory area to read the value.- Returns:
- A
long
value that represents the address.
-
getMemoryIO
Reads a pointer value at the specified offset within the memory area, and wraps it in an abstract memory accessor.- Parameters:
offset
- The offset within the memory area to read the value.- Returns:
- A
DirectMemoryIO
accessor that can be used to access the memory pointed to by the address.
-
putByte
public abstract void putByte(long offset, byte value) Writes an 8 bit integer value to the memory area at the specified offset.- Parameters:
offset
- The offset within the memory area to write the value.value
- The 8 bit integer value to write to the memory location.
-
putShort
public abstract void putShort(long offset, short value) Writes a 16 bit integer value to the memory area at the specified offset.- Parameters:
offset
- The offset within the memory area to write the value.value
- The 16 bit integer value to write to the memory location.
-
putInt
public abstract void putInt(long offset, int value) Writes a 32 bit integer value to the memory area at the specified offset.- Parameters:
offset
- The offset within the memory area to write the value.value
- The 32 bit integer value to write to the memory location.
-
putLong
public abstract void putLong(long offset, long value) Writes a 64 bit integer value to the memory area at the specified offset.- Parameters:
offset
- The offset within the memory area to write the value.value
- The 64 bit integer value to write to the memory location.
-
putNativeLong
public abstract void putNativeLong(long offset, long value) Writes a native long integer value to the memory area at the specified offset.- Parameters:
offset
- The offset within the memory area to write the value.value
- The native long integer value to write to the memory location.
-
putFloat
public abstract void putFloat(long offset, float value) Writes a 32 bit float value to the memory area at the specified offset.- Parameters:
offset
- The offset within the memory area to write the value.value
- The 32 bit float value to write to the memory location.
-
putDouble
public abstract void putDouble(long offset, double value) Writes a 64 bit float value to the memory area at the specified offset.- Parameters:
offset
- The offset within the memory area to write the value.value
- The 64 bit float value to write to the memory location.
-
putMemoryIO
Writes a pointer value to the memory area at the specified offset.- Parameters:
offset
- The offset within the memory area to write the value.value
- The pointer value to write to the memory location.
-
putAddress
public abstract void putAddress(long offset, long value) Writes a pointer value to the memory area at the specified offset.- Parameters:
offset
- The offset within the memory area to write the value.value
- The pointer value to write to the memory location.
-
get
public abstract void get(long offset, byte[] dst, int off, int len) Reads an array of bytes from the memory area at the specified offset.- Parameters:
offset
- The offset within the memory area to read the bytes.dst
- The output byte array to place the data.off
- The offset within the byte array to start copying.len
- The length of data to read.
-
put
public abstract void put(long offset, byte[] src, int off, int len) Writes an array of bytes to the memory area at the specified offset.- Parameters:
offset
- The offset within the memory area to start writing the bytes.src
- The byte array to write to the memory area.off
- The offset within the byte array to start copying.len
- The length of data to write.
-
get
public abstract void get(long offset, short[] dst, int off, int len) Reads an array of shorts from the memory area at the specified offset.- Parameters:
offset
- The offset within the memory area to read the shorts.dst
- The output array to place the data in.off
- The offset within the array to start copying.len
- The number of shorts to read.
-
put
public abstract void put(long offset, short[] src, int off, int len) Writes an array of shorts to the memory area at the specified offset.- Parameters:
offset
- The offset within the memory area to start writing the shorts.src
- The array to write to the memory area.off
- The offset within the array to start copying.len
- The number of shorts to write.
-
get
public abstract void get(long offset, int[] dst, int off, int len) Reads an array of ints from the memory area at the specified offset.- Parameters:
offset
- The offset within the memory area to read the ints.dst
- The output array to place the data in.off
- The offset within the array to start copying.len
- The number of ints to read.
-
put
public abstract void put(long offset, int[] src, int off, int len) Writes an array of ints to the memory area at the specified offset.- Parameters:
offset
- The offset within the memory area to start writing the ints.src
- The array to write to the memory area.off
- The offset within the array to start copying.len
- The number of ints to write.
-
get
public abstract void get(long offset, long[] dst, int off, int len) Reads an array of longs from the memory area at the specified offset.- Parameters:
offset
- The offset within the memory area to read the longs.dst
- The output array to place the data in.off
- The offset within the array to start copying.len
- The number of longs to read.
-
put
public abstract void put(long offset, long[] src, int off, int len) Writes an array of longs to the memory area at the specified offset.- Parameters:
offset
- The offset within the memory area to start writing the longs.src
- The array to write to the memory area.off
- The offset within the array to start copying.len
- The number of longs to write.
-
get
public abstract void get(long offset, float[] dst, int off, int len) Reads an array of floats from the memory area at the specified offset.- Parameters:
offset
- The offset within the memory area to read the floats.dst
- The output array to place the data in.off
- The offset within the array to start copying.len
- The number of floats to read.
-
put
public abstract void put(long offset, float[] src, int off, int len) Writes an array of floats to the memory area at the specified offset.- Parameters:
offset
- The offset within the memory area to start writing the floats.src
- The array to write to the memory area.off
- The offset within the array to start copying.len
- The number of floats to write.
-
get
public abstract void get(long offset, double[] dst, int off, int len) Reads an array of doubles from the memory area at the specified offset.- Parameters:
offset
- The offset within the memory area to read the doubles.dst
- The output array to place the data in.off
- The offset within the array to start copying.len
- The number of doubles to read.
-
put
public abstract void put(long offset, double[] src, int off, int len) Writes an array of doubles to the memory area at the specified offset.- Parameters:
offset
- The offset within the memory area to start writing the doubles.src
- The array to write to the memory area.off
- The offset within the array to start copying.len
- The number of doubles to write.
-
indexOf
public abstract int indexOf(long offset, byte value) Gets the first index within the memory area of a particular 8 bit value.- Parameters:
offset
- The offset within the memory area to start searching.value
- The value to search for.- Returns:
- The index of the value, relative to offset.
-
indexOf
public abstract int indexOf(long offset, byte value, int maxlen) Gets the first index within the memory area of a particular 8 bit value.- Parameters:
offset
- The offset within the memory area to start searching.value
- The value to search for.- Returns:
- The index of the value, relative to offset.
-
setMemory
public abstract void setMemory(long offset, long size, byte value) Sets the contents of the memory area to the value.- Parameters:
offset
- The offset within the memory area to start writing.size
- The number of bytes to set to the value.value
- The value to set each byte to.
-
getZeroTerminatedByteArray
public abstract byte[] getZeroTerminatedByteArray(long offset) Reads a zero terminated byte array (e.g. an ascii or utf-8 string)- Parameters:
offset
- The offset within the memory area of the start of the string.- Returns:
- A byte array containing a copy of the data.
-
getZeroTerminatedByteArray
public abstract byte[] getZeroTerminatedByteArray(long offset, int maxlen) Reads a zero terminated byte array (e.g. an ascii or utf-8 string)- Parameters:
offset
- The offset within the memory area of the start of the string.maxlen
- The maximum length to search for the zero byte terminator.- Returns:
- A byte array containing a copy of the data.
-
putZeroTerminatedByteArray
public abstract void putZeroTerminatedByteArray(long offset, byte[] bytes, int off, int len) Writes a byte array to memory, and appends a zero terminator- Parameters:
offset
- The offset within the memory area of the start of the string.bytes
- The byte array to write to the memory.off
- The offset with the byte array to start copying.len
- The number of bytes of the byte array to write to the memory area. (not including zero byte)
-