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));
         }
     }

Reply via email to