Skip to content

Commit

Permalink
bytedeco#391 Apply changes to FloatIndexer classes
Browse files Browse the repository at this point in the history
  • Loading branch information
matteodg committed Apr 19, 2020
1 parent eab3409 commit 7406ee2
Show file tree
Hide file tree
Showing 4 changed files with 90 additions and 29 deletions.
22 changes: 16 additions & 6 deletions src/main/java/org/bytedeco/javacpp/indexer/FloatArrayIndexer.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,11 @@

package org.bytedeco.javacpp.indexer;

import org.bytedeco.javacpp.indexer.index.Index;

import static org.bytedeco.javacpp.indexer.index.CustomStridesIndex.customStrides;
import static org.bytedeco.javacpp.indexer.index.DefaultIndex.defaultIndex;

/**
* An indexer for a {@code float[]} array.
*
Expand All @@ -31,19 +36,24 @@ public class FloatArrayIndexer extends FloatIndexer {
/** The backing array. */
protected float[] array;

/** Calls {@code FloatArrayIndexer(array, { array.length }, { 1 })}. */
/** Calls {@code FloatArrayIndexer(array, { array.length })}. */
public FloatArrayIndexer(float[] array) {
this(array, new long[] { array.length }, ONE_STRIDE);
this(array, new long[] { array.length });
}

/** Calls {@code FloatArrayIndexer(array, sizes, strides(sizes))}. */
/** Calls {@code FloatArrayIndexer(array, sizes, defaultIndex(sizes))}. */
public FloatArrayIndexer(float[] array, long... sizes) {
this(array, sizes, strides(sizes));
this(array, sizes, defaultIndex(sizes));
}

/** Constructor to set the {@link #array}, {@link #sizes} and {@link #strides}. */
/** Constructor to set the {@link #array}, {@link #sizes} and {@code strides}. */
public FloatArrayIndexer(float[] array, long[] sizes, long[] strides) {
super(sizes, strides);
this(array, sizes, customStrides(strides));
}

/** Constructor to set the {@link #array}, {@link #sizes} and {@link #index}. */
public FloatArrayIndexer(float[] array, long[] sizes, Index index) {
super(sizes, index);
this.array = array;
}

Expand Down
22 changes: 16 additions & 6 deletions src/main/java/org/bytedeco/javacpp/indexer/FloatBufferIndexer.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,14 @@

package org.bytedeco.javacpp.indexer;

import org.bytedeco.javacpp.indexer.index.Index;

import java.nio.Buffer;
import java.nio.FloatBuffer;

import static org.bytedeco.javacpp.indexer.index.CustomStridesIndex.customStrides;
import static org.bytedeco.javacpp.indexer.index.DefaultIndex.defaultIndex;

/**
* An indexer for a {@link FloatBuffer}.
*
Expand All @@ -34,19 +39,24 @@ public class FloatBufferIndexer extends FloatIndexer {
/** The backing buffer. */
protected FloatBuffer buffer;

/** Calls {@code FloatBufferIndexer(buffer, { buffer.limit() }, { 1 })}. */
/** Calls {@code FloatBufferIndexer(buffer, { buffer.limit() })}. */
public FloatBufferIndexer(FloatBuffer buffer) {
this(buffer, new long[] { buffer.limit() }, ONE_STRIDE);
this(buffer, new long[] { buffer.limit() });
}

/** Calls {@code FloatBufferIndexer(buffer, sizes, strides(sizes))}. */
/** Calls {@code FloatBufferIndexer(buffer, sizes, defaultIndex(sizes))}. */
public FloatBufferIndexer(FloatBuffer buffer, long... sizes) {
this(buffer, sizes, strides(sizes));
this(buffer, sizes, defaultIndex(sizes));
}

/** Constructor to set the {@link #buffer}, {@link #sizes} and {@link #strides}. */
/** Constructor to set the {@link #buffer}, {@link #sizes} and {@code strides}. */
public FloatBufferIndexer(FloatBuffer buffer, long[] sizes, long[] strides) {
super(sizes, strides);
this(buffer, sizes, customStrides(strides));
}

