Skip to content

Commit

Permalink
use Number instead of double for functions (will break things ;-) )
Browse files Browse the repository at this point in the history
  • Loading branch information
michaeloffner committed Sep 9, 2024
1 parent ac0781d commit d86518a
Show file tree
Hide file tree
Showing 205 changed files with 1,095 additions and 797 deletions.
4 changes: 4 additions & 0 deletions core/src/main/java/lucee/commons/math/MathUtil.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,10 @@ public static double abs(double number) {
return (number <= 0.0D) ? 0.0D - number : number;
}

public static BigDecimal abs(BigDecimal number) {
return number.abs();
}

public static double sgn(double number) {
return number != 0.0d ? number >= 0.0d ? 1 : -1 : 0;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,14 +32,17 @@ public final class ArrayDeleteAt extends BIF {

private static final long serialVersionUID = -5900967522809749154L;

public static boolean call(PageContext pc, Array array, double number) throws PageException {
array.removeE((int) number);
public static boolean call(PageContext pc, Array array, Number number) throws PageException {
array.removeE(Caster.toIntValue(number));
return true;
}

@Override
public Object invoke(PageContext pc, Object[] args) throws PageException {
if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toDoubleValue(args[1]));
else throw new FunctionException(pc, "ArrayDeleteAt", 2, 3, args.length);
if (args.length == 2) {
Caster.toArray(args[0]).removeE(Caster.toIntValue(args[1]));
return true;
}
throw new FunctionException(pc, "ArrayDeleteAt", 2, 3, args.length);
}
}
15 changes: 2 additions & 13 deletions core/src/main/java/lucee/runtime/functions/arrays/ArrayEach.java
Original file line number Diff line number Diff line change
Expand Up @@ -42,23 +42,12 @@ public static String call(PageContext pc, Array array, UDF udf, boolean parallel
return _call(pc, array, udf, parallel, 20);
}

public static String call(PageContext pc, Array array, UDF udf, boolean parallel, double maxThreads) throws PageException {
return _call(pc, array, udf, parallel, (int) maxThreads);
public static String call(PageContext pc, Array array, UDF udf, boolean parallel, Number maxThreads) throws PageException {
return _call(pc, array, udf, parallel, Caster.toIntValue(maxThreads));
}

private static String _call(PageContext pc, Array array, UDF udf, boolean parallel, int maxThreads) throws PageException {

return Each.call(pc, array, udf, parallel, maxThreads);

/*
* ExecutorService execute=null; List<Future<Data<Object>>> futures=null; if(parallel) { execute =
* Executors.newFixedThreadPool(maxThreads); futures=new ArrayList<Future<Data<Object>>>(); }
* Each.invoke(pc, array, udf,execute,futures);
*
* if(parallel) Each.afterCall(pc,futures);
*
* return null;
*/
}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ public static boolean call(PageContext pc, Array array, UDF udf, boolean paralle
return _call(pc, array, udf, parallel, 20);
}

public static boolean call(PageContext pc, Array array, UDF udf, boolean parallel, double maxThreads) throws PageException {
return _call(pc, array, udf, parallel, (int) maxThreads);
public static boolean call(PageContext pc, Array array, UDF udf, boolean parallel, Number maxThreads) throws PageException {
return _call(pc, array, udf, parallel, Caster.toIntValue(maxThreads));
}

private static boolean _call(PageContext pc, Array array, UDF udf, boolean parallel, int maxThreads) throws PageException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,8 @@ public static Array call(PageContext pc, Array array, UDF udf, boolean parallel)
return _call(pc, array, udf, parallel, 20);
}

public static Array call(PageContext pc, Array array, UDF udf, boolean parallel, double maxThreads) throws PageException {
return _call(pc, array, udf, parallel, (int) maxThreads);
public static Array call(PageContext pc, Array array, UDF udf, boolean parallel, Number maxThreads) throws PageException {
return _call(pc, array, udf, parallel, Caster.toIntValue(maxThreads));
}

public static Array _call(PageContext pc, Array array, UDF filter, boolean parallel, int maxThreads) throws PageException {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,14 @@ public final class ArrayIndexExists extends BIF {

private static final long serialVersionUID = -4490011932571314711L;

public static boolean call(PageContext pc, Array array, double index) {
public static boolean call(PageContext pc, Array array, Number index) {
Object _null = NullSupportHelper.NULL(pc);
return array.get((int) index, _null) != _null;
return array.get(Caster.toIntValue(index), _null) != _null;
}

@Override
public Object invoke(PageContext pc, Object[] args) throws PageException {
if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toDoubleValue(args[1]));
else throw new FunctionException(pc, "ArrayIndexExists", 2, 2, args.length);
if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toNumber(pc, args[1]));
throw new FunctionException(pc, "ArrayIndexExists", 2, 2, args.length);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,13 @@ public final class ArrayInsertAt extends BIF {

private static final long serialVersionUID = -418752384898360791L;

public static boolean call(PageContext pc, Array array, double number, Object object) throws PageException {
return array.insert((int) number, object);
public static boolean call(PageContext pc, Array array, Number number, Object object) throws PageException {
return array.insert(Caster.toIntValue(number), object);
}

@Override
public Object invoke(PageContext pc, Object[] args) throws PageException {
if (args.length == 3) return call(pc, Caster.toArray(args[0]), Caster.toDoubleValue(args[1]), args[2]);
else throw new FunctionException(pc, "ArrayInsertAt", 3, 3, args.length);
if (args.length == 3) return call(pc, Caster.toArray(args[0]), Caster.toNumber(pc, args[1]), args[2]);
throw new FunctionException(pc, "ArrayInsertAt", 3, 3, args.length);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,13 +32,13 @@ public final class ArrayIsDefined extends BIF {

private static final long serialVersionUID = 5821478169641360902L;

public static boolean call(PageContext pc, Array array, double index) {
public static boolean call(PageContext pc, Array array, Number index) {
return ArrayIndexExists.call(pc, array, index);
}

@Override
public Object invoke(PageContext pc, Object[] args) throws PageException {
if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toDoubleValue(args[1]));
if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toNumber(pc, args[1]));
else throw new FunctionException(pc, "ArrayIsDefined", 2, 2, args.length);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public final class ArrayLen extends BIF {

private static final long serialVersionUID = -1530118609194349457L;

public static double call(PageContext pc, Array array) {
public static Number call(PageContext pc, Array array) {
return array.size();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ public static Array call(PageContext pc, Array array, UDF udf, boolean parallel)
return _call(pc, array, udf, parallel, 20);
}

public static Array call(PageContext pc, Array array, UDF udf, boolean parallel, double maxThreads) throws PageException {
return _call(pc, array, udf, parallel, (int) maxThreads);
public static Array call(PageContext pc, Array array, UDF udf, boolean parallel, Number maxThreads) throws PageException {
return _call(pc, array, udf, parallel, Caster.toIntValue(maxThreads));
}

private static Array _call(PageContext pc, Array array, UDF udf, boolean parallel, int maxThreads) throws PageException {
Expand All @@ -52,7 +52,7 @@ private static Array _call(PageContext pc, Array array, UDF udf, boolean paralle
public Object invoke(PageContext pc, Object[] args) throws PageException {
if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toFunction(args[1]));
if (args.length == 3) return call(pc, Caster.toArray(args[0]), Caster.toFunction(args[1]), Caster.toBooleanValue(args[2]));
if (args.length == 4) return call(pc, Caster.toArray(args[0]), Caster.toFunction(args[1]), Caster.toBooleanValue(args[2]), Caster.toDoubleValue(args[3]));
if (args.length == 4) return call(pc, Caster.toArray(args[0]), Caster.toFunction(args[1]), Caster.toBooleanValue(args[2]), Caster.toNumber(pc, args[3]));

throw new FunctionException(pc, "ArrayMap", 2, 4, args.length);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public final class ArrayMax extends BIF {

private static final long serialVersionUID = -4347418519322157914L;

public static double call(PageContext pc, Array array) throws PageException {
public static Number call(PageContext pc, Array array) throws PageException {
return ArrayUtil.max(array);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@

public class ArrayMedian extends BIF {

public static double call(PageContext pc, Array array) throws ExpressionException {
public static Number call(PageContext pc, Array array) throws ExpressionException {
return ArrayUtil.median(array);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,13 @@ public final class ArrayMid extends BIF {

private static final long serialVersionUID = 4996354700884413289L;

public static Array call(PageContext pc, Array arr, double start) throws ExpressionException {
public static Array call(PageContext pc, Array arr, Number start) throws ExpressionException {
return call(pc, arr, start, -1);
}

public static Array call(PageContext pc, Array arr, double start, double count) throws ExpressionException {
int s = (int) start;
int c = (int) count;
public static Array call(PageContext pc, Array arr, Number start, Number count) throws ExpressionException {
int s = Caster.toIntValue(start);
int c = Caster.toIntValue(count);

if (s < 1) throw new FunctionException(pc, "ArrayMid", 2, "start", "Parameter which is now [" + s + "] must be a positive integer");
if (c == -1) c = arr.size();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ public final class ArrayMin extends BIF {

private static final long serialVersionUID = 7640801691378949924L;

public static double call(PageContext pc, Array array) throws PageException {
public static Number call(PageContext pc, Array array) throws PageException {
return ArrayUtil.min(array);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,13 @@ public final class ArrayNew extends BIF {

private static final long serialVersionUID = -5923269433550568279L;

public static Array call(PageContext pc, double dimension, String type, boolean _synchronized) throws PageException {
public static Array call(PageContext pc, Number dimension, String type, boolean _synchronized) throws PageException {
Array a;
if (StringUtil.isEmpty(type, true) || Decision.isBoolean(type)) {
a = ArrayUtil.getInstance((int) dimension, _synchronized);
a = ArrayUtil.getInstance(Caster.toIntValue(dimension), _synchronized);
}
else {
if (dimension > 1) {
if (Caster.toIntValue(dimension) > 1) {
throw new ApplicationException("multi dimensional arrays are not supported with typed arrays");
}
a = new ArrayTyped(type.trim());
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ public final class ArrayPush extends BIF {

private static final long serialVersionUID = -5673140457325547233L;

public static double call(PageContext pc, Array array, Object object) throws PageException {
public static Number call(PageContext pc, Array array, Object object) throws PageException {
// TODO need to be atomic
array.append(object);
return array.size();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,9 +32,9 @@ public final class ArrayResize extends BIF {

private static final long serialVersionUID = -3107784929660340665L;

public static boolean call(PageContext pc, Array array, double number) {
public static boolean call(PageContext pc, Array array, Number number) {
try {
array.resize((int) number);
array.resize(Caster.toIntValue(number));
return true;
}
catch (PageException e) {
Expand All @@ -45,7 +45,7 @@ public static boolean call(PageContext pc, Array array, double number) {

@Override
public Object invoke(PageContext pc, Object[] args) throws PageException {
if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toDoubleValue(args[1]));
if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toNumber(pc, args[1]));
else throw new FunctionException(pc, "ArrayResize", 2, 2, args.length);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,9 @@ public final class ArraySet extends BIF {

private static final long serialVersionUID = -7804363479876538167L;

public static boolean call(PageContext pc, Array array, double from, double to, Object value) throws PageException {
int f = (int) from;
int t = (int) to;
public static boolean call(PageContext pc, Array array, Number from, Number to, Object value) throws PageException {
int f = Caster.toIntValue(from);
int t = Caster.toIntValue(to);
if (f < 1) throw new ExpressionException("Start index of the function arraySet must be greater than zero; now [" + f + "]");
if (f > t) throw new ExpressionException("End index of the function arraySet must be greater than the Start index; now [start:" + f + ", end:" + t + "]");
if (array.getDimension() > 1)
Expand All @@ -50,7 +50,7 @@ public static boolean call(PageContext pc, Array array, double from, double to,

@Override
public Object invoke(PageContext pc, Object[] args) throws PageException {
if (args.length == 4) return call(pc, Caster.toArray(args[0]), Caster.toDoubleValue(args[1]), Caster.toDoubleValue(args[2]), args[3]);
if (args.length == 4) return call(pc, Caster.toArray(args[0]), Caster.toNumber(pc, args[1]), Caster.toNumber(pc, args[2]), args[3]);
else throw new FunctionException(pc, "ArraySet", 4, 4, args.length);
}
}
29 changes: 15 additions & 14 deletions core/src/main/java/lucee/runtime/functions/arrays/ArraySlice.java
Original file line number Diff line number Diff line change
Expand Up @@ -36,32 +36,33 @@ public final class ArraySlice extends BIF {

private static final long serialVersionUID = 7309769117464009924L;

public static Array call(PageContext pc, Array arr, double offset) throws PageException {
public static Array call(PageContext pc, Array arr, Number offset) throws PageException {
return call(pc, arr, offset, 0);
}

public static Array call(PageContext pc, Array arr, double offset, double length) throws PageException {
public static Array call(PageContext pc, Array arr, Number offset, Number length) throws PageException {
int off = Caster.toIntValue(offset);
int len = Caster.toIntValue(length);
int arrLen = arr.size();
if (arrLen == 0) throw new FunctionException(pc, "arraySlice", 1, "array", "Array cannot be empty");

int len = arr.size();
if (len == 0) throw new FunctionException(pc, "arraySlice", 1, "array", "Array cannot be empty");

if (offset > 0) {
if (len < offset) throw new FunctionException(pc, "arraySlice", 2, "offset", "Offset cannot be greater than size of the array");
if (off > 0) {
if (arrLen < off) throw new FunctionException(pc, "arraySlice", 2, "offset", "Offset cannot be greater than size of the array");

int to = 0;
if (length > 0) to = (int) (offset + length - 1);
else if (length < 0) to = (int) (len + length);
if (len < to) throw new FunctionException(pc, "arraySlice", 3, "length", "Offset+length cannot be greater than size of the array");
if (len > 0) to = off + len - 1;
else if (len < 0) to = arrLen + len;
if (arrLen < to) throw new FunctionException(pc, "arraySlice", 3, "length", "Offset+length cannot be greater than size of the array");

return get(arr, (int) offset, to);
return get(arr, off, to);
}
return call(pc, arr, len + offset, length);
return call(pc, arr, arrLen + off, len);
}

@Override
public Object invoke(PageContext pc, Object[] args) throws PageException {
if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toDoubleValue(args[1]));
else if (args.length == 3) return call(pc, Caster.toArray(args[0]), Caster.toDoubleValue(args[1]), Caster.toDoubleValue(args[2]));
if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toNumber(pc, args[1]));
else if (args.length == 3) return call(pc, Caster.toArray(args[0]), Caster.toNumber(pc, args[1]), Caster.toNumber(pc, args[2]));
else throw new FunctionException(pc, "ArraySlice", 2, 3, args.length);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ public static boolean call(PageContext pc, Array array, UDF udf, boolean paralle
return _call(pc, array, udf, parallel, 20);
}

public static boolean call(PageContext pc, Array array, UDF udf, boolean parallel, double maxThreads) throws PageException {
return _call(pc, array, udf, parallel, (int) maxThreads);
public static boolean call(PageContext pc, Array array, UDF udf, boolean parallel, Number maxThreads) throws PageException {
return _call(pc, array, udf, parallel, Caster.toIntValue(maxThreads));
}

private static boolean _call(PageContext pc, Array array, UDF udf, boolean parallel, int maxThreads) throws PageException {
Expand All @@ -52,7 +52,7 @@ private static boolean _call(PageContext pc, Array array, UDF udf, boolean paral
public Object invoke(PageContext pc, Object[] args) throws PageException {
if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toFunction(args[1]));
if (args.length == 3) return call(pc, Caster.toArray(args[0]), Caster.toFunction(args[1]), Caster.toBooleanValue(args[2]));
if (args.length == 4) return call(pc, Caster.toArray(args[0]), Caster.toFunction(args[1]), Caster.toBooleanValue(args[2]), Caster.toDoubleValue(args[3]));
if (args.length == 4) return call(pc, Caster.toArray(args[0]), Caster.toFunction(args[1]), Caster.toBooleanValue(args[2]), Caster.toNumber(pc, args[3]));

throw new FunctionException(pc, "ArraySome", 2, 4, args.length);

Expand Down
21 changes: 11 additions & 10 deletions core/src/main/java/lucee/runtime/functions/arrays/ArraySplice.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,23 +15,24 @@ public class ArraySplice extends BIF implements Function {

private static final long serialVersionUID = -8604228677976070247L;

public static Array call(PageContext pc, Array arr, double index) throws PageException {
public static Array call(PageContext pc, Array arr, Number index) throws PageException {
return call(pc, arr, index, -1, null);
}

public static Array call(PageContext pc, Array arr, double index, double len) throws PageException {
public static Array call(PageContext pc, Array arr, Number index, Number len) throws PageException {
return call(pc, arr, index, len, null);
}

public static Array call(PageContext pc, Array arr, double index, double length, Array replacements) throws PageException {
public static Array call(PageContext pc, Array arr, Number index, Number length, Array replacements) throws PageException {
Array removed = new ArrayImpl();

// check index
if (index < 1) index = arr.size() + index + 1;
else if (index > arr.size()) index = arr.size() + 1;
int idx = (int) index;
int idx = Caster.toIntValue(index);
if (idx < 1) idx = arr.size() + idx + 1;
else if (idx > arr.size()) idx = arr.size() + 1;

// check len
int len = (int) length;
int len = Caster.toIntValue(length);
if (len == -1) len = arr.size() - idx + 1;
else if (len < -1) len = 0; // stupid ut how acf works
else {
Expand All @@ -57,9 +58,9 @@ public static Array call(PageContext pc, Array arr, double index, double length,

@Override
public Object invoke(PageContext pc, Object[] args) throws PageException {
if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toDoubleValue(args[1]));
if (args.length == 3) return call(pc, Caster.toArray(args[0]), Caster.toDoubleValue(args[1]), Caster.toDoubleValue(args[2]));
if (args.length == 4) return call(pc, Caster.toArray(args[0]), Caster.toDoubleValue(args[1]), Caster.toDoubleValue(args[2]), Caster.toArray(args[3]));
if (args.length == 2) return call(pc, Caster.toArray(args[0]), Caster.toNumber(pc, args[1]));
if (args.length == 3) return call(pc, Caster.toArray(args[0]), Caster.toNumber(pc, args[1]), Caster.toNumber(pc, args[2]));
if (args.length == 4) return call(pc, Caster.toArray(args[0]), Caster.toNumber(pc, args[1]), Caster.toNumber(pc, args[2]), Caster.toArray(args[3]));

throw new FunctionException(pc, "ArraySplice", 2, 4, args.length);
}
Expand Down
Loading

0 comments on commit d86518a

Please sign in to comment.