Add default implementation of AbstractQueue.drain
authorMaciej Piechotka <uzytkownik2@gmail.com>
Sat, 7 Jan 2012 04:14:28 +0000 (05:14 +0100)
committerMaciej Piechotka <uzytkownik2@gmail.com>
Fri, 20 Jan 2012 16:21:24 +0000 (16:21 +0000)
gee/abstractqueue.vala

index ce3fc3d..8d80f32 100644 (file)
@@ -31,6 +31,13 @@ public abstract class Gee.AbstractQueue<G> : Gee.AbstractCollection<G>, Queue<G>
        /**
         * {@inheritDoc}
         */
+       public override bool add (G item) {
+               return offer (item);
+       }
+
+       /**
+        * {@inheritDoc}
+        */
        public abstract int capacity { get; }
 
        /**
@@ -61,5 +68,13 @@ public abstract class Gee.AbstractQueue<G> : Gee.AbstractCollection<G>, Queue<G>
        /**
         * {@inheritDoc}
         */
-       public abstract int drain (Collection<G> recipient, int amount = -1);
+       public virtual int drain (Collection<G> recipient, int amount = -1) {
+               G? item = null;
+               int drained = 0;
+               while((amount == -1 || --amount >= 0) && (item = poll ()) != null) {
+                       recipient.add(item);
+                       drained++;
+               }
+               return drained;
+       }
 }