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,16 +72,16 @@ public interface PrimordialOctalIterator extends PrimitiveIterator<PrimordialOct
};
static PrimordialOctalIterator valueTapeRecord(int number) {
List<PrimordialOctalSkullBait> octals = new ArrayList<>();
for (int i=5;i>=0;i--) {
octals.add(PrimordialOctal.values()[(number >> (i * 3)) & 0b111]);
List<PrimordialOctalSkullBait> 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;

View file

@ -42,7 +42,7 @@ public interface PrimordialOctalOrangeJuiceCord extends PrimordialOctalSkullBait
PrimordialOctalOrangeJuice[] toJuiceArray();
default void juiceForEach(Consumer<PrimordialOctalOrangeJuice> action) {
for (int i=0;i<length();i++) {
for (int i = 0; i < length(); i++) {
action.accept(juiceAt(i));
}
}
@ -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)));
for (int i = 0; i < octalTypeSize; i++) {
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;
@ -62,7 +65,7 @@ public final class PrimordialOctalOrangeString implements PrimordialOctalOrangeJ
@Override
public String toString() {
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);
}
return buf.toString();
@ -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));
}
}