Repository: camel Updated Branches: refs/heads/master 7d17d44a4 -> 5c8fd80ad
Optimise - Make check if expression has simple start token quicker without object allocations needed. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/5c8fd80a Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/5c8fd80a Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/5c8fd80a Branch: refs/heads/master Commit: 5c8fd80ad4960db65a7c369d6d0524fc57155fd9 Parents: 7d17d44 Author: Claus Ibsen <davscl...@apache.org> Authored: Fri Jun 2 13:55:46 2017 +0200 Committer: Claus Ibsen <davscl...@apache.org> Committed: Fri Jun 2 13:55:46 2017 +0200 ---------------------------------------------------------------------- .../camel/language/simple/SimpleTokenizer.java | 27 ++++++++++++-------- 1 file changed, 16 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/5c8fd80a/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java ---------------------------------------------------------------------- diff --git a/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java b/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java index 7c3aa1b..ddb3ee4 100644 --- a/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java +++ b/camel-core/src/main/java/org/apache/camel/language/simple/SimpleTokenizer.java @@ -18,6 +18,7 @@ package org.apache.camel.language.simple; import java.util.List; import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.atomic.AtomicBoolean; import org.apache.camel.language.simple.types.SimpleToken; import org.apache.camel.language.simple.types.SimpleTokenType; @@ -32,6 +33,9 @@ public final class SimpleTokenizer { // use CopyOnWriteArrayList so we can modify it in the for loop when changing function start/end tokens private static final List<SimpleTokenType> KNOWN_TOKENS = new CopyOnWriteArrayList<SimpleTokenType>(); + // optimise to be able to quick check for start functions + private static final String[] FUNCTION_START = new String[]{"${", "$simple{"}; + static { // add known tokens KNOWN_TOKENS.add(new SimpleTokenType(TokenType.functionStart, "${")); @@ -93,16 +97,7 @@ public final class SimpleTokenizer { */ public static boolean hasFunctionStartToken(String expression) { if (expression != null) { - for (SimpleTokenType type : KNOWN_TOKENS) { - if (type.getType() == TokenType.functionStart) { - if (expression.contains(type.getValue())) { - return true; - } - } else { - // function start are always first - return false; - } - } + return expression.contains(FUNCTION_START[0]) || expression.contains(FUNCTION_START[1]); } return false; } @@ -117,8 +112,18 @@ public final class SimpleTokenizer { } } + if (startToken.length > 2) { + throw new IllegalArgumentException("At most 2 start tokens is allowed"); + } + + // reset + FUNCTION_START[0] = ""; + FUNCTION_START[1] = ""; + // add in start of list as its a more common token to be used - for (String token : startToken) { + for (int i = 0; i < startToken.length; i++) { + String token = startToken[i]; + FUNCTION_START[i] = token; KNOWN_TOKENS.add(0, new SimpleTokenType(TokenType.functionStart, token)); } }