You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2021/03/14 18:19:47 UTC

[camel] 01/04: camel-core - Small optimization on Choice EIP

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 557efba1617d15082a7f6fb6b81c48102e7d23f7
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Mar 14 17:36:13 2021 +0100

    camel-core - Small optimization on Choice EIP
---
 .../apache/camel/processor/ChoiceProcessor.java    | 32 +++++++++++++---------
 1 file changed, 19 insertions(+), 13 deletions(-)

diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/ChoiceProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/ChoiceProcessor.java
index bf11759..6fce791 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/ChoiceProcessor.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/ChoiceProcessor.java
@@ -17,6 +17,7 @@
 package org.apache.camel.processor;
 
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.List;
 
 import org.apache.camel.AsyncCallback;
@@ -46,12 +47,15 @@ public class ChoiceProcessor extends AsyncProcessorSupport implements Navigate<P
 
     private String id;
     private String routeId;
-    private final List<FilterProcessor> filters;
+    // optimize to use an array
+    private final FilterProcessor[] filters;
+    private final int len;
     private final AsyncProcessor otherwise;
     private transient long notFiltered;
 
     public ChoiceProcessor(List<FilterProcessor> filters, Processor otherwise) {
-        this.filters = filters;
+        this.filters = filters.toArray(new FilterProcessor[0]);
+        this.len = filters.size();
         this.otherwise = otherwise != null ? AsyncProcessorConverterHelper.convert(otherwise) : null;
     }
 
@@ -72,7 +76,8 @@ public class ChoiceProcessor extends AsyncProcessorSupport implements Navigate<P
         };
 
         // find the first matching filter and process the exchange using it
-        for (FilterProcessor filter : filters) {
+        for (int i = 0; i < len; i++) {
+            FilterProcessor filter = filters[i];
             // evaluate the predicate on filter predicate early to be faster
             // and avoid issues when having nested choices
             // as we should only pick one processor
@@ -121,7 +126,7 @@ public class ChoiceProcessor extends AsyncProcessorSupport implements Navigate<P
     }
 
     public List<FilterProcessor> getFilters() {
-        return filters;
+        return Arrays.asList(filters);
     }
 
     public Processor getOtherwise() {
@@ -139,8 +144,8 @@ public class ChoiceProcessor extends AsyncProcessorSupport implements Navigate<P
      * Reset counters.
      */
     public void reset() {
-        for (FilterProcessor filter : filters) {
-            filter.reset();
+        for (int i = 0; i < len; i++) {
+            filters[i].reset();
         }
         notFiltered = 0;
     }
@@ -151,8 +156,8 @@ public class ChoiceProcessor extends AsyncProcessorSupport implements Navigate<P
             return null;
         }
         List<Processor> answer = new ArrayList<>();
-        if (!filters.isEmpty()) {
-            answer.addAll(filters);
+        if (len > 0) {
+            answer.addAll(Arrays.asList(filters));
         }
         if (otherwise != null) {
             answer.add(otherwise);
@@ -162,7 +167,7 @@ public class ChoiceProcessor extends AsyncProcessorSupport implements Navigate<P
 
     @Override
     public boolean hasNext() {
-        return otherwise != null || !filters.isEmpty();
+        return otherwise != null || len > 0;
     }
 
     @Override
@@ -187,21 +192,22 @@ public class ChoiceProcessor extends AsyncProcessorSupport implements Navigate<P
 
     @Override
     protected void doInit() throws Exception {
-        ServiceHelper.initService(filters, otherwise);
+        ServiceHelper.initService(Arrays.asList(filters), otherwise);
     }
 
     @Override
     protected void doStart() throws Exception {
-        ServiceHelper.startService(filters, otherwise);
+        ServiceHelper.startService(Arrays.asList(filters), otherwise);
     }
 
     @Override
     protected void doStop() throws Exception {
-        ServiceHelper.stopService(otherwise, filters);
+        ServiceHelper.stopService(otherwise, Arrays.asList(filters));
     }
 
     @Override
     protected void doShutdown() throws Exception {
-        ServiceHelper.stopAndShutdownServices(otherwise, filters);
+        ServiceHelper.stopAndShutdownServices(otherwise, Arrays.asList(filters));
     }
+
 }