blob: 0bd579418e1f6a3f805c92b5c63ccc7803ad34b7 [file] [log] [blame] [edit]
/*
* libbrlapi - A library providing access to braille terminals for applications.
*
* Copyright (C) 2006-2023 by
* Samuel Thibault <Samuel.Thibault@ens-lyon.org>
* Sébastien Hinderer <Sebastien.Hinderer@ens-lyon.org>
*
* libbrlapi comes with ABSOLUTELY NO WARRANTY.
*
* This is free software, placed under the terms of the
* GNU Lesser General Public License, as published by the Free Software
* Foundation; either version 2.1 of the License, or (at your option) any
* later version. Please see the file LICENSE-LGPL for details.
*
* Web Page: http://brltty.app/
*
* This software is maintained by Dave Mielke <dave@mielke.cc>.
*/
package org.a11y.brlapi;
public class RowCells extends ParameterComponent {
private final static int BYTE_SIZE = Byte.SIZE;
private final byte[] cellArray;
private final BitMask cellMask;
private final int copyBytes (byte[] to, byte[] from, int index) {
int count = to.length;
System.arraycopy(from, index, to, 0, count);
return index + count;
}
public RowCells (byte[] bytes) {
if (bytes.length == 0) {
cellArray = null;
cellMask = new BitMask(new byte[0]);
} else {
cellArray = new byte[0X100];
int index = copyBytes(cellArray, bytes, 0);
{
byte[] mask = new byte[cellArray.length / BYTE_SIZE];
index = copyBytes(mask, bytes, index);
cellMask = new BitMask(mask);
}
}
}
public int getSize () {
return cellArray.length;
}
public boolean isDefined (int index) {
return cellMask.isSet(index);
}
public byte getCell (int index) {
return isDefined(index)? cellArray[index]: 0;
}
@Override
public String toString () {
StringBuilder sb = new StringBuilder();
sb.append('{');
boolean first = true;
for (int index : cellMask.getBitNumbers()) {
if (first) {
first = false;
} else {
sb.append(", ");
}
sb.append(
String.format(
"%02X:%s", index, asDots(cellArray[index])
)
);
}
sb.append('}');
return sb.toString();
}
}