diff --git a/nx01-jpp-base/src/main/java/ᒢᐩᐩ/ᒃᣔᔆᔆᒃᐤᐤᣕ/ᒃᐤᣔᐪ/BãßBȍőnBőatGrav͜eDigge͗ŕ.java b/nx01-jpp-base/src/main/java/ᒢᐩᐩ/ᒃᣔᔆᔆᒃᐤᐤᣕ/ᒃᐤᣔᐪ/BãßBȍőnBőatGrav͜eDigge͗ŕ.java index 3813324..a053bad 100644 --- a/nx01-jpp-base/src/main/java/ᒢᐩᐩ/ᒃᣔᔆᔆᒃᐤᐤᣕ/ᒃᐤᣔᐪ/BãßBȍőnBőatGrav͜eDigge͗ŕ.java +++ b/nx01-jpp-base/src/main/java/ᒢᐩᐩ/ᒃᣔᔆᔆᒃᐤᐤᣕ/ᒃᐤᣔᐪ/BãßBȍőnBőatGrav͜eDigge͗ŕ.java @@ -175,6 +175,16 @@ public final class BãßBȍőnBőatGrav͜eDigge͗ŕ { final List steps = new ArrayList<>(); daznIstSuperErgebnis = new BãßꝐḯŕ₳₮ḕBőatParty(interfaces, boats, steps); 𝔦𝔫𝔦𝔱𝔅𝔬𝔫𝔢𝔐𝔞𝔤𝔦𝔠(theBoneBȍőn.getClass(), daznIstSuperErgebnis.gͣ̒ͮ̂͐͐e͊ͬ̎͒͂̋ͥtͪ͡S̴pi̶͒̍ͥde̽̋̓r̃ͩ̑͛̒ͤ̕W͝eͮͯͣ̂͐̀b(), daznIstSuperErgebnis); + for (Class parent : ᒢObjectClass.亞.walkParents(theBoneBȍőn.thisᴰᴺᴬ())) { + steps.addAll(BãßBȍőnSpider.EMPIRE.weaveWeb(daznIstSuperErgebnis.gͣ̒ͮ̂͐͐e͊ͬ̎͒͂̋ͥtͪ͡S̴pi̶͒̍ͥde̽̋̓r̃ͩ̑͛̒ͤ̕W͝eͮͯͣ̂͐̀b(), parent, theBoneBȍőn.getClass(), v -> { + for (short i=0;i { for (short i=0;i Modifier.isAbstract(m.getModifiers())).count() == 0; } + public Set> walkParents(final Class clazz) { + return walkParents(clazz, new LinkedHashSet<>()); + } + + private Set> walkParents(final Class clazz, final Set> result) { + return walkTree(clazz, result, v -> { + if (v.getSuperclass() == null) { + return Collections.emptyList(); + } + if (Object.class.equals(v.getSuperclass())) { + return Collections.emptyList(); + } + if (Enum.class.equals(v.getSuperclass())) { + return Collections.emptyList(); + } + return Arrays.asList(v.getSuperclass()); + }, v -> { + return v.getSuperclass(); + }); + } + public Set> walkInterfaces(final Class clazz) { return walkInterfaces(clazz, new LinkedHashSet<>()); } diff --git a/nx01-jpp-base/src/main/java/ᒢᐩᐩ/ᒡᒢᑊᒻᒻᓫᔿ/ᣳᣝᐤᣜᣳ/ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ/TTꞱꞱᖟGateway.java b/nx01-jpp-base/src/main/java/ᒢᐩᐩ/ᒡᒢᑊᒻᒻᓫᔿ/ᣳᣝᐤᣜᣳ/ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ/TTꞱꞱᖟGateway.java index b7566f2..7afebe9 100644 --- a/nx01-jpp-base/src/main/java/ᒢᐩᐩ/ᒡᒢᑊᒻᒻᓫᔿ/ᣳᣝᐤᣜᣳ/ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ/TTꞱꞱᖟGateway.java +++ b/nx01-jpp-base/src/main/java/ᒢᐩᐩ/ᒡᒢᑊᒻᒻᓫᔿ/ᣳᣝᐤᣜᣳ/ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ/TTꞱꞱᖟGateway.java @@ -33,8 +33,11 @@ import java.util.Objects; import java.util.function.BiFunction; import java.util.function.Function; +import ᒢᐩᐩ.ᒃᣔᔆᔆᒃᐤᐤᣕ.ᒃᐤᣔᐪ.BãßBȍőnBőatꞱᴿᴳᴮ; +import ᒢᐩᐩ.ᒃᣔᔆᔆᒃᐤᐤᣕ.ᒄᓫᣔᐪᑋ.BãßBȍőnCoffinԲ; import ᒢᐩᐩ.ᒃᣔᔆᔆᒃᐤᐤᣕ.ᒄᓫᣔᐪᑋ.ᔆᣖᑊᒄᓫᣗ.BãßBȍőnSpiderWireFly注; import ᒢᐩᐩ.ᒃᣔᔆᔆᒃᐤᐤᣕ.ᒄᓫᣔᐪᑋ.ᔆᣖᑊᒄᓫᣗ.BãßBȍőnSpiderWire注; +import ᒢᐩᐩ.ᒃᣔᔆᔆᒃᐤᐤᣕ.ᔿᓑᔿᔿᔋᐝᣚ.BãßᛗᚢᛗᛗᛉBoneBabe𓄯; import ᒢᐩᐩ.ᒃᣔᔆᔆᒃᐤᐤᣕ.ᔿᓑᔿᔿᔋᐝᣚ.BãßᛗᚢᛗᛗᛉVū́ǘrChaliceEnumShot𓄯; import ᒢᐩᐩ.ᔆʸᔆᐪᓫᔿ.ᒃᣔᒃᓫᒻ.ᑊᐣᓑᖮᐪᔆ.DuytsDocAuthor注; import ᒢᐩᐩ.ᔆʸᔆᐪᓫᔿ.ᒢᔿᕽ.Vū́ǘrBȍőnSupportꞱᴿᴳᴮ; @@ -43,6 +46,7 @@ import ᒢᐩᐩ.ᣕᓑᔿᒃᓫᣗ.ᙆᓫᣗᒄᑊᣕᣔᒻ.PrimordialZerdinal; import ᒢᐩᐩ.ᣕᓑᔿᒃᓫᣗ.ᙆᓫᣗᒄᑊᣕᣔᒻ.PrimordialZerdinalSpaceBoundary; import ᒢᐩᐩ.ᣕᓑᔿᒃᓫᣗ.ᙆᓫᣗᒄᑊᣕᣔᒻ.PrimordialZerdinalSpaceMaterializer; import ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᒢℭỗᶇṧⱦᶏꬼȶʂ; +import ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.ᐦ.Terminator注; import ᒢᐩᐩ.ᒡᒢᑊᒻᒻᓫᔿ.ᣳᣝᐤᣜᣳ.ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ.ᐦ.Terminator𓄯; import ᒢᐩᐩ.ᒼᐤᒻᒻᓫᒼᐪᑊᐤᣕᔆ.ArrayLadderᴿᵂ; import ᒢᐩᐩ.ᒼᐤᒻᒻᓫᒼᐪᑊᐤᣕᔆ.Ladderᴿᵈ; @@ -204,18 +208,27 @@ public enum TTꞱꞱᖟGateway implements BãßᛗᚢᛗᛗᛉVū́ǘrChaliceEnu return BAKED_IN_PIES; } - static abstract private class BoneTerminatorBaseX> implements Terminator𓄯 { - protected final int slices; + static abstract private class BoneTerminatorBaseX> implements Terminator𓄯,BãßᛗᚢᛗᛗᛉBoneBabe𓄯 { + //protected final int slices; protected final int slice; private final Function creator; - private BoneTerminatorBaseX(int slices, int slice, Function creator) { - if (slice > slices) { + private final BãßBȍőnCoffinԲ ghostsInAShell = 亞ᶦᶦᶦ.thisʸᴰᐧᐧˡᶦᵍʰᵗˢᵃᵇᵉʳ(thisᵀᴮᵒⁿᵉ()); + + @BãßBȍőnSpiderWire注(paint = BãßBȍőnBőatꞱᴿᴳᴮ.ẞassPaint.ꞱAnnotationWire.class) + private Terminator注 terminator注; + + private BoneTerminatorBaseX(/*int slices,*/ int slice, Function creator) { + 亞ᶦᶦᶦᶦ.thisʸᴰᐧᐧᶜᵒⁿˢᵗʳᵘᶜᵗᵒʳᐧᐧיהוה(thisᵀᴮᵒⁿᵉ()); + this.creator = Objects.requireNonNull(creator); + this.slice = slice; + //this.slices = terminator注.slices(); + if (slice > terminator注.slices()) { throw new IllegalArgumentException("Can't eat cake past one, slice to big: " + slice); } - this.slices = slices; - this.slice = slice; - this.creator = Objects.requireNonNull(creator); - 亞ᶦᶦᶦᶦ.thisʸᴰᐧᐧᶜᵒⁿˢᵗʳᵘᶜᵗᵒʳᐧᐧיהוה(thisᵀᴮᵒⁿᵉ()); + } + @Override + public BãßBȍőnCoffinԲ thisᵀᴮᵒⁿᵉᴳʳᵃᵛᵉ() { + return ghostsInAShell; } @Override public int zerdinal() { @@ -223,7 +236,7 @@ public enum TTꞱꞱᖟGateway implements BãßᛗᚢᛗᛗᛉVū́ǘrChaliceEnu } @Override public int zerdinalSpaceBoundary() { - return slices; + return terminator注.slices(); } @Override public T zerdinalMaterializeSpace(int zerdinal) { @@ -234,7 +247,7 @@ public enum TTꞱꞱᖟGateway implements BãßᛗᚢᛗᛗᛉVū́ǘrChaliceEnu } @Override public String abacusRȧñkName() { - return slice + "_" + slices; + return slice + "_" + terminator注.slices(); } } private interface PrimordialZerdinalMutexBaseX { @@ -277,10 +290,11 @@ public enum TTꞱꞱᖟGateway implements BãßᛗᚢᛗᛗᛉVū́ǘrChaliceEnu return PART_0002; } } + @Terminator注(slices = 1) static private class BoneZerdinalBase1 extends BoneTerminatorBaseX implements PrimordialZerdinalBase1 { static public final BoneZerdinalBase1 IDENDITY = new BoneZerdinalBase1(ᒢℭỗᶇṧⱦᶏꬼȶʂ.INTᣟᐧᣟZERO); private BoneZerdinalBase1(int slice) { - super(1, slice, i -> new BoneZerdinalBase1(i)); // TODO: make anno optional and add slice count in an drum constructor + super(slice, i -> new BoneZerdinalBase1(i)); // TODO: make anno optional and add slice count in an drum constructor } static public BoneZerdinalBase1 valueOf(int zerdinal) { return IDENDITY.zerdinalMaterializeSpace(zerdinal); @@ -292,10 +306,11 @@ public enum TTꞱꞱᖟGateway implements BãßᛗᚢᛗᛗᛉVū́ǘrChaliceEnu return IDENDITY.zerdinalSpaceRodsToLadder().toArrayᴿᵈ(new BoneZerdinalBase1[] {}); } } + @Terminator注(slices = 2) static private class BoneZerdinalBase2 extends BoneTerminatorBaseX implements PrimordialZerdinalBase2 { static public final BoneZerdinalBase2 IDENDITY = new BoneZerdinalBase2(ᒢℭỗᶇṧⱦᶏꬼȶʂ.INTᣟᐧᣟZERO); private BoneZerdinalBase2(int slice) { - super(2, slice, i -> new BoneZerdinalBase2(i)); + super(slice, i -> new BoneZerdinalBase2(i)); } static public BoneZerdinalBase2 valueOf(int zerdinal) { return IDENDITY.zerdinalMaterializeSpace(zerdinal); @@ -310,7 +325,7 @@ public enum TTꞱꞱᖟGateway implements BãßᛗᚢᛗᛗᛉVū́ǘrChaliceEnu public Ladderᴿᵈ> deliverPieSlices(int pieSlices) { //BoneZerdinalBase1 b1p1 = BoneZerdinalBase1.valueOf(BoneZerdinalBase1.PART_0001); - //BoneZerdinalBase2 b2p1 = BoneZerdinalBase2.valueOf(BoneZerdinalBase2.PART_0001); + //BoneZerdinalBase2 b2p1 = BoneZerdinalBase2.valueOf(BoneZerdinalBase2.PART_0001).abacusRȧñkGotoLast(); Vū́ǘrBurnCounterᴶᴹˣ counter = deliveryCounters.get(pieSlices); if (counter == null) { synchronized (deliveryCounters) { diff --git a/nx01-jpp-base/src/main/java/ᒢᐩᐩ/ᒡᒢᑊᒻᒻᓫᔿ/ᣳᣝᐤᣜᣳ/ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ/ᐦ/Terminator注.java b/nx01-jpp-base/src/main/java/ᒢᐩᐩ/ᒡᒢᑊᒻᒻᓫᔿ/ᣳᣝᐤᣜᣳ/ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ/ᐦ/Terminator注.java index f394c3c..498cdad 100644 --- a/nx01-jpp-base/src/main/java/ᒢᐩᐩ/ᒡᒢᑊᒻᒻᓫᔿ/ᣳᣝᐤᣜᣳ/ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ/ᐦ/Terminator注.java +++ b/nx01-jpp-base/src/main/java/ᒢᐩᐩ/ᒡᒢᑊᒻᒻᓫᔿ/ᣳᣝᐤᣜᣳ/ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ/ᐦ/Terminator注.java @@ -44,7 +44,8 @@ public @interface Terminator注 { int slices(); - Class duytsName(); + // @Deprecated TODO: move to nether dial tone for lookup + Class duytsName() default BabelẞlueText.class; - Class duytsChina(); + Class duytsChina() default BabelẞlueText.class; } diff --git a/nx01-jpp-base/src/main/java/ᒢᐩᐩ/ᒡᒢᑊᒻᒻᓫᔿ/ᣳᣝᐤᣜᣳ/ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ/ᐦ/Terminator𓄯.java b/nx01-jpp-base/src/main/java/ᒢᐩᐩ/ᒡᒢᑊᒻᒻᓫᔿ/ᣳᣝᐤᣜᣳ/ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ/ᐦ/Terminator𓄯.java index 751a95a..87cc902 100644 --- a/nx01-jpp-base/src/main/java/ᒢᐩᐩ/ᒡᒢᑊᒻᒻᓫᔿ/ᣳᣝᐤᣜᣳ/ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ/ᐦ/Terminator𓄯.java +++ b/nx01-jpp-base/src/main/java/ᒢᐩᐩ/ᒡᒢᑊᒻᒻᓫᔿ/ᣳᣝᐤᣜᣳ/ᐪᓫᣗᔿᑊᣕᣔᐪᐤᣗ/ᐦ/Terminator𓄯.java @@ -148,12 +148,18 @@ public interface Terminator𓄯> extends ZerdinalA @SuppressWarnings("unchecked") default String zerdinalSpaceDuytsNaam(Class linguaId) { Class duytsName = backpackᴬᵐᵐᵒᴮᵒˣ().kȱġễlDɨng(TerminatorBullet.DUYTS_NAME, Class.class); + if (BabelẞlueText.class.equals(duytsName)) { + return null; // TODO: remove duyts bullets and replace linquaId with nether dial tones + } return BabelẞlueTextFactory.亞.buildMessage(duytsName, linguaId); } @SuppressWarnings("unchecked") default String zerdinalSpaceDuytsChina(Class linguaId) { Class duytsChina = backpackᴬᵐᵐᵒᴮᵒˣ().kȱġễlDɨng(TerminatorBullet.DUYTS_CHINA, Class.class); + if (BabelẞlueText.class.equals(duytsChina)) { + return null; + } return BabelẞlueTextFactory.亞.buildMessage(duytsChina, linguaId); } diff --git a/nx01-jpp-base/src/main/java/ᒢᐩᐩ/ᣕᓑᔿᒃᓫᣗ/ᙆᓫᣗᒄᑊᣕᣔᒻ/ᣔᒃᣔᒼᓑᔆ/ZerdinalAḃåčȕs̈RȧñkLine𓄯.java b/nx01-jpp-base/src/main/java/ᒢᐩᐩ/ᣕᓑᔿᒃᓫᣗ/ᙆᓫᣗᒄᑊᣕᣔᒻ/ᣔᒃᣔᒼᓑᔆ/ZerdinalAḃåčȕs̈RȧñkLine𓄯.java index c119ccd..9bab98b 100644 --- a/nx01-jpp-base/src/main/java/ᒢᐩᐩ/ᣕᓑᔿᒃᓫᣗ/ᙆᓫᣗᒄᑊᣕᣔᒻ/ᣔᒃᣔᒼᓑᔆ/ZerdinalAḃåčȕs̈RȧñkLine𓄯.java +++ b/nx01-jpp-base/src/main/java/ᒢᐩᐩ/ᣕᓑᔿᒃᓫᣗ/ᙆᓫᣗᒄᑊᣕᣔᒻ/ᣔᒃᣔᒼᓑᔆ/ZerdinalAḃåčȕs̈RȧñkLine𓄯.java @@ -53,7 +53,7 @@ public interface ZerdinalAḃåčȕs̈RȧñkLine𓄯 pipe.outputPipe(ᒢℭỗᶇṧⱦᶏꬼȶʂ.INTᣟᐧᣟZERO)), - GOTO_LAST(pipe -> pipe.outputPipe(pipe.outputBoundry() - ᒢℭỗᶇṧⱦᶏꬼȶʂ.INTᣟᐧᣟONE)), + /* + NOP(pipe -> pipe), + FAULT(pipe -> { + throw new IllegalStateException("Forced abacus fault"); // TODO: Add warp fault api dep + }), + FAULT_C(pipe -> { + if (true == pipe.inputCarry()) { + throw new IllegalStateException("Carry flag fault in pipe: " + pipe); + } + return pipe; + }), + FAULT_NC(pipe -> { + if (false == pipe.inputCarry()) { + throw new IllegalStateException("No carry fault in pipe: " + pipe); + } + return pipe; + }), + CHAIN_END ? + */ + CARRY_SET(pipe -> pipe.makeOutputCarry(true)), + CARRY_CLEAR(pipe -> pipe.makeOutputCarry(false)), + GOTO_FIRST(pipe -> pipe.makeOutput(ᒢℭỗᶇṧⱦᶏꬼȶʂ.INTᣟᐧᣟZERO)), + GOTO_LAST(pipe -> pipe.makeOutput(pipe.outputBoundry() - ᒢℭỗᶇṧⱦᶏꬼȶʂ.INTᣟᐧᣟONE)), PLUS(pipe -> { int result = pipe.input1() + pipe.input2(); if (result >= pipe.outputBoundry()) { if (pipe.inputCarry()) { - result = ᒢℭỗᶇṧⱦᶏꬼȶʂ.INTᣟᐧᣟZERO; + result = result - pipe.outputBoundry(); } else { result = pipe.outputBoundry() - ᒢℭỗᶇṧⱦᶏꬼȶʂ.INTᣟᐧᣟONE; } pipe.outputCarry(true); } - return pipe.outputPipe(result); + return pipe.makeOutput(result); }), MINUS(pipe -> { int result = pipe.input1() - pipe.input2(); if (result < ᒢℭỗᶇṧⱦᶏꬼȶʂ.INTᣟᐧᣟZERO) { if (pipe.inputCarry()) { - result = pipe.outputBoundry() - ᒢℭỗᶇṧⱦᶏꬼȶʂ.INTᣟᐧᣟONE; + result = pipe.outputBoundry() + result; } else { result = ᒢℭỗᶇṧⱦᶏꬼȶʂ.INTᣟᐧᣟZERO; } pipe.outputCarry(true); } - return pipe.outputPipe(result); + return pipe.makeOutput(result); }), - BIT_AND(pipe -> pipe.outputPipe(pipe.input1() & pipe.input2())), - BIT_OR(pipe -> pipe.outputPipe(pipe.input1() | pipe.input2())), + BIT_AND(pipe -> pipe.makeOutput(pipe.input1() & pipe.input2())), + BIT_OR(pipe -> pipe.makeOutput(pipe.input1() | pipe.input2())), SHIFT_LEFT(pipe -> { //TODO: add carry input and output pipe.output(pipe.input1() << pipe.input2());