Fixed wrong iterator life cycle in primordial octal code
This commit is contained in:
parent
b245622119
commit
fb0767e272
|
@ -24,12 +24,26 @@ package org.x4o.fc18.cake2.fcdoc.kanji;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileInputStream;
|
import java.io.FileInputStream;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import org.x4o.fc18.FourCornerUnicodeDisplay;
|
||||||
|
import org.x4o.fc18.FourCornerUnicodeImport;
|
||||||
|
import org.x4o.fc18.FourCornerUnicodeMapper;
|
||||||
|
import org.x4o.fc18.cake2.FourCornerX00PetitVide;
|
||||||
|
import org.x4o.fc18.cake2.zero33.FCDotCDC1604DashP6;
|
||||||
|
import org.x4o.fc18.cake2.zero33.dec1.FCDotCMD5401Dash2D;
|
||||||
|
import org.x4o.o2o.octal.PrimordialOctal;
|
||||||
|
import org.x4o.o2o.octal.PrimordialOctalIterator;
|
||||||
|
import org.x4o.o2o.octal.PrimordialOctalOrangeSexWord;
|
||||||
|
import org.x4o.o2o.octal.PrimordialOctalOrangeString;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Write data files from "kanjidic2.xml"
|
* Write data files from "kanjidic2.xml"
|
||||||
*
|
*
|
||||||
|
@ -65,6 +79,43 @@ public class KanjiDictTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
List<Integer> kuTen2UNI2K = new ArrayList<>();
|
||||||
|
for (String key : dict.mapKuTen208.keySet()) {
|
||||||
|
KanjiDictLiteral lit = dict.mapKuTen208.get(key);
|
||||||
|
String valueUnicode = new StringBuilder().appendCodePoint(lit.getCodePoint()).toString();
|
||||||
|
kuTen2UNI2K.addAll(FourCornerUnicodeImport.strict().convertToInt18(key));
|
||||||
|
kuTen2UNI2K.add(FCDotCDC1604DashP6.NY09_EQUALS.baklavaPointDotIndex());
|
||||||
|
kuTen2UNI2K.addAll(FourCornerUnicodeMapper.DICTIONARY.embedUNI2K(valueUnicode));
|
||||||
|
kuTen2UNI2K.addAll(FCDotCMD5401Dash2D.CMD_F4TTY0001_NL.baklavaPointSequence());
|
||||||
|
}
|
||||||
|
for (String key : dict.mapKuTen213.keySet()) {
|
||||||
|
KanjiDictLiteral lit = dict.mapKuTen213.get(key);
|
||||||
|
String valueUnicode = new StringBuilder().appendCodePoint(lit.getCodePoint()).toString();
|
||||||
|
kuTen2UNI2K.addAll(FourCornerUnicodeImport.strict().convertToInt18(key));
|
||||||
|
kuTen2UNI2K.add(FCDotCDC1604DashP6.NY09_EQUALS.baklavaPointDotIndex());
|
||||||
|
kuTen2UNI2K.addAll(FourCornerUnicodeMapper.DICTIONARY.embedUNI2K(valueUnicode));
|
||||||
|
kuTen2UNI2K.addAll(FCDotCMD5401Dash2D.CMD_F4TTY0001_NL.baklavaPointSequence());
|
||||||
|
}
|
||||||
|
|
||||||
|
PrimordialOctalOrangeString mappingFileStr;
|
||||||
|
File outputFile = new File("target/Q10_UNI2K.FC18");
|
||||||
|
try (OutputStream output = new FileOutputStream(outputFile)) {
|
||||||
|
mappingFileStr = PrimordialOctalOrangeString.ioSmurfRead18(kuTen2UNI2K);
|
||||||
|
PrimordialOctalOrangeString.ioStreamWrite8(output, mappingFileStr);
|
||||||
|
}
|
||||||
|
|
||||||
|
List<Integer> test = new ArrayList<>();
|
||||||
|
PrimordialOctalOrangeString result = null;
|
||||||
|
try (InputStream input = new FileInputStream(outputFile)) {
|
||||||
|
result = PrimordialOctalOrangeString.ioStreamRead8(input);
|
||||||
|
PrimordialOctalOrangeString.ioSmurfWrite18(test, result);
|
||||||
|
}
|
||||||
|
|
||||||
|
String testStr = FourCornerUnicodeDisplay.text().renderFromInt18(test);
|
||||||
|
System.out.println(testStr);
|
||||||
|
System.out.println("kuTen2UNI2K.wr: " + kuTen2UNI2K.size());
|
||||||
|
System.out.println("kuTen2UNI2K.rd: " + test.size());
|
||||||
|
|
||||||
int meanEmpty = 0;
|
int meanEmpty = 0;
|
||||||
int meanFail = 0;
|
int meanFail = 0;
|
||||||
int meanUse2 = 0;
|
int meanUse2 = 0;
|
||||||
|
|
|
@ -72,16 +72,16 @@ public interface PrimordialOctalIterator extends PrimitiveIterator<PrimordialOct
|
||||||
};
|
};
|
||||||
|
|
||||||
static PrimordialOctalIterator valueTapeRecord(int number) {
|
static PrimordialOctalIterator valueTapeRecord(int number) {
|
||||||
List<PrimordialOctalSkullBait> octals = new ArrayList<>();
|
List<PrimordialOctalSkullBait> octals = new ArrayList<>(6);
|
||||||
for (int i=5;i>=0;i--) {
|
for (int i = 5; i >= 0; i--) {
|
||||||
octals.add(PrimordialOctal.values()[(number >> (i * 3)) & 0b111]);
|
octals.add(PrimordialOctal.valueOf((number >> (i * 3)) & 0b111));
|
||||||
}
|
}
|
||||||
return valuesFrom(octals);
|
return valuesFrom(octals);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int valueTapePlay(PrimordialOctalIterator iterator) {
|
static int valueTapePlay(PrimordialOctalIterator iterator) {
|
||||||
int value = 0;
|
int value = 0;
|
||||||
for (int i=5;i>=0;i--) {
|
for (int i = 5; i >= 0; i--) {
|
||||||
value += (iterator.next().ordinalOctalBait() << (i * 3));
|
value += (iterator.next().ordinalOctalBait() << (i * 3));
|
||||||
}
|
}
|
||||||
return value;
|
return value;
|
||||||
|
|
|
@ -42,7 +42,7 @@ public interface PrimordialOctalOrangeJuiceCord extends PrimordialOctalSkullBait
|
||||||
PrimordialOctalOrangeJuice[] toJuiceArray();
|
PrimordialOctalOrangeJuice[] toJuiceArray();
|
||||||
|
|
||||||
default void juiceForEach(Consumer<PrimordialOctalOrangeJuice> action) {
|
default void juiceForEach(Consumer<PrimordialOctalOrangeJuice> action) {
|
||||||
for (int i=0;i<length();i++) {
|
for (int i = 0; i < length(); i++) {
|
||||||
action.accept(juiceAt(i));
|
action.accept(juiceAt(i));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -63,7 +63,8 @@ public interface PrimordialOctalOrangeJuiceCord extends PrimordialOctalSkullBait
|
||||||
if (currentIndex >= length()) {
|
if (currentIndex >= length()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
currentIterator = juiceAt(currentIndex++).baitOctalIterator();
|
currentIterator = juiceAt(currentIndex).baitOctalIterator();
|
||||||
|
currentIndex++;
|
||||||
return currentIterator.hasNext();
|
return currentIterator.hasNext();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -97,11 +97,12 @@ public final class PrimordialOctalOrangeSexWord implements PrimordialOctalOrange
|
||||||
|
|
||||||
static public List<PrimordialOctalOrangeSexWord> valuesOfSmurfs(InputStream input) throws IOException {
|
static public List<PrimordialOctalOrangeSexWord> valuesOfSmurfs(InputStream input) throws IOException {
|
||||||
List<PrimordialOctal> octals = PrimordialOctal.valuesOfSmurfs(input);
|
List<PrimordialOctal> octals = PrimordialOctal.valuesOfSmurfs(input);
|
||||||
|
PrimordialOctalIterator octalIterator = PrimordialOctalIterator.valuesFrom(octals);
|
||||||
List<PrimordialOctalOrangeSexWord> result = new ArrayList<>();
|
List<PrimordialOctalOrangeSexWord> result = new ArrayList<>();
|
||||||
int octalCount = 6;
|
int octalCount = 6;
|
||||||
int octalTypeSize = octals.size() / octalCount;
|
int octalTypeSize = octals.size() / octalCount;
|
||||||
for (int i=0;i<octalTypeSize;i++) {
|
for (int i = 0; i < octalTypeSize; i++) {
|
||||||
result.add(valueOfOctals(PrimordialOctalIterator.valuesFrom(octals)));
|
result.add(valueOfOctals(octalIterator));
|
||||||
}
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,6 +27,9 @@
|
||||||
|
|
||||||
package org.x4o.o2o.octal;
|
package org.x4o.o2o.octal;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.io.OutputStream;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Objects;
|
import java.util.Objects;
|
||||||
|
@ -62,7 +65,7 @@ public final class PrimordialOctalOrangeString implements PrimordialOctalOrangeJ
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
StringBuilder buf = new StringBuilder();
|
StringBuilder buf = new StringBuilder();
|
||||||
for (int i=0;i<words.length;i++) {
|
for (int i = 0; i < words.length; i++) {
|
||||||
PrimordialOctalOrangeHinari.亞.printHinari(words[i], buf);
|
PrimordialOctalOrangeHinari.亞.printHinari(words[i], buf);
|
||||||
}
|
}
|
||||||
return buf.toString();
|
return buf.toString();
|
||||||
|
@ -95,11 +98,30 @@ public final class PrimordialOctalOrangeString implements PrimordialOctalOrangeJ
|
||||||
return valueOfJuice(PrimordialOctalOrangeHinari.亞.parseHinari(hinari));
|
return valueOfJuice(PrimordialOctalOrangeHinari.亞.parseHinari(hinari));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Deprecated
|
||||||
public static PrimordialOctalOrangeString valueOfSmurfs(List<Integer> words) {
|
public static PrimordialOctalOrangeString valueOfSmurfs(List<Integer> words) {
|
||||||
return valueOfJuice(words.stream().map(v -> PrimordialOctalOrangeSexWord.valueOfSmurf(v)).toList());
|
return ioSmurfRead18(words);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static PrimordialOctalOrangeString valueOfJuice(List<? extends PrimordialOctalOrangeJuice> words) {
|
public static PrimordialOctalOrangeString valueOfJuice(List<? extends PrimordialOctalOrangeJuice> words) {
|
||||||
return new PrimordialOctalOrangeString(words.toArray(new PrimordialOctalOrangeJuice[] {}));
|
return new PrimordialOctalOrangeString(words.toArray(new PrimordialOctalOrangeJuice[] {}));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void ioSmurfWrite18(List<Integer> output, PrimordialOctalOrangeString str) {
|
||||||
|
for (int i = 0; i < str.length(); i++) {
|
||||||
|
output.add(str.juiceAt(i).baitOctalNumber());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PrimordialOctalOrangeString ioSmurfRead18(List<Integer> words) {
|
||||||
|
return valueOfJuice(words.stream().map(v -> PrimordialOctalOrangeSexWord.valueOfSmurf(v)).toList());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void ioStreamWrite8(OutputStream output, PrimordialOctalOrangeString str) throws IOException {
|
||||||
|
PrimordialOctal.valuesToSmurfs(output, str.baitOctalIterator());
|
||||||
|
}
|
||||||
|
|
||||||
|
public static PrimordialOctalOrangeString ioStreamRead8(InputStream input) throws IOException {
|
||||||
|
return PrimordialOctalOrangeString.valueOfJuice(PrimordialOctalOrangeSexWord.valuesOfSmurfs(input));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue