diff --git a/build.gradle.kts b/build.gradle.kts index 200c187..d92d1a8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -7,6 +7,7 @@ plugins { `maven-publish` } dependencies { + api("com.github.demidko:bits:2021.11.12") api("com.github.demidko:aot-bytecode:2021.10.29") testImplementation("org.junit.jupiter:junit-jupiter:5.8.1") testImplementation("org.hamcrest:hamcrest:2.2") diff --git a/src/main/java/com/github/demidko/aot/BitReader.java b/src/main/java/com/github/demidko/aot/BitReader.java deleted file mode 100644 index 5e906ec..0000000 --- a/src/main/java/com/github/demidko/aot/BitReader.java +++ /dev/null @@ -1,101 +0,0 @@ -package com.github.demidko.aot; - -import static java.util.BitSet.valueOf; - -import java.util.BitSet; - -/** - * Класс предназначен для побитового чтения из примитивов - */ -class BitReader { - - private final BitSet bs; - private int pos = -1; - - public BitReader(long... n) { - bs = valueOf(n); - } - - public BitReader(byte... b) { - bs = valueOf(b); - } - - public BitReader(BitReader other) { - bs = (BitSet) other.bs.clone(); - pos = other.pos; - } - - /** - * @return метод читает следующий по порядку бит - */ - public boolean readBit() { - return bs.get(++pos); - } - - /** - * Метод читает следующие N бит по порядку - * - * @param size количество бит - * @return биты сохраненные в длинное целое число - */ - public long readLong(int size) { - BitWriter w = new BitWriter(); - for (int i = 0; i < size; ++i) { - w.write(readBit()); - } - return w.toLong(); - } - - /** - * @return прочитать следующее длинное целое - */ - public long readLong() { - return readLong(64); - } - - /** - * Метод читает следующие N бит по порядку - * - * @param size количество бит - * @return биты сохраненные в целое число - */ - public int readInt(int size) { - return (int) readLong(size); - } - - /** - * @return прочитать следующее целое - */ - public int readInt() { - return readInt(32); - } - - - /** - * Метод читает следующие N бит по порядку - * - * @param size количество бит - * @return биты сохраненные в короткое целое число - */ - public short readShort(int size) { - return (short) readLong(size); - } - - public short readShort() { - return readShort(16); - } - - /** - * Метод читает следующие N бит по порядку - * - * @param size количество бит - * @return биты сохраненные в байт - */ - public byte readByte(int size) { - return (byte) readLong(size); - } - - public byte readByte() { - return readByte(8); - } -} diff --git a/src/main/java/com/github/demidko/aot/BitWriter.java b/src/main/java/com/github/demidko/aot/BitWriter.java deleted file mode 100644 index 78f1972..0000000 --- a/src/main/java/com/github/demidko/aot/BitWriter.java +++ /dev/null @@ -1,88 +0,0 @@ -package com.github.demidko.aot; - -import static java.util.BitSet.valueOf; - -import java.util.BitSet; - -/** - * Класс предназначен для побитовой записи в примитивы - */ -class BitWriter { - - private final BitSet bs; - private int pos = -1; - - public BitWriter(byte... b) { - bs = valueOf(b); - } - - public BitWriter(long... l) { - bs = valueOf(l); - } - - public BitWriter() { - this(new byte[8]); - } - - public BitWriter(BitWriter other) { - bs = (BitSet) other.bs.clone(); - pos = other.pos; - } - - /** - * Метод записывает следующий по порядку бит - */ - public void write(boolean bit) { - bs.set(++pos, bit); - } - - /** - * Метод сохраняет результат записи в long - * - * @return результат записи - */ - public long toLong() { - return bs.toLongArray().length == 0 ? 0 : bs.toLongArray()[0]; - } - - public int toInt() { - return (int) toLong(); - } - - public short toShort() { - return (short) toLong(); - } - - public byte toByte() { - return (byte) toLong(); - } - - /** - * Метод записывает по порядку заданное количество бит - * - * @param bits набор бит - * @param len количество бит из набора - */ - public void write(long bits, int len) { - BitReader r = new BitReader(bits); - for (int i = 0; i < len; ++i) { - write(r.readBit()); - } - } - - public void writeLong(long l) { - write(l, 64); - } - - public void writeInt(int i) { - write(i, 32); - } - - public void writeShort(short s) { - write(s, 16); - } - - public void writeByte(byte b) { - write(b, 8); - } -} diff --git a/src/main/java/com/github/demidko/aot/WordformMeaning.java b/src/main/java/com/github/demidko/aot/WordformMeaning.java index f795176..b115afc 100644 --- a/src/main/java/com/github/demidko/aot/WordformMeaning.java +++ b/src/main/java/com/github/demidko/aot/WordformMeaning.java @@ -10,6 +10,8 @@ import static java.util.Collections.emptyList; import static java.util.Objects.hash; +import com.github.demidko.bits.BitReader; +import com.github.demidko.bits.BitWriter; import java.io.DataInputStream; import java.io.IOException; import java.io.UncheckedIOException; @@ -106,6 +108,7 @@ public static List lookupForMeanings(String w) throws IOExcepti * @return словоформ смысла */ public static WordformMeaning lookupForMeaning(long id) throws IOException { + BitReader reader = new BitReader(id); int lemmaId = reader.readInt(); int flexionIndex = reader.readInt();