Top Description Fields Constructors Methods
org.jruby.ext.ffi

public abstract Class MemoryIO

extends Object
Class Inheritance
Known Direct Subclasses
org.jruby.ext.ffi.SwappedMemoryIO, org.jruby.ext.ffi.jffi.BoundedNativeMemoryIO, org.jruby.ext.ffi.jffi.NativeMemoryIO, org.jruby.ext.ffi.jffi.NilPointerParameterStrategy.NullMemoryIO, org.jruby.ext.ffi.ArrayMemoryIO, org.jruby.ext.ffi.InvalidMemoryIO
Imports
java.nio.ByteOrder

Abstracted memory operations.

This abstracts read/write operations to either a native memory area, or a java ByteBuffer.

Field Summary

Modifier and TypeField and Description
protected final long
protected final boolean

Constructor Summary

AccessConstructor and Description
protected
MemoryIO(boolean direct, long address)

Method Summary

Modifier and TypeMethod and Description
public final long

Returns:

A long value containing the native memory address
address
()

Gets the native address of this memory region.

public abstract Object
public abstract int
public abstract int
public abstract ByteBuffer

Returns:

A ByteBuffer instance
asByteBuffer
()

Creates a view of this memory object as a java NIO byte buffer.

public abstract MemoryIO

Returns:

A MemoryIO instance.
dup
()

Duplicates this MemoryIO, including its contents.

public abstract void
get(long
The offset within the memory area to read the bytes.
offset
,
byte[]
The output byte array to place the data.
dst
,
int
The offset within the byte array to start copying.
off
,
int
The length of data to read.
len
)

Reads an array of bytes from the memory area at the specified offset.

public abstract void
get(long
The offset within the memory area to read the shorts.
offset
,
short[]
The output array to place the data in.
dst
,
int
The offset within the array to start copying.
off
,
int
The number of shorts to read.
len
)

Reads an array of shorts from the memory area at the specified offset.

public abstract void
get(long
The offset within the memory area to read the ints.
offset
,
int[]
The output array to place the data in.
dst
,
int
The offset within the array to start copying.
off
,
int
The number of ints to read.
len
)

Reads an array of ints from the memory area at the specified offset.

public abstract void
get(long
The offset within the memory area to read the longs.
offset
,
long[]
The output array to place the data in.
dst
,
int
The offset within the array to start copying.
off
,
int
The number of longs to read.
len
)

Reads an array of longs from the memory area at the specified offset.

public abstract void
get(long
The offset within the memory area to read the floats.
offset
,
float[]
The output array to place the data in.
dst
,
int
The offset within the array to start copying.
off
,
int
The number of floats to read.
len
)

Reads an array of floats from the memory area at the specified offset.

public abstract void
get(long
The offset within the memory area to read the doubles.
offset
,
double[]
The output array to place the data in.
dst
,
int
The offset within the array to start copying.
off
,
int
The number of doubles to read.
len
)

Reads an array of doubles from the memory area at the specified offset.

public abstract long

Returns:

A long value that represents the address.
getAddress
(long
The offset within the memory area to read the value.
offset
)

Reads a pointer value at the specified offset within the memory area.

public abstract byte

Returns:

The 8 bit integer value read from offset
getByte
(long
The offset within the memory area to read the value.
offset
)

Reads an 8 bit integer value from the memory area.

public abstract double

Returns:

The double value read from offset
getDouble
(long
The offset within the memory area to read the value.
offset
)

Reads a double value from the memory area.

public abstract float

Returns:

The float value read from offset
getFloat
(long
The offset within the memory area to read the value.
offset
)

Reads a float value from the memory area.

public abstract int

Returns:

The 32 bit integer value read from offset
getInt
(long
The offset within the memory area to read the value.
offset
)

Reads a 32 bit integer value from the memory area.

public abstract long

Returns:

The 64 bit integer value read from offset
getLong
(long
The offset within the memory area to read the value.
offset
)

Reads a 64 bit integer value from the memory area.

public abstract MemoryIO

Returns:

