/** Returns {@code new BooleanBufferIndexer(buffer)} */ public static BooleanIndexer create(ByteBuffer buffer) { return new BooleanBufferIndexer(buffer); } /** Returns {@code create(pointer, { pointer.limit() - pointer.position() }, { 1 }, true)} */
/** Returns {@code new BooleanBufferIndexer(buffer, sizes, strides)} */ public static BooleanIndexer create(ByteBuffer buffer, long[] sizes, long[] strides) { return new BooleanBufferIndexer(buffer, sizes, strides); } /** Returns {@code create(pointer, sizes, strides, true)} */
/** * Creates a boolean 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 boolean indexer backed by the raw memory interface, a buffer, or an array */ public static BooleanIndexer create(final BooleanPointer pointer, long[] sizes, long[] strides, boolean direct) { if (direct) { return Raw.getInstance() != null ? new BooleanRawIndexer(pointer, sizes, strides) : new BooleanBufferIndexer(pointer.asByteBuffer(), sizes, strides); } else { final long position = pointer.position(); boolean[] array = new boolean[(int)Math.min(pointer.limit() - position, Integer.MAX_VALUE)]; pointer.get(array); return new BooleanArrayIndexer(array, sizes, strides) { @Override public void release() { pointer.position(position).put(array); super.release(); } }; } }