Kaynağa Gözat

optimize: CQuery#parallel / sequential

Ranides Atterwim 3 yıl önce
ebeveyn
işleme
e81964bab6

+ 8 - 8
assira.commons/src/main/java/net/ranides/assira/index/IQueryMapTree.java

@@ -120,7 +120,7 @@ public class IQueryMapTree<V> extends IQueryMapAbstract<V> {
     
     @Override
     public IQuery<V> find() {
-        return new TreeQuery();
+        return new IndexedQuery();
     }
 
     @SuppressWarnings("unchecked")
@@ -193,15 +193,15 @@ public class IQueryMapTree<V> extends IQueryMapAbstract<V> {
     }
 
     
-    private final class TreeQuery extends IQueryAbstract<V> {
+    private final class IndexedQuery extends IQueryAbstract<V> {
         
         private final List<Supplier<Collection<V>>> selectors;
 
-        public TreeQuery() {
+        public IndexedQuery() {
             this.selectors = Collections.emptyList();
         }
         
-        public TreeQuery(TreeQuery query, Supplier<Collection<V>> selector) {
+        public IndexedQuery(IndexedQuery query, Supplier<Collection<V>> selector) {
             this.selectors = new ArrayList<>(query.selectors.size()+1);
             this.selectors.addAll(query.selectors);
             this.selectors.add(selector);
@@ -279,17 +279,17 @@ public class IQueryMapTree<V> extends IQueryMapAbstract<V> {
 
         private <T> IQuery<V> addFilter(MultiSet<V> ci, boolean nullable, Supplier<Collection<V>> f) {
             if(nullable) {
-                return new TreeQuery(this, () -> merge(f.get(), ci.getAll(null)));
+                return new IndexedQuery(this, () -> merge(f.get(), ci.getAll(null)));
             } else {
-                return new TreeQuery(this, f);
+                return new IndexedQuery(this, f);
             }
         }
 
         private <T> IQuery<V> addFilter(MultiMap<Object, V> mi, boolean nullable, Supplier<Collection<V>> f) {
             if(nullable) {
-                return new TreeQuery(this, () -> merge(f.get(), mi.getAll(null)));
+                return new IndexedQuery(this, () -> merge(f.get(), mi.getAll(null)));
             } else {
-                return new TreeQuery(this, f);
+                return new IndexedQuery(this, f);
             }
         }
 

+ 2 - 2
assira.core/src/main/java/net/ranides/assira/collection/query/base/CQArray.java

@@ -98,12 +98,12 @@ public class CQArray<T> extends CQueryAbstract<T> {
 
     @Override
     public CQuery<T> parallel() {
-        return new CQArray<>(true, this);
+        return isParallel() ? this : new CQArray<>(true, this);
     }
 
     @Override
     public CQuery<T> sequential() {
-        return new CQArray<>(false, this);
+        return isParallel() ? new CQArray<>(false, this) : this;
     }
 
     private boolean isSlice() {

+ 2 - 2
assira.core/src/main/java/net/ranides/assira/collection/query/base/CQCollection.java

@@ -79,12 +79,12 @@ public class CQCollection<T> extends CQueryAbstract<T> {
 
     @Override
     public CQuery<T> parallel() {
-        return new CQCollection<>(true, data);
+        return isParallel() ? this : new CQCollection<>(true, data);
     }
 
     @Override
     public CQuery<T> sequential() {
-        return new CQCollection<>(false, data);
+        return isParallel() ? new CQCollection<>(false, data) : this;
     }
 
     @Override

+ 2 - 2
assira.core/src/main/java/net/ranides/assira/collection/query/base/CQList.java

@@ -81,12 +81,12 @@ public class CQList<T> extends CQueryAbstract<T> {
 
     @Override
     public CQuery<T> parallel() {
-        return new CQList<>(true, data);
+        return isParallel() ? this : new CQList<>(true, data);
     }
 
     @Override
     public CQuery<T> sequential() {
-        return new CQList<>(false, data);
+        return isParallel() ? new CQList<>(false, data) : this;
     }
 
     @Override

+ 2 - 2
assira.core/src/main/java/net/ranides/assira/collection/query/derived/CQFilter.java

@@ -49,12 +49,12 @@ public class CQFilter<T> extends CQAbstractFilter<T,T> {
 
     @Override
     public CQuery<T> parallel() {
-        return new CQFilter<>(source.parallel(), p);
+        return isParallel() ? this : new CQFilter<>(source.parallel(), p);
     }
 
     @Override
     public CQuery<T> sequential() {
-        return new CQFilter<>(source.sequential(), p);
+        return isParallel() ? new CQFilter<>(source.sequential(), p) : this;
     }
 
     @Override

+ 2 - 2
assira.core/src/main/java/net/ranides/assira/collection/query/derived/CQFilterEach.java

@@ -39,12 +39,12 @@ public class CQFilterEach<T> extends CQAbstractFilter<T, T> {
 
     @Override
     public CQuery<T> parallel() {
-        return new CQFilterEach<>(source.parallel(), p);
+        return isParallel() ? this : new CQFilterEach<>(source.parallel(), p);
     }
 
     @Override
     public CQuery<T> sequential() {
-        return new CQFilterEach<>(source.sequential(), p);
+        return isParallel() ? new CQFilterEach<>(source.sequential(), p) : this;
     }
 
     @Override

+ 2 - 2
assira.core/src/main/java/net/ranides/assira/collection/query/derived/CQLimit.java

@@ -39,12 +39,12 @@ public class CQLimit<T> extends CQAbstractFilter<T, T> {
 
     @Override
     public CQuery<T> parallel() {
-        return new CQLimit<>(source.parallel(), p);
+        return isParallel() ? this : new CQLimit<>(source.parallel(), p);
     }
 
     @Override
     public CQuery<T> sequential() {
-        return new CQLimit<>(source.sequential(), p);
+        return isParallel() ? new CQLimit<>(source.sequential(), p) : this;
     }
 
     @Override

+ 2 - 2
assira.core/src/main/java/net/ranides/assira/collection/query/derived/CQMap.java

@@ -66,12 +66,12 @@ public class CQMap<S,T> extends CQueryAbstract<T> {
 
     @Override
     public CQuery<T> parallel() {
-        return new CQMap<>(source.parallel(), function);
+        return isParallel() ? this : new CQMap<>(source.parallel(), function);
     }
 
     @Override
     public CQuery<T> sequential() {
-        return new CQMap<>(source.sequential(), function);
+        return isParallel() ? new CQMap<>(source.sequential(), function) : this;
     }
 
     @Override

+ 2 - 2
assira.core/src/main/java/net/ranides/assira/collection/query/derived/CQMapEach.java

@@ -68,12 +68,12 @@ public class CQMapEach<S,T> extends CQueryAbstract<T> {
 
     @Override
     public CQuery<T> parallel() {
-        return new CQMapEach<>(source.parallel(), function);
+        return isParallel() ? this : new CQMapEach<>(source.parallel(), function);
     }
 
     @Override
     public CQuery<T> sequential() {
-        return new CQMapEach<>(source.sequential(), function);
+        return isParallel() ? new CQMapEach<>(source.sequential(), function) : this;
     }
 
     @Override

+ 2 - 2
assira.core/src/main/java/net/ranides/assira/collection/query/derived/CQMapOptional.java

@@ -40,12 +40,12 @@ public class CQMapOptional<T, R> extends CQAbstractFilter<T, R> {
 
     @Override
     public CQuery<R> parallel() {
-        return new CQMapOptional<>(source.parallel(), f);
+        return isParallel() ? this : new CQMapOptional<>(source.parallel(), f);
     }
 
     @Override
     public CQuery<R> sequential() {
-        return new CQMapOptional<>(source.sequential(), f);
+        return isParallel() ? new CQMapOptional<>(source.sequential(), f) : this;
     }
 
     @Override

+ 2 - 2
assira.core/src/main/java/net/ranides/assira/collection/query/derived/CQSlice.java

@@ -73,12 +73,12 @@ public class CQSlice<T> extends CQueryAbstract<T> {
 
     @Override
     public CQuery<T> parallel() {
-        return new CQSlice<>(source.parallel(), begin, end);
+        return isParallel() ? this : new CQSlice<>(source.parallel(), begin, end);
     }
 
     @Override
     public CQuery<T> sequential() {
-        return new CQSlice<>(source.sequential(), begin, end);
+        return isParallel() ? new CQSlice<>(source.sequential(), begin, end) : this;
     }
 
     @Override