A DirectMemoryIO accessor that can be used to access the memory pointed to by the address.
getMemoryIO
(long
The offset within the memory area to read the value.
offset
)

Reads a pointer value at the specified offset within the memory area, and wraps it in an abstract memory accessor.

public abstract long

Returns:

The native long value read from offset
getNativeLong
(long
The offset within the memory area to read the value.
offset
)

Reads a native long integer value from the memory area.

public abstract short

Returns:

The 16 bit integer value read from offset
getShort
(long
The offset within the memory area to read the value.
offset
)

Reads a 16 bit integer value from the memory area.

public abstract byte[]

Returns:

A byte array containing a copy of the data.
getZeroTerminatedByteArray
(long
The offset within the memory area of the start of the string.
offset
)

Reads a zero terminated byte array (e.g. an ascii or utf-8 string)

public abstract byte[]

Returns:

A byte array containing a copy of the data.
getZeroTerminatedByteArray
(long
The offset within the memory area of the start of the string.
offset
,
int
The maximum length to search for the zero byte terminator.
maxlen
)

Reads a zero terminated byte array (e.g. an ascii or utf-8 string)

public abstract int

Returns:

The index of the value, relative to offset.
indexOf
(long
The offset within the memory area to start searching.
offset
,
byte
The value to search for.
value
)

Gets the first index within the memory area of a particular 8 bit value.

public abstract int

Returns:

The index of the value, relative to offset.
indexOf
(long
The offset within the memory area to start searching.
offset
,
byte
The value to search for.
value
,
int maxlen)

Gets the first index within the memory area of a particular 8 bit value.

public final boolean

Returns:

true if the memory area is a native pointer.
isDirect
()

Checks if the memory area is a native memory pointer.

public final boolean

Returns:

true if the memory area is invalid.
isNull
()

Checks if the memory area is NULL.

public abstract ByteOrder

Returns:

The current ByteOrder
order
()

Gets the ByteOrder this MemoryIO instance will read/write values to memory in.

public abstract void
put(long
The offset within the memory area to start writing the bytes.
offset
,
byte[]
The byte array to write to the memory area.
src
,
int
The offset within the byte array to start copying.
off
,
int
The length of data to write.
len
)

Writes an array of bytes to the memory area at the specified offset.

public abstract void
put(long
The offset within the memory area to start writing the shorts.
offset
,
short[]
The array to write to the memory area.
src
,
int
The offset within the array to start copying.
off
,
int
The number of shorts to write.
len
)

Writes an array of shorts to the memory area at the specified offset.

public abstract void
put(long
The offset within the memory area to start writing the ints.
offset
,
int[]
The array to write to the memory area.
src
,
int
The offset within the array to start copying.
off
,
int
The number of ints to write.
len
)

Writes an array of ints to the memory area at the specified offset.

public abstract void
put(long
The offset within the memory area to start writing the longs.
offset
,
long[]
The array to write to the memory area.
src
,
int
The offset within the array to start copying.
off
,
int
The number of longs to write.
len
)

Writes an array of longs to the memory area at the specified offset.

public abstract void
put(long
The offset within the memory area to start writing the floats.
offset
,
float[]
The array to write to the memory area.
src
,
int
The offset within the array to start copying.
off
,
int
The number of floats to write.
len
)

Writes an array of floats to the memory area at the specified offset.

public abstract void
put(long
The offset within the memory area to start writing the doubles.
offset
,
double[]
The array to write to the memory area.
src
,
int
The offset within the array to start copying.
off
,
int
The number of doubles to write.
len
)

Writes an array of doubles to the memory area at the specified offset.

public abstract void
putAddress(long
The offset within the memory area to write the value.
offset
,
long
The pointer value to write to the memory location.
value
)

Writes a pointer value to the memory area at the specified offset.

public abstract void
putByte(long
The offset within the memory area to write the value.
offset
,
byte
The 8 bit integer value to write to the memory location.
value
)

Writes an 8 bit integer value to the memory area at the specified offset.

public abstract void
putDouble(long
The offset within the memory area to write the value.
offset
,
double
The 64 bit float value to write to the memory location.
value
)

