mirror of https://github.com/TheOfficialFloW/bd-jb
48 lines
1.1 KiB
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;
|
|
}
|
|
}
|