/** Constructor to set the {@link #buffer}, {@link #sizes} and {@link #index}. */
public FloatBufferIndexer(FloatBuffer buffer, long[] sizes, Index index) {
super(sizes, index);
this.buffer = buffer;
}

Expand Down
53 changes: 42 additions & 11 deletions src/main/java/org/bytedeco/javacpp/indexer/FloatIndexer.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@

import java.nio.FloatBuffer;
import org.bytedeco.javacpp.FloatPointer;
import org.bytedeco.javacpp.ShortPointer;
import org.bytedeco.javacpp.indexer.index.Index;

import static org.bytedeco.javacpp.indexer.index.CustomStridesIndex.customStrides;

/**
* Abstract indexer for the {@code float} primitive type.
Expand All @@ -34,6 +38,15 @@ public abstract class FloatIndexer extends Indexer {
/** The number of bytes used to represent a float. */
public static final int VALUE_BYTES = 4;

protected FloatIndexer(long[] sizes) {
super(sizes);
}

protected FloatIndexer(long[] sizes, Index index) {
super(sizes, index);
}

@Deprecated
protected FloatIndexer(long[] sizes, long[] strides) {
super(sizes, strides);
}
Expand All @@ -46,9 +59,9 @@ public static FloatIndexer create(float[] array) {
public static FloatIndexer create(FloatBuffer buffer) {
return new FloatBufferIndexer(buffer);
}
/** Returns {@code create(pointer, { pointer.limit() - pointer.position() }, { 1 }, true)} */
/** Returns {@code new FloatRawIndexer(pointer} */
public static FloatIndexer create(FloatPointer pointer) {
return create(pointer, new long[] { pointer.limit() - pointer.position() }, ONE_STRIDE);
return new FloatRawIndexer(pointer);
}

/** Returns {@code new FloatArrayIndexer(array, sizes)} */
Expand All @@ -59,39 +72,57 @@ public static FloatIndexer create(float[] array, long... sizes) {
public static FloatIndexer create(FloatBuffer buffer, long... sizes) {
return new FloatBufferIndexer(buffer, sizes);
}
/** Returns {@code create(pointer, sizes, strides(sizes))} */
/** Returns {@code new FloatRawIndexer(pointer, sizes)} */
public static FloatIndexer create(FloatPointer pointer, long... sizes) {
return create(pointer, sizes, strides(sizes));
return new FloatRawIndexer(pointer, sizes);
}

/** Returns {@code new FloatArrayIndexer(array, sizes)} */
public static FloatIndexer create(float[] array, long[] sizes, Index index) {
return new FloatArrayIndexer(array, sizes, index);
}
/** Returns {@code new FloatBufferIndexer(buffer, sizes)} */
public static FloatIndexer create(FloatBuffer buffer, long[] sizes, Index index) {
return new FloatBufferIndexer(buffer, sizes, index);
}
/** Returns {@code new FloatRawIndexer(pointer, sizes)} */
public static FloatIndexer create(FloatPointer pointer, long[] sizes, Index index) {
return new FloatRawIndexer(pointer, sizes, index);
}

/** Returns {@code new FloatArrayIndexer(array, sizes, strides)} */
public static FloatIndexer create(float[] array, long[] sizes, long[] strides) {
@Deprecated public static FloatIndexer create(float[] array, long[] sizes, long[] strides) {
return new FloatArrayIndexer(array, sizes, strides);
}
/** Returns {@code new FloatBufferIndexer(buffer, sizes, strides)} */
public static FloatIndexer create(FloatBuffer buffer, long[] sizes, long[] strides) {
@Deprecated public static FloatIndexer create(FloatBuffer buffer, long[] sizes, long[] strides) {
return new FloatBufferIndexer(buffer, sizes, strides);
}
/** Returns {@code create(pointer, sizes, strides, true)} */
public static FloatIndexer create(FloatPointer pointer, long[] sizes, long[] strides) {
@Deprecated public static FloatIndexer create(FloatPointer pointer, long[] sizes, long[] strides) {
return create(pointer, sizes, strides, true);
}
/** Returns {@code create(pointer, sizes, new CustomStridesIndex(strides), direct)} */
@Deprecated public static FloatIndexer create(final FloatPointer pointer, long[] sizes, long[] strides, boolean direct) {
return create(pointer, sizes, customStrides(strides), direct);
}

/**
* Creates a float indexer to access efficiently the data of a pointer.
*
* @param pointer data to access via a buffer or to copy to an array
* @param direct {@code true} to use a direct buffer, see {@link Indexer} for details
* @return the new float indexer backed by the raw memory interface, a buffer, or an array
*/
public static FloatIndexer create(final FloatPointer pointer, long[] sizes, long[] strides, boolean direct) {
public static FloatIndexer create(final FloatPointer pointer, long[] sizes, Index index, boolean direct) {
if (direct) {
return Raw.getInstance() != null ? new FloatRawIndexer(pointer, sizes, strides)
: new FloatBufferIndexer(pointer.asBuffer(), sizes, strides);
return Raw.getInstance() != null ? new FloatRawIndexer(pointer, sizes, index)
: new FloatBufferIndexer(pointer.asBuffer(), sizes, index);
} else {
final long position = pointer.position();
float[] array = new float[(int)Math.min(pointer.limit() - position, Integer.MAX_VALUE)];
pointer.get(array);
return new FloatArrayIndexer(array, sizes, strides) {
return new FloatArrayIndexer(array, sizes, index) {
@Override public void release() {
pointer.position(position).put(array);
super.release();
Expand Down
22 changes: 16 additions & 6 deletions src/main/java/org/bytedeco/javacpp/indexer/FloatRawIndexer.java
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,10 @@

import org.bytedeco.javacpp.FloatPointer;
import org.bytedeco.javacpp.Pointer;
import org.bytedeco.javacpp.indexer.index.Index;

import static org.bytedeco.javacpp.indexer.index.CustomStridesIndex.customStrides;
import static org.bytedeco.javacpp.indexer.index.DefaultIndex.defaultIndex;

/**
* An indexer for a {@link FloatPointer} using the {@link Raw} instance.
Expand All @@ -38,19 +42,25 @@ public class FloatRawIndexer extends FloatIndexer {
/** Base address and number of elements accessible. */
final long base, size;

/** Calls {@code FloatRawIndexer(pointer, { pointer.limit() - pointer.position() }, { 1 })}. */
/** Calls {@code FloatRawIndexer(pointer, { pointer.limit() - pointer.position() })}. */
public FloatRawIndexer(FloatPointer pointer) {
this(pointer, new long[] { pointer.limit() - pointer.position() }, ONE_STRIDE);
this(pointer, new long[] { pointer.limit() - pointer.position() });
}

/** Calls {@code FloatRawIndexer(pointer, sizes, strides(sizes))}. */
/** Calls {@code FloatRawIndexer(pointer, sizes, defaultIndex(sizes))}. */
public FloatRawIndexer(FloatPointer pointer, long... sizes) {
this(pointer, sizes, strides(sizes));
this(pointer, sizes, defaultIndex(sizes));
}

/** Constructor to set the {@link #pointer}, {@link #sizes} and {@link #strides}. */
/** Constructor to set the {@link #pointer}, {@link #sizes} and {@code strides}. */
@Deprecated
public FloatRawIndexer(FloatPointer pointer, long[] sizes, long[] strides) {
super(sizes, strides);
this(pointer, sizes, customStrides(strides));
}

/** Constructor to set the {@link #pointer}, {@link #sizes} and {@link #index}. */
public FloatRawIndexer(FloatPointer pointer, long[] sizes, Index index) {
super(sizes, index);
this.pointer = pointer;
base = pointer.address() + pointer.position() * VALUE_BYTES;
size = pointer.limit() - pointer.position();
Expand Down

0 comments on commit 7406ee2

Please sign in to comment.