Browse Source

Fix predicate bug for any() and no() functions

Billy Barrow 1 year ago
parent
commit
a61beea43a
1 changed files with 13 additions and 4 deletions
  1. 13 4
      src/lib/Enumerable.vala

+ 13 - 4
src/lib/Enumerable.vala

@@ -60,10 +60,11 @@ namespace Invercargill {
             return count;
             return count;
         }
         }
 
 
-        public virtual bool any(PredicateDelegate<T> predicate = (i) => true) {
+        public virtual bool any(PredicateDelegate<T>? predicate = null) {
             var result = false;
             var result = false;
+            var p = resolve_nullable_predicate(predicate);
             iterate_if(i => {
             iterate_if(i => {
-                if(predicate(i)) {
+                if(p(i)) {
                     result = true;
                     result = true;
                     return false;
                     return false;
                 }
                 }
@@ -77,8 +78,9 @@ namespace Invercargill {
             return !any(i => !predicate(i));
             return !any(i => !predicate(i));
         }
         }
 
 
-        public virtual bool no(PredicateDelegate<T> predicate = (i) => true) {
-            return all(i => !predicate(i));
+        public virtual bool no(PredicateDelegate<T>? predicate = null) {
+            var p = resolve_nullable_predicate(predicate);
+            return all(i => !p(i));
         }
         }
 
 
         public virtual Enumerable<T> where(owned PredicateDelegate<T> predicate) {
         public virtual Enumerable<T> where(owned PredicateDelegate<T> predicate) {
@@ -363,6 +365,13 @@ namespace Invercargill {
             }
             }
         }
         }
 
 
+        private PredicateDelegate<T> resolve_nullable_predicate(PredicateDelegate<T>? predicate) {
+            if(predicate == null) {
+                return (p) => true;
+            }
+            return predicate;
+        }
+
     }
     }
 
 
 }
 }