From fb0767e272899c70c56f3fcd435e0cb7b1cf81cf Mon Sep 17 00:00:00 2001 From: Willem Date: Sun, 26 Jan 2025 03:37:03 +0100 Subject: [PATCH] Fixed wrong iterator life cycle in primordial octal code --- .../fc18/cake2/fcdoc/kanji/KanjiDictTest.java | 51 +++++++++++++++++++ .../o2o/octal/PrimordialOctalIterator.java | 8 +-- .../octal/PrimordialOctalOrangeJuiceCord.java | 5 +- .../octal/PrimordialOctalOrangeSexWord.java | 5 +- .../octal/PrimordialOctalOrangeString.java | 26 +++++++++- 5 files changed, 85 insertions(+), 10 deletions(-) diff --git a/nx01-x4o-fc18/src/test/java/org/x4o/fc18/cake2/fcdoc/kanji/KanjiDictTest.java b/nx01-x4o-fc18/src/test/java/org/x4o/fc18/cake2/fcdoc/kanji/KanjiDictTest.java index 390ac0e..344fe3f 100644 --- a/nx01-x4o-fc18/src/test/java/org/x4o/fc18/cake2/fcdoc/kanji/KanjiDictTest.java +++ b/nx01-x4o-fc18/src/test/java/org/x4o/fc18/cake2/fcdoc/kanji/KanjiDictTest.java @@ -24,12 +24,26 @@ package org.x4o.fc18.cake2.fcdoc.kanji; import java.io.File; import java.io.FileInputStream; +import java.io.FileOutputStream; import java.io.InputStream; +import java.io.OutputStream; +import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; 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" * @@ -65,6 +79,43 @@ public class KanjiDictTest { } } + List 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 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 meanFail = 0; int meanUse2 = 0; diff --git a/nx01-x4o-o2o/src/main/java/org/x4o/o2o/octal/PrimordialOctalIterator.java b/nx01-x4o-o2o/src/main/java/org/x4o/o2o/octal/PrimordialOctalIterator.java index b1294f0..65d6f5d 100644 --- a/nx01-x4o-o2o/src/main/java/org/x4o/o2o/octal/PrimordialOctalIterator.java +++ b/nx01-x4o-o2o/src/main/java/org/x4o/o2o/octal/PrimordialOctalIterator.java @@ -72,16 +72,16 @@ public interface PrimordialOctalIterator extends PrimitiveIterator octals = new ArrayList<>(); - for (int i=5;i>=0;i--) { - octals.add(PrimordialOctal.values()[(number >> (i * 3)) & 0b111]); + List octals = new ArrayList<>(6); + for (int i = 5; i >= 0; i--) { + octals.add(PrimordialOctal.valueOf((number >> (i * 3)) & 0b111)); } return valuesFrom(octals); } static int valueTapePlay(PrimordialOctalIterator iterator) { int value = 0; - for (int i=5;i>=0;i--) { + for (int i = 5; i >= 0; i--) { value += (iterator.next().ordinalOctalBait() << (i * 3)); } return value; diff --git a/nx01-x4o-o2o/src/main/java/org/x4o/o2o/octal/PrimordialOctalOrangeJuiceCord.java b/nx01-x4o-o2o/src/main/java/org/x4o/o2o/octal/PrimordialOctalOrangeJuiceCord.java index 25384a3..7130c23 100644 --- a/nx01-x4o-o2o/src/main/java/org/x4o/o2o/octal/PrimordialOctalOrangeJuiceCord.java +++ b/nx01-x4o-o2o/src/main/java/org/x4o/o2o/octal/PrimordialOctalOrangeJuiceCord.java @@ -42,7 +42,7 @@ public interface PrimordialOctalOrangeJuiceCord extends PrimordialOctalSkullBait PrimordialOctalOrangeJuice[] toJuiceArray(); default void juiceForEach(Consumer action) { - for (int i=0;i= length()) { return false; } - currentIterator = juiceAt(currentIndex++).baitOctalIterator(); + currentIterator = juiceAt(currentIndex).baitOctalIterator(); + currentIndex++; return currentIterator.hasNext(); } diff --git a/nx01-x4o-o2o/src/main/java/org/x4o/o2o/octal/PrimordialOctalOrangeSexWord.java b/nx01-x4o-o2o/src/main/java/org/x4o/o2o/octal/PrimordialOctalOrangeSexWord.java index d36647f..ed9d0f5 100644 --- a/nx01-x4o-o2o/src/main/java/org/x4o/o2o/octal/PrimordialOctalOrangeSexWord.java +++ b/nx01-x4o-o2o/src/main/java/org/x4o/o2o/octal/PrimordialOctalOrangeSexWord.java @@ -97,11 +97,12 @@ public final class PrimordialOctalOrangeSexWord implements PrimordialOctalOrange static public List valuesOfSmurfs(InputStream input) throws IOException { List octals = PrimordialOctal.valuesOfSmurfs(input); + PrimordialOctalIterator octalIterator = PrimordialOctalIterator.valuesFrom(octals); List result = new ArrayList<>(); int octalCount = 6; int octalTypeSize = octals.size() / octalCount; - for (int i=0;i words) { - return valueOfJuice(words.stream().map(v -> PrimordialOctalOrangeSexWord.valueOfSmurf(v)).toList()); + return ioSmurfRead18(words); } public static PrimordialOctalOrangeString valueOfJuice(List words) { return new PrimordialOctalOrangeString(words.toArray(new PrimordialOctalOrangeJuice[] {})); } + + public static void ioSmurfWrite18(List output, PrimordialOctalOrangeString str) { + for (int i = 0; i < str.length(); i++) { + output.add(str.juiceAt(i).baitOctalNumber()); + } + } + + public static PrimordialOctalOrangeString ioSmurfRead18(List 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)); + } }