Kaynağa Gözat

Add convert function

Billy Barrow 10 ay önce
ebeveyn
işleme
ccf7a290ed
2 değiştirilmiş dosya ile 20 ekleme ve 0 silme
  1. 8 0
      src/lib/Concrete/ProxyEnumerable.vala
  2. 12 0
      src/lib/Enumerable.vala

+ 8 - 0
src/lib/Concrete/ProxyEnumerable.vala

@@ -221,6 +221,14 @@ namespace Invercargill {
             return inner.cache();
         }
 
+        public override Enumerable<Tout> convert<Tout>(owned ErrorTransformDelegate<T, Tout> transform) throws Error {
+            return convert<Tout>(transform);
+        }
+
+        public override Enumerable<Tout> convert_many<Tout>(owned ErrorTransformDelegate<T, Enumerable<Tout>> transform) throws Error {
+            return convert_many<Tout>(transform);
+        }
+
     }
 
 }

+ 12 - 0
src/lib/Enumerable.vala

@@ -443,6 +443,18 @@ namespace Invercargill {
             return series;
         }
 
+        public virtual Enumerable<Tout> convert<Tout>(owned ErrorTransformDelegate<T, Tout> transform) throws Error {
+            var series = new Series<Tout>();
+            foreach (var item in this) {
+                series.add(transform(item));
+            }
+            return series.seal();
+        }
+
+        public virtual Enumerable<Tout> convert_many<Tout>(owned ErrorTransformDelegate<T, Enumerable<Tout>> transform) throws Error {
+            return convert<Enumerable<Tout>>(i => transform(i)).select_many(i => i);
+        }
+
         private PredicateDelegate<T> resolve_nullable_predicate(PredicateDelegate<T>? predicate) {
             if(predicate == null) {
                 return (p) => true;