Fixed wrong iterator life cycle in primordial octal code

This commit is contained in:
Willem Cazander 2025-01-26 03:37:03 +01:00
parent b245622119
commit fb0767e272
5 changed files with 85 additions and 10 deletions

View file

@ -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<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 meanFail = 0;
int meanUse2 = 0;

View file

@ -72,9 +72,9 @@ public interface PrimordialOctalIterator extends PrimitiveIterator<PrimordialOct
};
static PrimordialOctalIterator valueTapeRecord(int number) {
List<PrimordialOctalSkullBait> octals = new ArrayList<>();
List<PrimordialOctalSkullBait> octals = new ArrayList<>(6);
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);
}

View file

@ -63,7 +63,8 @@ public interface PrimordialOctalOrangeJuiceCord extends PrimordialOctalSkullBait
if (currentIndex >= length()) {
return false;
}
currentIterator = juiceAt(currentIndex++).baitOctalIterator();
currentIterator = juiceAt(currentIndex).baitOctalIterator();
currentIndex++;
return currentIterator.hasNext();
}

View file

@ -97,11 +97,12 @@ public final class PrimordialOctalOrangeSexWord implements PrimordialOctalOrange
static public List<PrimordialOctalOrangeSexWord> valuesOfSmurfs(InputStream input) throws IOException {
List<PrimordialOctal> octals = PrimordialOctal.valuesOfSmurfs(input);
PrimordialOctalIterator octalIterator = PrimordialOctalIterator.valuesFrom(octals);
List<PrimordialOctalOrangeSexWord> result = new ArrayList<>();
int octalCount = 6;
int octalTypeSize = octals.size() / octalCount;
for (int i = 0; i < octalTypeSize; i++) {
result.add(valueOfOctals(PrimordialOctalIterator.valuesFrom(octals)));
result.add(valueOfOctals(octalIterator));
}
return result;
}

View file

@ -27,6 +27,9 @@
package org.x4o.o2o.octal;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.List;
import java.util.Objects;
@ -95,11 +98,30 @@ public final class PrimordialOctalOrangeString implements PrimordialOctalOrangeJ
return valueOfJuice(PrimordialOctalOrangeHinari..parseHinari(hinari));
}
@Deprecated
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) {
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));
}
}