From a89d87e52e6f505e7b8371053f390c9b118289c1 Mon Sep 17 00:00:00 2001 From: axexlck Date: Sun, 29 Sep 2024 02:43:51 +0200 Subject: [PATCH] simplify `IAST#forEach(start, end, consumer)` --- .../matheclipse/core/builtin/Programming.java | 2 +- .../org/matheclipse/core/eval/EvalEngine.java | 6 ++-- .../org/matheclipse/core/expression/AST0.java | 10 +++++++ .../org/matheclipse/core/expression/AST1.java | 10 +++++++ .../org/matheclipse/core/expression/AST2.java | 11 +++++++ .../org/matheclipse/core/expression/AST3.java | 13 ++++++++ .../core/expression/AbstractAST.java | 2 +- .../org/matheclipse/core/expression/B1.java | 10 +++++++ .../org/matheclipse/core/expression/B2.java | 30 ++++++++++++------- .../org/matheclipse/core/expression/B3.java | 13 ++++++++ .../org/matheclipse/core/interfaces/IAST.java | 12 +++++++- 11 files changed, 103 insertions(+), 16 deletions(-) diff --git a/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/builtin/Programming.java b/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/builtin/Programming.java index 1eb057a67..a2c2d7cca 100644 --- a/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/builtin/Programming.java +++ b/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/builtin/Programming.java @@ -771,7 +771,7 @@ private static final class Do extends AbstractCoreFunctionEvaluator { public IExpr evaluate(final IAST ast, EvalEngine engine) { try { final java.util.List> iterList = new ArrayList>(); - ast.forEach(2, ast.size(), (x, i) -> iterList.add(Iterator.create((IAST) x, i, engine))); + ast.forEach2((x, i) -> iterList.add(Iterator.create((IAST) x, i, engine))); final DoIterator generator = new DoIterator(iterList, engine); return generator.doIt(ast.arg1()); } catch (final NoEvalException | ClassCastException e) { diff --git a/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/eval/EvalEngine.java b/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/eval/EvalEngine.java index b90c5e958..c3e0661c4 100644 --- a/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/eval/EvalEngine.java +++ b/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/eval/EvalEngine.java @@ -933,7 +933,7 @@ public IASTMutable evalArgs(final IAST ast, final int attributes, boolean numeri numericMode = fNumericMode; try { final boolean nMode = localNumericMode; - ast.forEach(2, astSize, (arg, i) -> { + ast.forEach2((arg, i) -> { if (!arg.isUnevaluated()) { selectNumericMode(attributes, ISymbol.NHOLDREST, nMode); evalArg(rlist, ast, arg, i, isNumericFunction); @@ -950,7 +950,7 @@ public IASTMutable evalArgs(final IAST ast, final int attributes, boolean numeri numericMode = fNumericMode; try { selectNumericMode(attributes, ISymbol.NHOLDREST, localNumericMode); - ast.forEach(2, astSize, (arg, i) -> { + ast.forEach2((arg, i) -> { if (arg.isAST(S.Evaluate)) { evalArg(rlist, ast, arg, i, isNumericFunction); } @@ -1469,7 +1469,7 @@ private IExpr evalNoAttributes(IASTMutable mutableAST) { final boolean localNumericMode = fNumericMode; final boolean argNumericMode = isNumericArg(mutableAST); IASTMutable[] rlist = new IASTMutable[] {F.NIL}; - mutableAST.forEach(1, astSize, (arg, i) -> { + mutableAST.forEach((arg, i) -> { if (!arg.isUnevaluated()) { fNumericMode = localNumericMode; evalArg(rlist, mutableAST, arg, i, argNumericMode); diff --git a/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/AST0.java b/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/AST0.java index 20605d3a3..6f2b1247d 100644 --- a/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/AST0.java +++ b/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/AST0.java @@ -290,6 +290,16 @@ public void forEach(int start, int end, ObjIntConsumer action) { } } + @Override + public void forEach(ObjIntConsumer action) { + // do nothing + } + + @Override + public void forEach2(ObjIntConsumer action) { + // do nothing + } + /** {@inheritDoc} */ @Override public int indexOf(final IExpr expr) { diff --git a/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/AST1.java b/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/AST1.java index ba792c329..d3993f883 100644 --- a/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/AST1.java +++ b/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/AST1.java @@ -296,6 +296,16 @@ public void forEach(int start, int end, ObjIntConsumer action) { } } + @Override + public void forEach(ObjIntConsumer action) { + action.accept(arg1, 1); + } + + @Override + public void forEach2(ObjIntConsumer action) { + // do nothing + } + /** {@inheritDoc} */ @Override public int indexOf(final IExpr expr) { diff --git a/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/AST2.java b/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/AST2.java index 951d15398..db051dbd9 100644 --- a/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/AST2.java +++ b/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/AST2.java @@ -344,6 +344,17 @@ public void forEach(int start, int end, ObjIntConsumer action) { } } + @Override + public void forEach(ObjIntConsumer action) { + action.accept(arg1, 1); + action.accept(arg2, 2); + } + + @Override + public void forEach2(ObjIntConsumer action) { + action.accept(arg2, 2); + } + @Override public int indexOf(final IExpr expr) { if (arg1.equals(expr)) { diff --git a/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/AST3.java b/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/AST3.java index fa09c1290..2c0b44d18 100644 --- a/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/AST3.java +++ b/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/AST3.java @@ -411,6 +411,19 @@ public void forEach(int start, int end, ObjIntConsumer action) { } } + @Override + public final void forEach(ObjIntConsumer action) { + action.accept(arg1, 1); + action.accept(arg2, 2); + action.accept(arg3, 3); + } + + @Override + public final void forEach2(ObjIntConsumer action) { + action.accept(arg2, 2); + action.accept(arg3, 3); + } + @Override public int indexOf(final IExpr expr) { if (arg1.equals(expr)) { diff --git a/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/AbstractAST.java b/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/AbstractAST.java index 5b87d2fc8..d95feaa13 100644 --- a/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/AbstractAST.java +++ b/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/AbstractAST.java @@ -2036,7 +2036,7 @@ public final IReal evalReal() { public IExpr evalEvaluate(EvalEngine engine) { IASTMutable[] rlist = new IASTMutable[] {F.NIL}; if (!isHoldAllCompleteAST()) { - forEach(1, size(), (x, i) -> { + forEach((x, i) -> { if (x.isAST(S.Evaluate)) { engine.evalArg(rlist, this, x, i, false); } diff --git a/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/B1.java b/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/B1.java index 4d19d3814..5a312cb09 100644 --- a/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/B1.java +++ b/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/B1.java @@ -696,6 +696,16 @@ public void forEach(int start, int end, ObjIntConsumer action) { } } + @Override + public final void forEach(ObjIntConsumer action) { + action.accept(arg1, 1); + } + + @Override + public void forEach2(ObjIntConsumer action) { + // do nothing + } + /** {@inheritDoc} */ @Override public int indexOf(final IExpr expr) { diff --git a/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/B2.java b/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/B2.java index 79967af61..3456891a5 100644 --- a/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/B2.java +++ b/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/B2.java @@ -1195,21 +1195,21 @@ public void forEach(Consumer action, int startOffset) { /** {@inheritDoc} */ @Override - public void forEach(int startOffset, int endOffset, Consumer action) { + public void forEach(int startOffset, final int endOffset, final Consumer action) { if (startOffset < endOffset) { switch (startOffset) { case 0: action.accept(head()); - if (startOffset + 1 < endOffset) { + if (++startOffset < endOffset) { action.accept(arg1); - if (startOffset + 2 < endOffset) { + if (++startOffset < endOffset) { action.accept(arg2); } } break; case 1: action.accept(arg1); - if (startOffset + 1 < endOffset) { + if (++startOffset < endOffset) { action.accept(arg2); } break; @@ -1224,21 +1224,21 @@ public void forEach(int startOffset, int endOffset, Consumer acti } @Override - public void forEach(int start, int end, ObjIntConsumer action) { + public void forEach(int start, final int end, ObjIntConsumer action) { if (start < end) { switch (start) { case 0: action.accept(head(), 0); - if (start + 1 < end) { + if (++start < end) { action.accept(arg1, 1); - if (start + 2 < end) { + if (++start < end) { action.accept(arg2, 2); } } break; case 1: action.accept(arg1, 1); - if (start + 1 < end) { + if (++start < end) { action.accept(arg2, 2); } break; @@ -1246,12 +1246,22 @@ public void forEach(int start, int end, ObjIntConsumer action) { action.accept(arg2, 2); break; default: - throw new IndexOutOfBoundsException( - "Index: " + Integer.valueOf(start) + ", Size: 3"); + throw new IndexOutOfBoundsException("Index: " + Integer.valueOf(start) + ", Size: 3"); } } } + @Override + public final void forEach(ObjIntConsumer action) { + action.accept(arg1, 1); + action.accept(arg2, 2); + } + + @Override + public final void forEach2(ObjIntConsumer action) { + action.accept(arg2, 2); + } + @Override public IExpr get(int location) { switch (location) { diff --git a/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/B3.java b/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/B3.java index 8b4a86deb..17b4518fc 100644 --- a/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/B3.java +++ b/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/expression/B3.java @@ -838,6 +838,19 @@ public void forEach(int start, int end, ObjIntConsumer action) { } } + @Override + public final void forEach(ObjIntConsumer action) { + action.accept(arg1, 1); + action.accept(arg2, 2); + action.accept(arg3, 3); + } + + @Override + public final void forEach2(ObjIntConsumer action) { + action.accept(arg2, 2); + action.accept(arg3, 3); + } + /** {@inheritDoc} */ @Override public int indexOf(final IExpr expr) { diff --git a/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/interfaces/IAST.java b/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/interfaces/IAST.java index 8d36cd375..63358a107 100644 --- a/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/interfaces/IAST.java +++ b/symja_android_library/matheclipse-core/src/main/java/org/matheclipse/core/interfaces/IAST.java @@ -919,6 +919,16 @@ default void forEach(int start, int end, ObjIntConsumer consumer) } } + /** + * Consume all value-elements generated by the given function from index + * 2 inclusive to size() exclusive. + * + * @param consumer function which accepts the elements + */ + default void forEach2(final ObjIntConsumer consumer) { + forEach(2, size(), consumer); + } + /** * Consume all value-elements generated by the given function from index * 1 inclusive. @@ -926,7 +936,7 @@ default void forEach(int start, int end, ObjIntConsumer consumer) * @param end end index (exclusive) * @param consumer function which accepts the elements */ - default void forEach(int end, ObjIntConsumer consumer) { + default void forEach(int end, final ObjIntConsumer consumer) { forEach(1, end, consumer); }