- Description
- Constructor Summary
- Method Summary
- Constructor Details
- Method Details
- size()
- read()
- write(byte)
- read(long)
- write(long, byte)
- write(byte[])
- writeV(byte, byte...)
- writeString(String)
- readStringSafe()
- readString()
- reinterpret(long)
- offset(long)
- slice(long, long)
- slice(long)
- iterator()
- checked(MemorySegment)
- checked(ByteBuffer)
- from(IPointer)
- allocate(Arena)
- allocate(Arena, long)
- allocate(Arena, byte[])
- allocate(Arena, Collection)
- allocateV(Arena, byte, byte...)
- allocate(Arena, ByteBuffer)
- allocateAligned(Arena, long, long)
- allocateString(Arena, String)
- toString()
- hashCode()
- equals(Object)
- segment()
Record Class BytePtr
Represents a pointer to byte(s) in native memory.
The property segment()
should always be not-null
(segment != NULL && !segment.equals(MemorySegment.NULL)
). To represent null pointer,
you may use a Java null
instead. See the documentation of IPointer.segment()
for more details.
The constructor of this class is marked as UnsafeConstructor
, because it does not
perform any runtime check. The constructor can be useful for automatic code generators. For
normal users, checked(MemorySegment)
is a good safe alternative.
-
Constructor Summary
ConstructorsConstructorDescriptionBytePtr
(@NotNull MemorySegment segment) Creates an instance of aBytePtr
record class. -
Method Summary
Modifier and TypeMethodDescriptionstatic @NotNull BytePtr
static @NotNull BytePtr
static @NotNull BytePtr
static @NotNull BytePtr
allocate
(@NotNull Arena arena, @NotNull ByteBuffer buffer) static @NotNull BytePtr
allocate
(@NotNull Arena arena, Collection<Byte> bytes) static @NotNull BytePtr
allocateAligned
(@NotNull Arena arena, long size, long alignment) static @NotNull BytePtr
allocateString
(@NotNull Arena arena, @NotNull String s) static @NotNull BytePtr
static @Nullable BytePtr
checked
(@NotNull MemorySegment segment) Create a newBytePtr
usingsegment
as backing storage, with argument validation.static @NotNull BytePtr
checked
(@NotNull ByteBuffer buffer) Create a newBytePtr
using the same backing storage asbuffer
, with argument validation.final boolean
Indicates whether some other object is "equal to" this one.static @NotNull BytePtr
final int
hashCode()
Returns a hash code value for this object.iterator()
@NotNull BytePtr
offset
(long offset) byte
read()
byte
read
(long index) @NotNull String
Assumes theBytePtr
is a null-terminated string, reads the string from the beginning of the underlying memory segment, until the first NUL byte is encountered.@NotNull String
Assume theBytePtr
is a null-terminated string, reads the string from the beginning of the underlying memory segment, until the first NUL byte is encountered.@NotNull BytePtr
reinterpret
(long newSize) @NotNull MemorySegment
segment()
Returns the value of thesegment
record component.long
size()
@NotNull BytePtr
slice
(long end) @NotNull BytePtr
slice
(long start, long end) Note that this function uses theList.subList(int, int)
semantics (left inclusive, right exclusive interval), notMemorySegment.asSlice(long, long)
semantics (offset + newSize).final String
toString()
Returns a string representation of this record class.void
write
(byte value) void
write
(byte @NotNull [] bytes) void
write
(long index, byte value) void
writeString
(@NotNull String s) void
writeV
(byte value0, byte @NotNull ... values) Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface java.lang.Iterable
forEach, spliterator
-
Constructor Details
-
Method Details
-
size
public long size() -
read
public byte read() -
write
public void write(byte value) -
read
public byte read(long index) -
write
public void write(long index, byte value) -
write
public void write(byte @NotNull [] bytes) -
writeV
public void writeV(byte value0, byte @NotNull ... values) -
writeString
-
readStringSafe
Assume the
BytePtr
is a null-terminated string, reads the string from the beginning of the underlying memory segment, until the first NUL byte is encountered.This function requires the size of the underlying memory segment to be set correctly. If the size is not known in advance and correctly set (for example, the
BytePtr
or the underlyingMemorySegment
is returned from some C API), you may usereadString()
(note that it isUnsafe
) instead. -
readString
Assumes the
BytePtr
is a null-terminated string, reads the string from the beginning of the underlying memory segment, until the first NUL byte is encountered.This function is
Unsafe
because it does not check the size of the underlying memory segment. This function is suitable for the cases that the size of the underlying memory segment is not known in advance and correctly set (for example, theBytePtr
or the underlyingMemorySegment
is returned from some C API). If the size is correctly set, you may usereadStringSafe()
instead. -
reinterpret
Assume the
BytePtr
is capable of holding at leastnewSize
bytes, create a new viewBytePtr
that uses the same backing storage as thisBytePtr
, but with the new size. Since there is actually no way to really check whether the new size is valid, while buffer overflow is undefined behavior, this method is marked asUnsafe
.This method could be useful when handling data returned from some C API, where the size of data is not known in advance.
If the size of the underlying segment is actually known in advance and correctly set, and you want to create a shrunk view, you may use
slice(long)
(with validation) instead. -
offset
-
slice
Note that this function uses theList.subList(int, int)
semantics (left inclusive, right exclusive interval), notMemorySegment.asSlice(long, long)
semantics (offset + newSize). Be careful with the difference. -
slice
-
iterator
-
checked
Create a new
BytePtr
usingsegment
as backing storage, with argument validation.If
segment
is not big enough to hold at least one byte, that segment is simply considered "empty". See the documentation ofIPointer.segment()
for more details.- Parameters:
segment
- theMemorySegment
to use as the backing storage- Returns:
null
ifsegment
isMemorySegment.NULL
, otherwise a newBytePtr
that usessegment
as backing storage- Throws:
IllegalArgumentException
- ifsegment
is not native
-
checked
Create a new
BytePtr
using the same backing storage asbuffer
, with argument validation.The main difference between this static method and the
allocate(Arena, ByteBuffer)
method is that this method does not copy the contents ofbuffer
into a newly allocatedMemorySegment
. Instead, the newly createdBytePtr
will use the same backing storage asbuffer
. Thus, modifications from one side will be visible on the other side.Be careful with
java.nio
buffer types'Buffer.position()
property: only the "remaining" (fromBuffer.position()
toBuffer.limit()
) part ofbuffer
will be referred. If you have ever read frombuffer
, and you want all the contents ofbuffer
to be referred, you may want to callBuffer.rewind()
.- Parameters:
buffer
- theByteBuffer
to use as the backing storage- Returns:
- a new
BytePtr
that usesbuffer
as its backing storage - Throws:
IllegalArgumentException
- ifbuffer
is not direct
-
from
-
allocate
-
allocate
-
allocate
-
allocate
@NotNull public static @NotNull BytePtr allocate(@NotNull @NotNull Arena arena, Collection<Byte> bytes) -
allocateV
-
allocate
@NotNull public static @NotNull BytePtr allocate(@NotNull @NotNull Arena arena, @NotNull @NotNull ByteBuffer buffer) Allocate a new
BytePtr
inarena
and copy the contents ofbuffer
into the newly allocatedBytePtr
.Be careful with
java.nio
buffer types'Buffer.position()
property: only the "remaining" (fromBuffer.position()
toBuffer.limit()
) part ofbuffer
will be copied. If you have ever read frombuffer
, and you want all the contents ofbuffer
to be copied, you may want to callBuffer.rewind()
.- Parameters:
arena
- theArena
to allocate the newBytePtr
inbuffer
- theByteBuffer
to copy the contents from- Returns:
- a new
BytePtr
that contains the contents ofbuffer
-
allocateAligned
-
allocateString
-
toString
-
hashCode
-
equals
Indicates whether some other object is "equal to" this one. The objects are equal if the other object is of the same class and if all the record components are equal. All components in this record class are compared withObjects::equals(Object,Object)
. -
segment
Returns the value of thesegment
record component.
-