Writes a 64 bit float value to the memory area at the specified offset.

public abstract void
putFloat(long
The offset within the memory area to write the value.
offset
,
float
The 32 bit float value to write to the memory location.
value
)

Writes a 32 bit float value to the memory area at the specified offset.

public abstract void
putInt(long
The offset within the memory area to write the value.
offset
,
int
The 32 bit integer value to write to the memory location.
value
)

Writes a 32 bit integer value to the memory area at the specified offset.

public abstract void
putLong(long
The offset within the memory area to write the value.
offset
,
long
The 64 bit integer value to write to the memory location.
value
)

Writes a 64 bit integer value to the memory area at the specified offset.

public abstract void
putMemoryIO(long
The offset within the memory area to write the value.
offset
,
MemoryIO
The pointer value to write to the memory location.
value
)

Writes a pointer value to the memory area at the specified offset.

public abstract void
putNativeLong(long
The offset within the memory area to write the value.
offset
,
long
The native long integer value to write to the memory location.
value
)

Writes a native long integer value to the memory area at the specified offset.

public abstract void
putShort(long
The offset within the memory area to write the value.
offset
,
short
The 16 bit integer value to write to the memory location.
value
)

Writes a 16 bit integer value to the memory area at the specified offset.

public abstract void
putZeroTerminatedByteArray(long
The offset within the memory area of the start of the string.
offset
,
byte[]
The byte array to write to the memory.
bytes
,
int
The offset with the byte array to start copying.
off
,
int
The number of bytes of the byte array to write to the memory area. (not including zero byte)
len
)

Writes a byte array to memory, and appends a zero terminator

public abstract void
setMemory(long
The offset within the memory area to start writing.
offset
,
long
The number of bytes to set to the value.
size
,
byte
The value to set each byte to.
value
)

Sets the contents of the memory area to the value.

public abstract MemoryIO

Returns:

A MemoryIO instance.
slice
(long
The offset within the existing memory area to start the new MemoryIO at.
offset
)

Creates a new MemoryIO pointing to a subset of the memory area of this MemoryIO.

public abstract MemoryIO

Returns:

A MemoryIO instance.
slice
(long
The offset within the existing memory area to start the new MemoryIO at.
offset
,
long
The size of the new slice.
size
)

Creates a new MemoryIO pointing to a subset of the memory area of this MemoryIO.

Inherited from java.lang.Object:
cloneequalsfinalizegetClasshashCodenotifynotifyAlltoStringwaitwaitwait

Field Detail

addressback to summary
protected final long address
isDirectback to summary
protected final boolean isDirect

Constructor Detail

MemoryIOback to summary
protected MemoryIO(boolean direct, long address)

Method Detail

addressback to summary
public final long address()

Gets the native address of this memory region. May return NULL (0) if this is not a direct pointer.

Returns:long

A long value containing the native memory address

arrayback to summary
public abstract Object array()
arrayLengthback to summary
public abstract int arrayLength()
arrayOffsetback to summary
public abstract int arrayOffset()
asByteBufferback to summary
public abstract ByteBuffer asByteBuffer()

Creates a view of this memory object as a java NIO byte buffer.

Returns:ByteBuffer

A ByteBuffer instance

dupback to summary
public abstract MemoryIO dup()

Duplicates this MemoryIO, including its contents.

Returns:MemoryIO

A MemoryIO instance.

getback to summary
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:long

The offset within the memory area to read the bytes.

dst:byte[]

The output byte array to place the data.

off:int

The offset within the byte array to start copying.

len:int

The length of data to read.

getback to summary
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:long

The offset within the memory area to read the shorts.

dst:short[]

The output array to place the data in.

off:int

The offset within the array to start copying.

len:int

The number of shorts to read.

getback to summary
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:long

The offset within the memory area to read the ints.

dst:int[]

The output array to place the data in.

off:int

The offset within the array to start copying.

len:int

The number of ints to read.

getback to summary
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:long

The offset within the memory area to read the longs.

dst:long[]

The output array to place the data in.

off:int

The offset within the array to start copying.

len:int

The number of longs to read.

getback to summary
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:long

