bd-jb/src/com/bdjb/api/AbstractInt.java

48 lines
1.1 KiB
Java

/*
* Copyright (C) 2021 Andy Nguyen
*
* This software may be modified and distributed under the terms
* of the MIT license. See the LICENSE file for details.
*/
package com.bdjb.api;
abstract class AbstractInt extends Buffer {
private final int[] dimensions;
private final int elementSize;
protected AbstractInt(int[] dimensions, int elementSize) {
super(size(dimensions, elementSize));
this.dimensions = dimensions;
this.elementSize = elementSize;
}
protected AbstractInt(int elementSize) {
this(new int[] {1}, elementSize);
}
static int size(int[] dimensions, int elementSize) {
assert (dimensions.length > 0);
int size = 1;
for (int i = 0; i < dimensions.length; i++) {
size *= dimensions[i];
}
size *= elementSize;
return size;
}
public int offset(int[] indices) {
assert (indices.length == dimensions.length);
int offset = 0;
int stride = 1;
for (int i = indices.length - 1; i >= 0; i--) {
offset += stride * indices[i];
stride *= dimensions[i];
}
offset *= elementSize;
checkOffset(offset, elementSize);
return offset;
}
}