46 lines
989 B
Java
46 lines
989 B
Java
/*
|
|
* Copyright (C) 2018 BARBOTIN Nicolas
|
|
*/
|
|
|
|
package net.montoyo.wd.utilities;
|
|
|
|
public final class NibbleArray {
|
|
private final byte[] data;
|
|
|
|
public NibbleArray(int count) {
|
|
if ((count & 1) != 0)
|
|
count++;
|
|
|
|
data = new byte[count >> 1];
|
|
}
|
|
|
|
public NibbleArray(byte[] d) {
|
|
data = d;
|
|
}
|
|
|
|
public int get(int idx) {
|
|
if ((idx & 1) == 0)
|
|
return (data[idx >> 1] >> 4) & 0x0F; //MSB
|
|
else
|
|
return data[idx >> 1] & 0x0F; //LSB
|
|
}
|
|
|
|
public void set(int idx, int val) {
|
|
val &= 0x0F;
|
|
|
|
if ((idx & 1) == 0) {
|
|
idx >>= 1;
|
|
data[idx] = (byte) ((data[idx] & 0x0F) | (val << 4)); //MSB
|
|
} else {
|
|
idx >>= 1;
|
|
data[idx] = (byte) ((data[idx] & 0xF0) | val); //LSB
|
|
}
|
|
}
|
|
|
|
public byte[] copyBytes() {
|
|
byte[] ret = new byte[data.length];
|
|
System.arraycopy(data, 0, ret, 0, data.length);
|
|
return ret;
|
|
}
|
|
}
|