mirror of
https://github.com/frode-carlsen/cron.git
synced 2025-12-06 14:00:57 +03:00
CronExpression.FieldPart use int rather than Integer
It is more expensive to perform operations on Integer objects rather than primitive int. Since an object is not needed use the primitive instead.
This commit is contained in:
@@ -20,6 +20,7 @@ package fc.cron;
|
|||||||
import java.time.*;
|
import java.time.*;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
@@ -256,9 +257,14 @@ public class CronExpression {
|
|||||||
return getClass().getSimpleName() + "<" + expr + ">";
|
return getClass().getSimpleName() + "<" + expr + ">";
|
||||||
}
|
}
|
||||||
|
|
||||||
static class FieldPart {
|
static class FieldPart implements Comparable<FieldPart> {
|
||||||
private Integer from, to, increment;
|
private int from = -1, to = -1, increment = -1;
|
||||||
private String modifier, incrementModifier;
|
private String modifier, incrementModifier;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int compareTo(FieldPart o) {
|
||||||
|
return Integer.compare(from, o.from);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
abstract static class BasicField {
|
abstract static class BasicField {
|
||||||
@@ -322,14 +328,15 @@ public class CronExpression {
|
|||||||
|
|
||||||
if (increment != null) {
|
if (increment != null) {
|
||||||
part.incrementModifier = incrementModifier;
|
part.incrementModifier = incrementModifier;
|
||||||
part.increment = Integer.valueOf(increment);
|
part.increment = Integer.parseInt(increment);
|
||||||
}
|
}
|
||||||
|
|
||||||
validateRange(part);
|
validateRange(part);
|
||||||
validatePart(part);
|
validatePart(part);
|
||||||
parts.add(part);
|
parts.add(part);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Collections.sort(parts);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void validatePart(FieldPart part) {
|
protected void validatePart(FieldPart part) {
|
||||||
@@ -341,10 +348,10 @@ public class CronExpression {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private void validateRange(FieldPart part) {
|
private void validateRange(FieldPart part) {
|
||||||
if ((part.from != null && part.from < fieldType.from) || (part.to != null && part.to > fieldType.to)) {
|
if ((part.from != -1 && part.from < fieldType.from) || (part.to != -1 && part.to > fieldType.to)) {
|
||||||
throw new IllegalArgumentException(String.format("Invalid interval [%s-%s], must be %s<=_<=%s", part.from, part.to, fieldType.from,
|
throw new IllegalArgumentException(String.format("Invalid interval [%s-%s], must be %s<=_<=%s", part.from, part.to, fieldType.from,
|
||||||
fieldType.to));
|
fieldType.to));
|
||||||
} else if (part.from != null && part.to != null && part.from > part.to) {
|
} else if (part.from != -1 && part.to != -1 && part.from > part.to) {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
String.format(
|
String.format(
|
||||||
"Invalid interval [%s-%s]. Rolling periods are not supported (ex. 5-1, only 1-5) since this won't give a deterministic result. Must be %s<=_<=%s",
|
"Invalid interval [%s-%s]. Rolling periods are not supported (ex. 5-1, only 1-5) since this won't give a deterministic result. Must be %s<=_<=%s",
|
||||||
@@ -352,12 +359,12 @@ public class CronExpression {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Integer mapValue(String value) {
|
protected int mapValue(String value) {
|
||||||
Integer idx;
|
int idx;
|
||||||
if (fieldType.names != null && (idx = fieldType.names.indexOf(value.toUpperCase(Locale.getDefault()))) >= 0) {
|
if (fieldType.names != null && (idx = fieldType.names.indexOf(value.toUpperCase(Locale.getDefault()))) >= 0) {
|
||||||
return idx + 1;
|
return idx + fieldType.from;
|
||||||
}
|
}
|
||||||
return Integer.valueOf(value);
|
return Integer.parseInt(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected boolean matches(int val, FieldPart part) {
|
protected boolean matches(int val, FieldPart part) {
|
||||||
@@ -410,9 +417,9 @@ public class CronExpression {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected Integer mapValue(String value) {
|
protected int mapValue(String value) {
|
||||||
// Use 1-7 for weedays, but 0 will also represent sunday (linux practice)
|
// Use 1-7 for weedays, but 0 will also represent sunday (linux practice)
|
||||||
return "0".equals(value) ? Integer.valueOf(7) : super.mapValue(value);
|
return "0".equals(value) ? 7 : super.mapValue(value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -439,7 +446,7 @@ public class CronExpression {
|
|||||||
for (FieldPart part : parts) {
|
for (FieldPart part : parts) {
|
||||||
if ("L".equals(part.modifier)) {
|
if ("L".equals(part.modifier)) {
|
||||||
YearMonth ym = YearMonth.of(dato.getYear(), dato.getMonth().getValue());
|
YearMonth ym = YearMonth.of(dato.getYear(), dato.getMonth().getValue());
|
||||||
return dato.getDayOfMonth() == (ym.lengthOfMonth() - (part.from == null ? 0 : part.from));
|
return dato.getDayOfMonth() == (ym.lengthOfMonth() - (part.from == -1 ? 0 : part.from));
|
||||||
} else if ("W".equals(part.modifier)) {
|
} else if ("W".equals(part.modifier)) {
|
||||||
if (dato.getDayOfWeek().getValue() <= 5) {
|
if (dato.getDayOfWeek().getValue() <= 5) {
|
||||||
if (dato.getDayOfMonth() == part.from) {
|
if (dato.getDayOfMonth() == part.from) {
|
||||||
|
|||||||
Reference in New Issue
Block a user