The offset within the memory area to read the floats.

dst:float[]

The output array to place the data in.

off:int

The offset within the array to start copying.

len:int

The number of floats to read.

getback to summary
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:long

The offset within the memory area to read the doubles.

dst:double[]

The output array to place the data in.

off:int

The offset within the array to start copying.

len:int

The number of doubles to read.

getAddressback to summary
public abstract long getAddress(long offset)

Reads a pointer value at the specified offset within the memory area.

Parameters
offset:long

The offset within the memory area to read the value.

Returns:long

A long value that represents the address.

getByteback to summary
public abstract byte getByte(long offset)

Reads an 8 bit integer value from the memory area.

Parameters
offset:long

The offset within the memory area to read the value.

Returns:byte

The 8 bit integer value read from offset

getDoubleback to summary
public abstract double getDouble(long offset)

Reads a double value from the memory area.

Parameters
offset:long

The offset within the memory area to read the value.

Returns:double

The double value read from offset

getFloatback to summary
public abstract float getFloat(long offset)

Reads a float value from the memory area.

Parameters
offset:long

The offset within the memory area to read the value.

Returns:float

The float value read from offset

getIntback to summary
public abstract int getInt(long offset)

Reads a 32 bit integer value from the memory area.

Parameters
offset:long

The offset within the memory area to read the value.

Returns:int

The 32 bit integer value read from offset

getLongback to summary
public abstract long getLong(long offset)

Reads a 64 bit integer value from the memory area.

Parameters
offset:long

The offset within the memory area to read the value.

Returns:long

The 64 bit integer value read from offset

getMemoryIOback to summary
public 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.

Parameters
offset:long

The offset within the memory area to read the value.

Returns:MemoryIO

A DirectMemoryIO accessor that can be used to access the memory pointed to by the address.

getNativeLongback to summary
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:long

The offset within the memory area to read the value.

Returns:long

The native long value read from offset

getShortback to summary
public abstract short getShort(long offset)

Reads a 16 bit integer value from the memory area.

Parameters
offset:long

The offset within the memory area to read the value.

Returns:short

The 16 bit integer value read from offset

getZeroTerminatedByteArrayback to summary
public abstract byte[] getZeroTerminatedByteArray(long offset)

Reads a zero terminated byte array (e.g. an ascii or utf-8 string)

Parameters
offset:long

The offset within the memory area of the start of the string.

Returns:byte[]

A byte array containing a copy of the data.

getZeroTerminatedByteArrayback to summary
public abstract byte[] getZeroTerminatedByteArray(long offset, int maxlen)

Reads a zero terminated byte array (e.g. an ascii or utf-8 string)

Parameters
offset:long

The offset within the memory area of the start of the string.

maxlen:int

The maximum length to search for the zero byte terminator.

Returns:byte[]

A byte array containing a copy of the data.

indexOfback to summary
public abstract int indexOf(long offset, byte value)

Gets the first index within the memory area of a particular 8 bit value.

Parameters
offset:long

The offset within the memory area to start searching.

value:byte

The value to search for.

Returns:int

The index of the value, relative to offset.

indexOfback to summary
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:long

The offset within the memory area to start searching.

value:byte

The value to search for.

Returns:int

The index of the value, relative to offset.

isDirectback to summary
public final boolean isDirect()

Checks if the memory area is a native memory pointer.

Returns:boolean

true if the memory area is a native pointer.

isNullback to summary
public final boolean isNull()

Checks if the memory area is NULL.

Returns:boolean

true if the memory area is invalid.

orderback to summary
public abstract ByteOrder order()

Gets the ByteOrder this MemoryIO instance will read/write values to memory in.

Returns:ByteOrder

The current ByteOrder

putback to summary
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:long

The offset within the memory area to start writing the bytes.

src:byte[]

The byte array to write to the memory area.

off:int

The offset within the byte array to start copying.

len:int

The length of data to write.

putback to summary
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:long

The offset within the memory area to start writing the shorts.

src:short[]

The array to write to the memory area.

off:int

The offset within the array to start copying.

len:int

The number of shorts to write.

