@Properties(inherit=javacpp.class) public class Pointer extends java.lang.Object implements java.lang.AutoCloseable
void*, which can point to any
struct, class, or union. All Pointer classes get parsed
by Generator to produce proper wrapping JNI code, but this base class also
provides functionality to access native array elements as well as utility methods
and classes to let users benefit not only from from garbage collection, but also the
try-with-resources statement, since it implements the AutoCloseable interface.
It is also possible to use a PointerScope to keep track of a group of Pointer objects,
and have them deallocated in a transparent but deterministic manner.
For examples of subclasses, please refer to the following:
| Modifier and Type | Class and Description |
|---|---|
protected static class |
Pointer.CustomDeallocator
A
Pointer.Deallocator that calls, during garbage collection, a method with signature
static void deallocate() from the Pointer object passed to the constructor
and that accepts it as argument. |
protected static interface |
Pointer.Deallocator
The interface to implement to produce a Deallocator usable by Pointer.
|
protected static class |
Pointer.NativeDeallocator
A
Pointer.Deallocator that calls, during garbage collection, a native function. |
protected static interface |
Pointer.ReferenceCounter |
| Modifier and Type | Field and Description |
|---|---|
protected long |
address
The native address of this Pointer, which can be an array.
|
protected long |
capacity
The number of elements contained in this native array, or 0 if unknown.
|
protected long |
limit
The index of the first element that should not be accessed, or 0 if unknown.
|
protected long |
position
The index of the element of a native array that should be accessed.
|
| Constructor and Description |
|---|
Pointer()
Default constructor that does nothing.
|
Pointer(java.nio.Buffer b)
Copies the address, position, limit, and capacity of a direct NIO
Buffer. |
Pointer(Pointer p)
Copies the address, position, limit, and capacity of another Pointer.
|
| Modifier and Type | Method and Description |
|---|---|
long |
address()
Returns
address. |
java.nio.Buffer |
asBuffer()
Same as
asByteBuffer(), but can be overridden to return subclasses of Buffer. |
java.nio.ByteBuffer |
asByteBuffer()
Returns a ByteBuffer covering the memory space from this.position to this.limit.
|
static long |
availablePhysicalBytes()
Returns the amount of physical memory that is free according to the operating system, or 0 if unknown.
|
static Pointer |
calloc(long n,
long size) |
long |
capacity()
Returns
capacity. |
<P extends Pointer> |
capacity(long capacity)
Sets the capacity and returns this.
|
void |
close()
Calls
releaseReference(). |
void |
deallocate()
Calls
deallocate(true). |
void |
deallocate(boolean deallocate)
Explicitly manages native memory without waiting after the garbage collector.
|
static void |
deallocateReferences()
Clears, deallocates, and removes all garbage collected objects from the
referenceQueue. |
protected Pointer.Deallocator |
deallocator()
Returns
deallocator. |
protected <P extends Pointer> |
deallocator(Pointer.Deallocator deallocator)
Sets the deallocator and returns this.
|
boolean |
equals(java.lang.Object obj)
Checks for equality with argument.
|
<P extends Pointer> |
fill(int b)
Calls in effect
memset(address + position, b, length),
where length = sizeof() * (limit - position). |
static java.lang.String |
formatBytes(long bytes)
Truncates and formats the number of bytes to a human readable string ending with "T", "G", "M", or "K" (as multiples of 1024).
|
static void |
free(Pointer p) |
int |
hashCode()
Returns
(int)address. |
boolean |
isNull()
Returns
address == 0. |
static boolean |
isNull(Pointer p)
Returns
p == null || p.address == 0. |
long |
limit()
Returns
limit. |
<P extends Pointer> |
limit(long limit)
Sets the limit and returns this.
|
static Pointer |
malloc(long size) |
static long |
maxBytes()
Returns
maxBytes, the maximum amount of memory allowed to be tracked. |
static long |
maxPhysicalBytes()
Returns
maxPhysicalBytes, the maximum amount of physical memory that should be used. |
static Pointer |
memchr(Pointer p,
int ch,
long size) |
static int |
memcmp(Pointer p1,
Pointer p2,
long size) |
static Pointer |
memcpy(Pointer dst,
Pointer src,
long size) |
static Pointer |
memmove(Pointer dst,
Pointer src,
long size) |
static Pointer |
memset(Pointer dst,
int ch,
long size) |
int |
offsetof(java.lang.String member)
Returns
Loader.offsetof(getClass(), member) or -1 on error. |
static long |
parseBytes(java.lang.String string,
long relativeMultiple)
Returns the amount of bytes for a number possibly ending with "%", "t", "g", m", or "k" (as multiples of 1024).
|
static long |
physicalBytes()
Returns the amount of physical memory currently used by the whole process, or 0 if unknown.
|
long |
position()
Returns
position. |
<P extends Pointer> |
position(long position)
Sets the position and returns this.
|
<P extends Pointer> |
put(Pointer p)
Calls in effect
memcpy(this.address + this.position, p.address + p.position, length),
where length = sizeof(p) * (p.limit - p.position). |
static Pointer |
realloc(Pointer p,
long size) |
int |
referenceCount()
Returns
Pointer.ReferenceCounter.count() or -1 if no deallocator has been set. |
boolean |
releaseReference()
Calls
Pointer.ReferenceCounter.release(), decrementing the reference count by 1,
in turn deallocating this Pointer when the count drops to 0. |
<P extends Pointer> |
retainReference()
Calls
Pointer.ReferenceCounter.retain(), incrementing the reference count by 1. |
void |
setNull()
Sets
address to 0. |
int |
sizeof()
Returns 1 for Pointer or BytePointer else
Loader.sizeof(getClass()) or -1 on error. |
java.lang.String |
toString()
|
static long |
totalBytes()
Returns
DeallocatorReference#totalBytes, current amount of memory tracked by deallocators. |
static long |
totalPhysicalBytes()
Returns the amount of physical memory installed according to the operating system, or 0 if unknown.
|
protected static <P extends Pointer> |
withDeallocator(P p)
A utility method to register easily a
Pointer.CustomDeallocator with a Pointer. |
<P extends Pointer> |
zero()
Returns
fill(0). |
protected long address
protected long position
protected long limit
protected long capacity
public Pointer()
public Pointer(Pointer p)
This copy constructor basically acts as a reinterpret_cast, at least
on plain old data (POD) struct, so we need to be careful with it.
p - the other Pointer to referencepublic Pointer(java.nio.Buffer b)
Buffer.
Also keeps a reference to it to prevent its memory from getting deallocated.b - the Buffer object to referenceprotected static <P extends Pointer> P withDeallocator(P p)
Pointer.CustomDeallocator with a Pointer.p - the Pointer with which to register the deallocatorpublic static java.lang.String formatBytes(long bytes)
public static long parseBytes(java.lang.String string,
long relativeMultiple)
throws java.lang.NumberFormatException
string - to parserelativeMultiple - to use in the case of "%", which is divided by 100java.lang.NumberFormatExceptionpublic static void deallocateReferences()
referenceQueue.public static long maxBytes()
maxBytes, the maximum amount of memory allowed to be tracked.public static long totalBytes()
DeallocatorReference#totalBytes, current amount of memory tracked by deallocators.public static long maxPhysicalBytes()
maxPhysicalBytes, the maximum amount of physical memory that should be used.@Name(value="JavaCPP_physicalBytes") public static long physicalBytes()
@Name(value="JavaCPP_totalPhysicalBytes") public static long totalPhysicalBytes()
physicalBytes() to go over this value.@Name(value="JavaCPP_availablePhysicalBytes") public static long availablePhysicalBytes()
public static boolean isNull(Pointer p)
p == null || p.address == 0.public boolean isNull()
address == 0.public void setNull()
address to 0.public long address()
address.public long position()
position.public <P extends Pointer> P position(long position)
array.position(i)
statement sort of equivalent to the array[i] statement in C++.position - the new positionpublic long limit()
limit.public <P extends Pointer> P limit(long limit)
limit - the new limitpublic long capacity()
capacity.public <P extends Pointer> P capacity(long capacity)
capacity - the new capacityprotected Pointer.Deallocator deallocator()
deallocator.protected <P extends Pointer> P deallocator(Pointer.Deallocator deallocator)
null. That is, it deallocates previously allocated memory.
Should not be called more than once after allocation.deallocator - the new deallocatorpublic void close()
releaseReference().close in interface java.lang.AutoCloseablepublic void deallocate()
deallocate(true).public void deallocate(boolean deallocate)
deallocator(Deallocator).deallocate - if true, deallocates, else does not, but disables garbage collectionpublic <P extends Pointer> P retainReference()
Pointer.ReferenceCounter.retain(), incrementing the reference count by 1.
Has no effect if no deallocator was previously set with deallocator(Deallocator).public boolean releaseReference()
Pointer.ReferenceCounter.release(), decrementing the reference count by 1,
in turn deallocating this Pointer when the count drops to 0.
Has no effect if no deallocator was previously set with deallocator(Deallocator).public int referenceCount()
Pointer.ReferenceCounter.count() or -1 if no deallocator has been set.public int offsetof(java.lang.String member)
Loader.offsetof(getClass(), member) or -1 on error.public int sizeof()
Loader.sizeof(getClass()) or -1 on error.public java.nio.ByteBuffer asByteBuffer()
this.position(13).limit(42).asByteBuffer().ByteBuffer createdpublic java.nio.Buffer asBuffer()
asByteBuffer(), but can be overridden to return subclasses of Buffer.asByteBuffer()BytePointer.asBuffer(),
ShortPointer.asBuffer(),
IntPointer.asBuffer(),
LongPointer.asBuffer(),
FloatPointer.asBuffer(),
DoublePointer.asBuffer(),
CharPointer.asBuffer()public static Pointer malloc(long size)
public static Pointer calloc(long n, long size)
public static void free(Pointer p)
public <P extends Pointer> P put(Pointer p)
memcpy(this.address + this.position, p.address + p.position, length),
where length = sizeof(p) * (p.limit - p.position).
If limit == 0, it uses position + 1 instead. The way the methods were designed
allows constructs such as this.position(0).put(p.position(13).limit(42)).p - the Pointer from which to copy memorypublic <P extends Pointer> P fill(int b)
memset(address + position, b, length),
where length = sizeof() * (limit - position).
If limit == 0, it uses position + 1 instead. The way the methods were designed
allows constructs such as this.position(0).limit(13).fill(42);b - the byte value to fill the memory withpublic <P extends Pointer> P zero()
fill(0).public boolean equals(java.lang.Object obj)
(obj == null && this.address == 0) ||
(obj.address == this.address && obj.position == this.position),
and the classes are the same, unless one of them in Pointer itself.equals in class java.lang.Objectobj - the object to compare this Pointer topublic int hashCode()
(int)address.hashCode in class java.lang.Objectpublic java.lang.String toString()
toString in class java.lang.Object