putback to summary
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:long

The offset within the memory area to start writing the ints.

src:int[]

The array to write to the memory area.

off:int

The offset within the array to start copying.

len:int

The number of ints to write.

putback to summary
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:long

The offset within the memory area to start writing the longs.

src:long[]

The array to write to the memory area.

off:int

The offset within the array to start copying.

len:int

The number of longs to write.

putback to summary
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:long

The offset within the memory area to start writing the floats.

src:float[]

The array to write to the memory area.

off:int

The offset within the array to start copying.

len:int

The number of floats to write.

putback to summary
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:long

The offset within the memory area to start writing the doubles.

src:double[]

The array to write to the memory area.

off:int

The offset within the array to start copying.

len:int

The number of doubles to write.

putAddressback to summary
public abstract void putAddress(long offset, long value)

Writes a pointer value to the memory area at the specified offset.

Parameters
offset:long

The offset within the memory area to write the value.

value:long

The pointer value to write to the memory location.

putByteback to summary
public abstract void putByte(long offset, byte value)

Writes an 8 bit integer value to the memory area at the specified offset.

Parameters
offset:long

The offset within the memory area to write the value.

value:byte

The 8 bit integer value to write to the memory location.

putDoubleback to summary
public abstract void putDouble(long offset, double value)

Writes a 64 bit float value to the memory area at the specified offset.

Parameters
offset:long

The offset within the memory area to write the value.

value:double

The 64 bit float value to write to the memory location.

putFloatback to summary
public abstract void putFloat(long offset, float value)

Writes a 32 bit float value to the memory area at the specified offset.

Parameters
offset:long

The offset within the memory area to write the value.

value:float

The 32 bit float value to write to the memory location.

putIntback to summary
public abstract void putInt(long offset, int value)

Writes a 32 bit integer value to the memory area at the specified offset.

Parameters
offset:long

The offset within the memory area to write the value.

value:int

The 32 bit integer value to write to the memory location.

putLongback to summary
public abstract void putLong(long offset, long value)

Writes a 64 bit integer value to the memory area at the specified offset.

Parameters
offset:long

The offset within the memory area to write the value.

value:long

The 64 bit integer value to write to the memory location.

putMemoryIOback to summary
public abstract void putMemoryIO(long offset, MemoryIO value)

Writes a pointer value to the memory area at the specified offset.

Parameters
offset:long

The offset within the memory area to write the value.

value:MemoryIO

The pointer value to write to the memory location.

putNativeLongback to summary
public abstract void putNativeLong(long offset, long value)

Writes a native long integer value to the memory area at the specified offset.

Parameters
offset:long

The offset within the memory area to write the value.

value:long

The native long integer value to write to the memory location.

putShortback to summary
public abstract void putShort(long offset, short value)

Writes a 16 bit integer value to the memory area at the specified offset.

Parameters
offset:long

The offset within the memory area to write the value.

value:short

The 16 bit integer value to write to the memory location.

putZeroTerminatedByteArrayback to summary
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:long

The offset within the memory area of the start of the string.

bytes:byte[]

The byte array to write to the memory.

off:int

The offset with the byte array to start copying.

len:int

The number of bytes of the byte array to write to the memory area. (not including zero byte)

setMemoryback to summary
public abstract void setMemory(long offset, long size, byte value)

Sets the contents of the memory area to the value.

Parameters
offset:long

The offset within the memory area to start writing.

size:long

The number of bytes to set to the value.

value:byte

The value to set each byte to.

sliceback to summary
public abstract MemoryIO slice(long offset)

Creates a new MemoryIO pointing to a subset of the memory area of this MemoryIO.

Parameters
offset:long

The offset within the existing memory area to start the new MemoryIO at.

Returns:MemoryIO

A MemoryIO instance.

sliceback to summary
public abstract MemoryIO slice(long offset, long size)

Creates a new MemoryIO pointing to a subset of the memory area of this MemoryIO.

Parameters
offset:long

The offset within the existing memory area to start the new MemoryIO at.

size:long

The size of the new slice.

Returns:MemoryIO

A MemoryIO instance.