Browse Source

Convert ints that logically can't go negative to uints

Billy Barrow 4 ngày trước cách đây
mục cha
commit
614a4ea2b5
65 tập tin đã thay đổi với 154 bổ sung130 xóa
  1. 2 2
      src/lib/Composition.vala
  2. 2 2
      src/lib/DataStructures/Buffer.vala
  3. 1 1
      src/lib/DataStructures/Dictionary.vala
  4. 1 1
      src/lib/DataStructures/Fifo.vala
  5. 1 1
      src/lib/DataStructures/HashSet.vala
  6. 2 2
      src/lib/DataStructures/ImmutableBuffer.vala
  7. 1 1
      src/lib/DataStructures/Lifo.vala
  8. 1 1
      src/lib/DataStructures/PriorityQueue.vala
  9. 2 2
      src/lib/DataStructures/RingBuffer.vala
  10. 1 1
      src/lib/DataStructures/Series.vala
  11. 1 1
      src/lib/DataStructures/SortedSeries.vala
  12. 1 1
      src/lib/DataStructures/SortedVector.vala
  13. 2 2
      src/lib/DataStructures/Vector.vala
  14. 1 1
      src/lib/Debug.vala
  15. 14 10
      src/lib/Enumerable.vala
  16. 1 1
      src/lib/EnumerableInfo.vala
  17. 1 1
      src/lib/Generators/Deferred.vala
  18. 1 1
      src/lib/Generators/Directory.vala
  19. 1 1
      src/lib/Generators/Empty.vala
  20. 1 1
      src/lib/Generators/Function.vala
  21. 1 1
      src/lib/Generators/Range.vala
  22. 1 1
      src/lib/Modifiers/Cache.vala
  23. 3 3
      src/lib/Modifiers/Chunk.vala
  24. 1 1
      src/lib/Modifiers/Concat.vala
  25. 3 3
      src/lib/Modifiers/Cycle.vala
  26. 1 1
      src/lib/Modifiers/Difference.vala
  27. 1 1
      src/lib/Modifiers/Filter.vala
  28. 1 1
      src/lib/Modifiers/FilterTransform.vala
  29. 1 1
      src/lib/Modifiers/Fork.vala
  30. 1 1
      src/lib/Modifiers/From.vala
  31. 1 1
      src/lib/Modifiers/GroupSequential.vala
  32. 1 1
      src/lib/Modifiers/Interleave.vala
  33. 1 1
      src/lib/Modifiers/Intersect.vala
  34. 1 1
      src/lib/Modifiers/Merge.vala
  35. 1 1
      src/lib/Modifiers/Order.vala
  36. 2 2
      src/lib/Modifiers/Padding.vala
  37. 1 1
      src/lib/Modifiers/ParallelFilter.vala
  38. 1 1
      src/lib/Modifiers/ParallelTransform.vala
  39. 1 1
      src/lib/Modifiers/Position.vala
  40. 1 1
      src/lib/Modifiers/Reverse.vala
  41. 1 1
      src/lib/Modifiers/Scanner.vala
  42. 4 4
      src/lib/Modifiers/Skip.vala
  43. 4 4
      src/lib/Modifiers/SkipLast.vala
  44. 1 1
      src/lib/Modifiers/Sort.vala
  45. 1 1
      src/lib/Modifiers/SymmetricDifference.vala
  46. 4 4
      src/lib/Modifiers/Take.vala
  47. 4 4
      src/lib/Modifiers/TakeLast.vala
  48. 1 1
      src/lib/Modifiers/Transform.vala
  49. 1 1
      src/lib/Modifiers/Union.vala
  50. 1 1
      src/lib/Modifiers/Unique.vala
  51. 1 1
      src/lib/Modifiers/Until.vala
  52. 1 1
      src/lib/Modifiers/Window.vala
  53. 2 2
      src/lib/Modifiers/Zip.vala
  54. 13 13
      src/lib/Promotions/Numbers/Implementations.vala
  55. 1 1
      src/lib/Promotions/Numbers/Numbers.vala
  56. 6 6
      src/lib/Proxy.vala
  57. 2 2
      src/lib/StickyProxy.vala
  58. 1 1
      src/lib/Wrappers/Array.vala
  59. 1 1
      src/lib/Wrappers/GeeIterable.vala
  60. 1 1
      src/lib/Wrappers/GenericArray.vala
  61. 1 1
      src/tests/Integration/Cache.vala
  62. 24 4
      src/tests/Integration/EnumerableMethods.vala
  63. 7 7
      src/tests/Integration/PriorityQueue.vala
  64. 2 2
      src/tests/Integration/Set.vala
  65. 6 6
      src/tests/Integration/SortedSeries.vala

+ 2 - 2
src/lib/Composition.vala

@@ -9,8 +9,8 @@ namespace Invercargill {
             return enumerables.select_many<T>(i => i).get_tracker();
         }
 
-        public override int? peek_count () {
-            var count = 0;
+        public override uint? peek_count () {
+            uint count = 0;
             foreach (var enumerable in enumerables) {
                 var peek = enumerable.peek_count();
                 if(peek == null) {

+ 2 - 2
src/lib/DataStructures/Buffer.vala

@@ -15,7 +15,7 @@ namespace Invercargill.DataStructures {
             }
             return new LambdaTracker<T> (() => pos < array.length, () => read(array, pos++));
         }
-        public override int? peek_count () {
+        public override uint? peek_count () {
             return array.length;
         }
         public override EnumerableInfo get_info () {
@@ -79,7 +79,7 @@ namespace Invercargill.DataStructures {
             return null;
         }
 
-        public override int count(PredicateDelegate<T>? predicate = null) {
+        public override uint count(PredicateDelegate<T>? predicate = null) {
             if(predicate == null) {
                 return array.length;
             }

+ 1 - 1
src/lib/DataStructures/Dictionary.vala

@@ -7,7 +7,7 @@ namespace Invercargill.DataStructures {
         private HashDelegate<TKey> hash_func;
         private EqualityDelegate<TKey> equal_func;
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return hash_set.peek_count();
         }
 

+ 1 - 1
src/lib/DataStructures/Fifo.vala

@@ -9,7 +9,7 @@ namespace Invercargill.DataStructures {
         private FifoItem<T>* first_item = null;
         private FifoItem<T>* last_item = null;
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return null;
         }
 

+ 1 - 1
src/lib/DataStructures/HashSet.vala

@@ -75,7 +75,7 @@ namespace Invercargill.DataStructures {
             return hash % n_buckets;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return n_items;
         }
 

+ 2 - 2
src/lib/DataStructures/ImmutableBuffer.vala

@@ -14,7 +14,7 @@ namespace Invercargill.DataStructures {
             }
             return new LambdaTracker<T> (() => pos < array.length, () => read(array, pos++));
         }
-        public override int? peek_count () {
+        public override uint? peek_count () {
             return array.length;
         }
         public override EnumerableInfo get_info () {
@@ -60,7 +60,7 @@ namespace Invercargill.DataStructures {
             return null;
         }
 
-        public override int count(PredicateDelegate<T>? predicate = null) {
+        public override uint count(PredicateDelegate<T>? predicate = null) {
             if(predicate == null) {
                 return array.length;
             }

+ 1 - 1
src/lib/DataStructures/Lifo.vala

@@ -10,7 +10,7 @@ namespace Invercargill.DataStructures {
         private bool is_blocking = true;
         private LifoItem<T>* top_item = null;
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return null;
         }
 

+ 1 - 1
src/lib/DataStructures/PriorityQueue.vala

@@ -14,7 +14,7 @@ namespace Invercargill.DataStructures {
             this.compare_func = (owned)compare_func;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             mutex.lock();
             var count = (int)items.length;
             mutex.unlock();

+ 2 - 2
src/lib/DataStructures/RingBuffer.vala

@@ -11,7 +11,7 @@ namespace Invercargill.DataStructures {
             int pos = 0;
             return new LambdaTracker<T> (() => array.length > 0, () => safe_read(array, pos++ % array.length));
         }
-        public override int? peek_count () {
+        public override uint? peek_count () {
             return null; // Technically infinate if iterated
         }
         public override EnumerableInfo get_info () {
@@ -80,7 +80,7 @@ namespace Invercargill.DataStructures {
             return null;
         }
 
-        public override int count(PredicateDelegate<T>? predicate = null) {
+        public override uint count(PredicateDelegate<T>? predicate = null) {
             if(predicate == null) {
                 return array.length;
             }

+ 1 - 1
src/lib/DataStructures/Series.vala

@@ -18,7 +18,7 @@ namespace Invercargill.DataStructures {
 
         public Series() {}
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return n_items;
         }
 

+ 1 - 1
src/lib/DataStructures/SortedSeries.vala

@@ -73,7 +73,7 @@ namespace Invercargill.DataStructures {
             }
             return new TreeTracker<T>(this);  
         }
-        public override int? peek_count () {
+        public override uint? peek_count () {
             return n_items;
         }
         public override EnumerableInfo get_info () {

+ 1 - 1
src/lib/DataStructures/SortedVector.vala

@@ -11,7 +11,7 @@ namespace Invercargill.DataStructures {
             vector = new Vector<T>();
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return vector.count();
         }
 

+ 2 - 2
src/lib/DataStructures/Vector.vala

@@ -17,11 +17,11 @@ namespace Invercargill.DataStructures {
             safe_write = get_safe_write_function_for<T>();
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return n_items;
         }
 
-        public override int count(PredicateDelegate<T>? predicate = null) {
+        public override uint count(PredicateDelegate<T>? predicate = null) {
             if(predicate == null) {
                 return n_items;
             }

+ 1 - 1
src/lib/Debug.vala

@@ -172,7 +172,7 @@ namespace Invercargill {
             DebugPrinter.print_trace_registration(info, additional_message, output_func, formatting);
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             var count = input.peek_count();
             var str = count == null ? "NULL" : count.to_string();
             DebugPrinter.print_trace_debug_message(@"peek_count() returned value $str", additional_message, output_func, formatting);

+ 14 - 10
src/lib/Enumerable.vala

@@ -7,7 +7,7 @@ namespace Invercargill {
     public abstract class Enumerable<T> : Object {
 
         public abstract Tracker<T> get_tracker();
-        public abstract int? peek_count();
+        public abstract uint? peek_count();
         public abstract EnumerableInfo get_info();
 
         // Returns false if iteration was interrupted
@@ -83,7 +83,7 @@ namespace Invercargill {
             return buffer;
         }
 
-        public virtual int count(PredicateDelegate<T>? predicate = null) {
+        public virtual uint count(PredicateDelegate<T>? predicate = null) {
             var enumerable = this;
             // When no predicate is passed, see if we can peek at the count of
             // the enumerable before iterating.
@@ -97,7 +97,7 @@ namespace Invercargill {
                 enumerable = this.where(predicate);
             }
 
-            var count = 0;
+            uint count = 0;
             enumerable.iterate(i => count++);
             return count;
         }
@@ -212,19 +212,19 @@ namespace Invercargill {
             return new Concat<T>(this, other);
         }
 
-        public virtual Enumerable<T> take(int count) {
+        public virtual Enumerable<T> take(uint count) {
             return new Take<T>(this, count);
         }
 
-        public virtual Enumerable<T> skip(int count) {
+        public virtual Enumerable<T> skip(uint count) {
             return new Skip<T>(this, count);
         }
 
-        public virtual Enumerable<T> skip_last(int count) {
+        public virtual Enumerable<T> skip_last(uint count) {
             return new Modifiers.SkipLast<T>(this, count);
         }
 
-        public virtual Enumerable<T> take_last(int count) {
+        public virtual Enumerable<T> take_last(uint count) {
             return new Modifiers.TakeLast<T>(this, count);
         }
 
@@ -411,10 +411,14 @@ namespace Invercargill {
             return non_common_by<T>(other, i => i, (owned)hash_func, (owned) equal_func);
         }
 
-        public virtual Enumerable<T> @with(T item, uint times = 1) {
+        public virtual Enumerable<T> suffix_with(T item, uint times = 1) {
             return concat(range(0, (int)times, 1).select<T>(i => item));
         }
 
+        public virtual Enumerable<T> prefix_with(T item, uint times = 1) {
+            return range(0, (int)times, 1).select<T>(i => item).concat(this);
+        }
+
         public virtual Partition<T> partition(PredicateDelegate<T> test) {
             return new Partition<T>(this, test);
         }
@@ -632,11 +636,11 @@ namespace Invercargill {
             return this;
         }
 
-        public virtual Enumerable<Enumerable<T>> chunk(int chunk_size) {
+        public virtual Enumerable<Enumerable<T>> chunk(uint chunk_size) {
             return new Chunk<T>(this, chunk_size);
         }
 
-        public virtual Enumerable<T> cycle(int cycles = -1) {
+        public virtual Enumerable<T> cycle(uint cycles = -1) {
             return new Cycle<T>(this, cycles);
         }
 

+ 1 - 1
src/lib/EnumerableInfo.vala

@@ -3,7 +3,7 @@ namespace Invercargill {
 
     public class EnumerableInfo {
 
-        public int? count { get; private set; }
+        public uint? count { get; private set; }
         public Type enumerable_type { get; private set; }
         public Type element_type { get; private set; }
         public EnumerableCategory category { get; private set; }

+ 1 - 1
src/lib/Generators/Deferred.vala

@@ -14,7 +14,7 @@ namespace Invercargill.Generators {
         public override Tracker<T> get_tracker () {
             return deferred_func().get_tracker ();
         }
-        public override int? peek_count () {
+        public override uint? peek_count () {
             return null;
         }
         public override EnumerableInfo get_info () {

+ 1 - 1
src/lib/Generators/Directory.vala

@@ -9,7 +9,7 @@ namespace Invercargill.Generators {
             this.dir = (owned)dir;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return null;
         }
 

+ 1 - 1
src/lib/Generators/Empty.vala

@@ -3,7 +3,7 @@ namespace Invercargill.Generators {
 
     public class Empty<T> : Enumerable<T> {
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return 0;
         }
 

+ 1 - 1
src/lib/Generators/Function.vala

@@ -4,7 +4,7 @@ namespace Invercargill.Generators {
 
     public class Function<T> : Enumerable<T> {
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return null;
         }
 

+ 1 - 1
src/lib/Generators/Range.vala

@@ -13,7 +13,7 @@ namespace Invercargill.Generators {
             this.stride = stride;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return (stop - start) / stride;
         }
 

+ 1 - 1
src/lib/Modifiers/Cache.vala

@@ -13,7 +13,7 @@ namespace Invercargill.Modifiers {
             vector = new Vector<T>();
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return inner.peek_count();
         }
 

+ 3 - 3
src/lib/Modifiers/Chunk.vala

@@ -1,15 +1,15 @@
 namespace Invercargill.Modifiers {
 
     public class Chunk<T> : Enumerable<Enumerable<T>> {
-        private int chunk_size;
+        private uint chunk_size;
         private Enumerable<T> input;
 
-        public Chunk(Enumerable<T> input, int chunk_size) {
+        public Chunk(Enumerable<T> input, uint chunk_size) {
             this.input = input;
             this.chunk_size = chunk_size;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             var inner = input.peek_count();
             if(inner == null) {
                 return null;

+ 1 - 1
src/lib/Modifiers/Concat.vala

@@ -11,7 +11,7 @@ namespace Invercargill.Modifiers {
             e2 = second;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             var c1 = e1.peek_count();
             var c2 = e2.peek_count();
             if(c1 == null || c2 == null)

+ 3 - 3
src/lib/Modifiers/Cycle.vala

@@ -1,15 +1,15 @@
 namespace Invercargill.Modifiers {
 
     public class Cycle<T> : Enumerable<T> {
-        private int cycles;
+        private uint cycles;
         private Enumerable<T> input;
 
-        public Cycle(Enumerable<T> input, int cycles = -1) {
+        public Cycle(Enumerable<T> input, uint cycles = -1) {
             this.input = input;
             this.cycles = cycles;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             var inner = input.peek_count();
             if(inner == null || cycles < 0) {
                 return null;

+ 1 - 1
src/lib/Modifiers/Difference.vala

@@ -18,7 +18,7 @@ namespace Invercargill.Modifiers {
             key_hf = (owned)key_hasher ?? Operators.hash<TKey>();
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return null;
         }
 

+ 1 - 1
src/lib/Modifiers/Filter.vala

@@ -9,7 +9,7 @@ namespace Invercargill.Modifiers {
             predicate_func = (owned)func;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return null;
         }
 

+ 1 - 1
src/lib/Modifiers/FilterTransform.vala

@@ -9,7 +9,7 @@ namespace Invercargill.Modifiers {
             transform_func = (owned)func;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return null;
         }
 

+ 1 - 1
src/lib/Modifiers/Fork.vala

@@ -13,7 +13,7 @@ namespace Invercargill.Modifiers {
             this.use_first = true;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             var c = input.peek_count();
             if(c == null)
                 return null;

+ 1 - 1
src/lib/Modifiers/From.vala

@@ -9,7 +9,7 @@ namespace Invercargill.Modifiers {
             predicate_func = (owned)func;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return null;
         }
 

+ 1 - 1
src/lib/Modifiers/GroupSequential.vala

@@ -11,7 +11,7 @@ namespace Invercargill.Modifiers {
             this.equal_func = (owned)equal_func ?? Operators.equality<TKey>();
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return null;
         }
 

+ 1 - 1
src/lib/Modifiers/Interleave.vala

@@ -10,7 +10,7 @@ namespace Invercargill.Modifiers {
             e2 = en2;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             var c1 = e1.peek_count();
             var c2 = e2.peek_count();
             if(c1 == null || c2 == null)

+ 1 - 1
src/lib/Modifiers/Intersect.vala

@@ -18,7 +18,7 @@ namespace Invercargill.Modifiers {
             key_hf = (owned)key_hasher ?? Operators.hash<TKey>();
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return null;
         }
 

+ 1 - 1
src/lib/Modifiers/Merge.vala

@@ -10,7 +10,7 @@ namespace Invercargill.Modifiers {
             return input.iterate_if(i => i.iterate_if(handler));
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return null;
         }
 

+ 1 - 1
src/lib/Modifiers/Order.vala

@@ -18,7 +18,7 @@ namespace Invercargill.Modifiers {
             }
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return input.peek_count();
         }
 

+ 2 - 2
src/lib/Modifiers/Padding.vala

@@ -11,12 +11,12 @@ namespace Invercargill.Modifiers {
             this.pad_item = pad_item;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             var inner = input.peek_count();
             if(inner == null) {
                 return null;
             }
-            return int.max(inner, (int)min_length);
+            return uint.max(inner, min_length);
         }
 
         public override EnumerableInfo get_info() {

+ 1 - 1
src/lib/Modifiers/ParallelFilter.vala

@@ -12,7 +12,7 @@ namespace Invercargill.Modifiers {
             this.predicate = (owned)predicate;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return input.peek_count();
         }
 

+ 1 - 1
src/lib/Modifiers/ParallelTransform.vala

@@ -12,7 +12,7 @@ namespace Invercargill.Modifiers {
             transform_func = (owned)transform;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return input.peek_count();
         }
 

+ 1 - 1
src/lib/Modifiers/Position.vala

@@ -7,7 +7,7 @@ namespace Invercargill.Modifiers {
             this.input = input;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return input.peek_count();
         }
 

+ 1 - 1
src/lib/Modifiers/Reverse.vala

@@ -7,7 +7,7 @@ namespace Invercargill.Modifiers {
             this.input = input;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return input.peek_count();
         }
 

+ 1 - 1
src/lib/Modifiers/Scanner.vala

@@ -11,7 +11,7 @@ namespace Invercargill.Modifiers {
             this.aggregating_func = (owned)aggregating_func;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return input.peek_count();
         }
 

+ 4 - 4
src/lib/Modifiers/Skip.vala

@@ -3,18 +3,18 @@ namespace Invercargill.Modifiers {
     public class Skip<T> : Enumerable<T> {
 
         private Enumerable<T> input;
-        private int n_items {get; set;}
+        private uint n_items {get; set;}
 
-        public Skip(Enumerable<T> input, int skip) {
+        public Skip(Enumerable<T> input, uint skip) {
             this.input = input;
             n_items = skip;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             var c = input.peek_count();
             if(c == null)
                 return null;
-            return int.max(0, c - n_items);
+            return uint.max(0, c - n_items);
         }
 
         public override EnumerableInfo get_info() {

+ 4 - 4
src/lib/Modifiers/SkipLast.vala

@@ -3,18 +3,18 @@ namespace Invercargill.Modifiers {
     public class SkipLast<T> : Enumerable<T> {
 
         private Enumerable<T> input;
-        private int n_items {get; set;}
+        private uint n_items {get; set;}
 
-        public SkipLast(Enumerable<T> input, int skip) {
+        public SkipLast(Enumerable<T> input, uint skip) {
             this.input = input;
             n_items = skip;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             var c = input.peek_count();
             if(c == null)
                 return null;
-            return int.max(0, c - n_items);
+            return uint.max(0, c - n_items);
         }
 
         public override EnumerableInfo get_info() {

+ 1 - 1
src/lib/Modifiers/Sort.vala

@@ -9,7 +9,7 @@ namespace Invercargill.Modifiers {
             compare_func = (owned)compare;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return input.peek_count();
         }
 

+ 1 - 1
src/lib/Modifiers/SymmetricDifference.vala

@@ -18,7 +18,7 @@ namespace Invercargill.Modifiers {
             key_hf = (owned)key_hasher ?? Operators.hash<TKey>();
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return null;
         }
 

+ 4 - 4
src/lib/Modifiers/Take.vala

@@ -2,18 +2,18 @@ namespace Invercargill.Modifiers {
 
     public class Take<T> : Enumerable<T> {
         private Enumerable<T> input;
-        private int n_items {get; set;}
+        private uint n_items {get; set;}
 
-        public Take(Enumerable<T> input, int count) {
+        public Take(Enumerable<T> input, uint count) {
             this.input = input;
             n_items = count;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             var c = input.peek_count();
             if(c == null)
                 return null;
-            return int.min(c, n_items);
+            return uint.min(c, n_items);
         }
 
         public override EnumerableInfo get_info() {

+ 4 - 4
src/lib/Modifiers/TakeLast.vala

@@ -3,18 +3,18 @@ namespace Invercargill.Modifiers {
 
     public class TakeLast<T> : Enumerable<T> {
         private Enumerable<T> input;
-        private int n_items {get; set;}
+        private uint n_items {get; set;}
 
-        public TakeLast(Enumerable<T> input, int count) {
+        public TakeLast(Enumerable<T> input, uint count) {
             this.input = input;
             n_items = count;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             var c = input.peek_count();
             if(c == null)
                 return null;
-            return int.min(c, n_items);
+            return uint.min(c, n_items);
         }
 
         public override EnumerableInfo get_info() {

+ 1 - 1
src/lib/Modifiers/Transform.vala

@@ -9,7 +9,7 @@ namespace Invercargill.Modifiers {
             transform_func = (owned)transform;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return input.peek_count();
         }
 

+ 1 - 1
src/lib/Modifiers/Union.vala

@@ -18,7 +18,7 @@ namespace Invercargill.Modifiers {
             key_hf = (owned)key_hasher ?? Operators.hash<TKey>();
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return null;
         }
 

+ 1 - 1
src/lib/Modifiers/Unique.vala

@@ -12,7 +12,7 @@ namespace Invercargill.Modifiers {
             this.selector = (owned)selector;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return null;
         }
 

+ 1 - 1
src/lib/Modifiers/Until.vala

@@ -9,7 +9,7 @@ namespace Invercargill.Modifiers {
             predicate_func = (owned)func;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return null;
         }
 

+ 1 - 1
src/lib/Modifiers/Window.vala

@@ -9,7 +9,7 @@ namespace Invercargill.Modifiers {
             this.window_size = window_size;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             var result = input.peek_count();
             if(result == null){
                 return null;

+ 2 - 2
src/lib/Modifiers/Zip.vala

@@ -12,12 +12,12 @@ namespace Invercargill.Modifiers {
             transform_func = (owned)func;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             var c1 = e1.peek_count();
             var c2 = e2.peek_count();
             if(c1 == null || c2 == null)
                 return null;
-            return int.max(c1, c2);
+            return uint.max(c1, c2);
         }
 
         public override EnumerableInfo get_info() {

+ 13 - 13
src/lib/Promotions/Numbers/Implementations.vala

@@ -7,8 +7,8 @@ namespace Invercargill {
         public override bool can_wrap(GLib.Type element_type) {
             return element_type.is_a(typeof(int));
         }
-        protected override int convert(int i) {
-            return i;
+        protected override int convert(uint i) {
+            return (int)i;
         }
         protected override bool greater_than(int a, int b) {
             return a > b;
@@ -43,7 +43,7 @@ namespace Invercargill {
         public override bool can_wrap(GLib.Type element_type) {
             return element_type.is_a(typeof(uint));
         }
-        protected override uint convert(int i) {
+        protected override uint convert(uint i) {
             return i;
         }
         protected override bool greater_than(uint a, uint b) {
@@ -79,7 +79,7 @@ namespace Invercargill {
         public override bool can_wrap(GLib.Type element_type) {
             return element_type.is_a(typeof(int8));
         }
-        protected override int8 convert(int i) {
+        protected override int8 convert(uint i) {
             return (int8)i;
         }
         protected override bool greater_than(int8 a, int8 b) {
@@ -115,7 +115,7 @@ namespace Invercargill {
         public override bool can_wrap(GLib.Type element_type) {
             return element_type.is_a(typeof(uint8));
         }
-        protected override uint8 convert(int i) {
+        protected override uint8 convert(uint i) {
             return (uint8)i;
         }
         protected override bool greater_than(uint8 a, uint8 b) {
@@ -151,7 +151,7 @@ namespace Invercargill {
         public override bool can_wrap(GLib.Type element_type) {
             return element_type.is_a(typeof(int16));
         }
-        protected override int16 convert(int i) {
+        protected override int16 convert(uint i) {
             return (int16)i;
         }
         protected override bool greater_than(int16 a, int16 b) {
@@ -187,7 +187,7 @@ namespace Invercargill {
         public override bool can_wrap(GLib.Type element_type) {
             return element_type.is_a(typeof(uint16));
         }
-        protected override uint16 convert(int i) {
+        protected override uint16 convert(uint i) {
             return (uint16)i;
         }
         protected override bool greater_than(uint16 a, uint16 b) {
@@ -223,7 +223,7 @@ namespace Invercargill {
         public override bool can_wrap(GLib.Type element_type) {
             return element_type.is_a(typeof(int32));
         }
-        protected override int32 convert(int i) {
+        protected override int32 convert(uint i) {
             return (int32)i;
         }
         protected override bool greater_than(int32 a, int32 b) {
@@ -259,7 +259,7 @@ namespace Invercargill {
         public override bool can_wrap(GLib.Type element_type) {
             return element_type.is_a(typeof(uint32));
         }
-        protected override uint32 convert(int i) {
+        protected override uint32 convert(uint i) {
             return (uint32)i;
         }
         protected override bool greater_than(uint32 a, uint32 b) {
@@ -295,7 +295,7 @@ namespace Invercargill {
         public override bool can_wrap(GLib.Type element_type) {
             return element_type.is_a(typeof(int64?));
         }
-        protected override int64? convert(int i) {
+        protected override int64? convert(uint i) {
             return (int64)i;
         }
         protected override bool greater_than(int64? a, int64? b) {
@@ -331,7 +331,7 @@ namespace Invercargill {
         public override bool can_wrap(GLib.Type element_type) {
             return element_type.is_a(typeof(uint64?));
         }
-        protected override uint64? convert(int i) {
+        protected override uint64? convert(uint i) {
             return (uint64)i;
         }
         protected override bool greater_than(uint64? a, uint64? b) {
@@ -367,7 +367,7 @@ namespace Invercargill {
         public override bool can_wrap(GLib.Type element_type) {
             return element_type.is_a(typeof(double?));
         }
-        protected override double? convert(int i) {
+        protected override double? convert(uint i) {
             return (double?)i;
         }
         protected override bool greater_than(double? a, double? b) {
@@ -403,7 +403,7 @@ namespace Invercargill {
         public override bool can_wrap(GLib.Type element_type) {
             return element_type.is_a(typeof(float?));
         }
-        protected override float? convert(int i) {
+        protected override float? convert(uint i) {
             return (float?)i;
         }
         protected override bool greater_than(float? a, float? b) {

+ 1 - 1
src/lib/Promotions/Numbers/Numbers.vala

@@ -10,7 +10,7 @@ namespace Invercargill {
         protected abstract T multiply(T a, T b);
         protected abstract T divide(T a, T b);
         protected abstract T zero();
-        protected abstract T convert(int i);
+        protected abstract T convert(uint i);
 
         public virtual T average() {
             return divide(sum(), convert(count()));

+ 6 - 6
src/lib/Proxy.vala

@@ -11,7 +11,7 @@ namespace Invercargill {
             return new EnumerableInfo.infer_single(this, EnumerableCategory.PROXY, inner);
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return inner.peek_count();
         }
 
@@ -39,7 +39,7 @@ namespace Invercargill {
             return inner.to_array();
         }
     
-        public override int count(PredicateDelegate<T>? predicate = null) {
+        public override uint count(PredicateDelegate<T>? predicate = null) {
             return inner.count(predicate);
         }
     
@@ -75,11 +75,11 @@ namespace Invercargill {
             return inner.concat(other);
         }
     
-        public override Enumerable<T> take(int count) {
+        public override Enumerable<T> take(uint count) {
             return inner.take(count);
         }
     
-        public override Enumerable<T> skip(int count) {
+        public override Enumerable<T> skip(uint count) {
             return inner.skip(count);
         }
     
@@ -135,8 +135,8 @@ namespace Invercargill {
             return inner.matches(other, equals);
         }
     
-        public override Enumerable<T> with(T item, uint times = 1) {
-            return inner.with(item, times);
+        public override Enumerable<T> suffix_with(T item, uint times = 1) {
+            return inner.suffix_with(item, times);
         }
     
         public override T first(owned PredicateDelegate<T>? predicate = null) throws SequenceError {

+ 2 - 2
src/lib/StickyProxy.vala

@@ -28,8 +28,8 @@ namespace Invercargill {
             return rewrap(inner.skip(count));
         }
     
-        public new TEnumerable with(T item, uint times = 1) {
-            return rewrap(inner.with(item, times));
+        public new TEnumerable suffix_with(T item, uint times = 1) {
+            return rewrap(inner.suffix_with(item, times));
         }
     
         public new TEnumerable seal() {

+ 1 - 1
src/lib/Wrappers/Array.vala

@@ -12,7 +12,7 @@ namespace Invercargill.Wrappers {
             }
         }
         
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return array.length;
         }
 

+ 1 - 1
src/lib/Wrappers/GeeIterable.vala

@@ -11,7 +11,7 @@ namespace Invercargill.Wrappers {
             iterable = gee;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return null;
         }
 

+ 1 - 1
src/lib/Wrappers/GenericArray.vala

@@ -9,7 +9,7 @@ namespace Invercargill.Wrappers {
             array = (owned)input;
         }
 
-        public override int? peek_count() {
+        public override uint? peek_count() {
             return array.length;
         }
 

+ 1 - 1
src/tests/Integration/Cache.vala

@@ -16,7 +16,7 @@ void cache_tests() {
         var average = enumerable.average();
 
         
-        assert_cmpint(64, CompareOperator.EQ, count);
+        assert_cmpuint(64, CompareOperator.EQ, count);
         assert_cmpint(0, CompareOperator.EQ, min);
         assert_cmpint(63, CompareOperator.EQ, max);
         assert_cmpint(31, CompareOperator.EQ, average);

+ 24 - 4
src/tests/Integration/EnumerableMethods.vala

@@ -390,9 +390,9 @@ void enumerable_methods_tests() {
         }
     });
 
-    Test.add_func("/invercargill/enumerable/with", () => {
+    Test.add_func("/invercargill/enumerable/suffix_with", () => {
         var items = Wrap.array(new int[] { 1, 2, 3 });
-        var result = items.with(42).to_array();
+        var result = items.suffix_with(42).to_array();
         var expected = new int[] { 1, 2, 3, 42 };
         assert(result.length == expected.length);
         for (int i = 0; i < expected.length; i++) {
@@ -400,9 +400,9 @@ void enumerable_methods_tests() {
         }
     });
 
-    Test.add_func("/invercargill/enumerable/with/multiple", () => {
+    Test.add_func("/invercargill/enumerable/suffix_with/multiple", () => {
         var items = Wrap.array(new int[] { 1, 2, 3 });
-        var result = items.with(42, 3).to_array();
+        var result = items.suffix_with(42, 3).to_array();
         var expected = new int[] { 1, 2, 3, 42, 42, 42 };
         assert(result.length == expected.length);
         for (int i = 0; i < expected.length; i++) {
@@ -410,6 +410,26 @@ void enumerable_methods_tests() {
         }
     });
 
+        Test.add_func("/invercargill/enumerable/prefix_with", () => {
+        var items = Wrap.array(new int[] { 1, 2, 3 });
+        var result = items.prefix_with(42).to_array();
+        var expected = new int[] { 42, 1, 2, 3 };
+        assert(result.length == expected.length);
+        for (int i = 0; i < expected.length; i++) {
+            assert(result[i] == expected[i]);
+        }
+    });
+
+    Test.add_func("/invercargill/enumerable/prefix_with/multiple", () => {
+        var items = Wrap.array(new int[] { 1, 2, 3 });
+        var result = items.prefix_with(42, 3).to_array();
+        var expected = new int[] { 42, 42, 42, 1, 2, 3 };
+        assert(result.length == expected.length);
+        for (int i = 0; i < expected.length; i++) {
+            assert(result[i] == expected[i]);
+        }
+    });
+
     Test.add_func("/invercargill/enumerable/partition", () => {
         var items = Wrap.array(new int[] { 1, 2, 3, 4, 5, 6 });
         var partition = items.partition(i => i % 2 == 0);

+ 7 - 7
src/tests/Integration/PriorityQueue.vala

@@ -233,27 +233,27 @@ void priority_queue_tests() {
         var pq = new PriorityQueue<int>((a, b) => a - b); // Min-heap
         
         // Initially empty
-        assert_cmpint(0, CompareOperator.EQ, pq.peek_count());
+        assert_cmpuint(0, CompareOperator.EQ, pq.peek_count());
         
         // Add items
         pq.push(3);
-        assert_cmpint(1, CompareOperator.EQ, pq.peek_count());
+        assert_cmpuint(1, CompareOperator.EQ, pq.peek_count());
         
         pq.push(1);
-        assert_cmpint(2, CompareOperator.EQ, pq.peek_count());
+        assert_cmpuint(2, CompareOperator.EQ, pq.peek_count());
         
         pq.push(2);
-        assert_cmpint(3, CompareOperator.EQ, pq.peek_count());
+        assert_cmpuint(3, CompareOperator.EQ, pq.peek_count());
         
         // Remove items
         pq.pop();
-        assert_cmpint(2, CompareOperator.EQ, pq.peek_count());
+        assert_cmpuint(2, CompareOperator.EQ, pq.peek_count());
         
         pq.pop();
-        assert_cmpint(1, CompareOperator.EQ, pq.peek_count());
+        assert_cmpuint(1, CompareOperator.EQ, pq.peek_count());
         
         pq.pop();
-        assert_cmpint(0, CompareOperator.EQ, pq.peek_count());
+        assert_cmpuint(0, CompareOperator.EQ, pq.peek_count());
     });
 
     Test.add_func("/invercargill/priority_queue/string_priority", () => {

+ 2 - 2
src/tests/Integration/Set.vala

@@ -16,7 +16,7 @@ void set_tests() {
 
         var items = range(0, 10000000);
         var hashset = items.to_hash_set();
-        assert_cmpint(hashset.count(), CompareOperator.EQ, 10000000);
+        assert_cmpuint(hashset.count(), CompareOperator.EQ, 10000000);
         assert_true(hashset.equals(items));
     });
 
@@ -26,7 +26,7 @@ void set_tests() {
         var items = range(0, 100);
         series.union_with(items);
         series.union_with(items);
-        assert_cmpint(series.count(), CompareOperator.EQ, 100);
+        assert_cmpuint(series.count(), CompareOperator.EQ, 100);
     });
 
     Test.add_func("/invercargill/structure/hash_set/set_comparisons", () => {

+ 6 - 6
src/tests/Integration/SortedSeries.vala

@@ -17,7 +17,7 @@ void sorted_series_tests() {
         var series = new SortedSeries<int>();
         var items = range(0, 10000000);
         series.add_all(items);
-        assert_cmpint(series.count(), CompareOperator.EQ, 10000000);
+        assert_cmpuint(series.count(), CompareOperator.EQ, 10000000);
 
         assert(series.matches(items, (a, b) => a == b));
     });
@@ -27,7 +27,7 @@ void sorted_series_tests() {
         var series = new SortedSeries<int>();
         var items = range(10000000, 0, -1);
         series.add_all(items);
-        assert_cmpint(series.count(), CompareOperator.EQ, 10000000);
+        assert_cmpuint(series.count(), CompareOperator.EQ, 10000000);
     });
 
     Test.add_func("/invercargill/structure/sorted_series/add_twice", () => {
@@ -36,7 +36,7 @@ void sorted_series_tests() {
         var items = range(0, 100);
         series.add_all(items);
         series.add_all(items);
-        assert_cmpint(series.count(), CompareOperator.EQ, 200);
+        assert_cmpuint(series.count(), CompareOperator.EQ, 200);
 
         assert_true(series.matches(items.interleave(items), (a, b) => a == b));
     });
@@ -48,7 +48,7 @@ void sorted_series_tests() {
         series.add_all(items);
         series.add_all(items);
         items.iterate(i => series.remove_first_where(si => si == i));
-        assert_cmpint(series.count(), CompareOperator.EQ, 100);
+        assert_cmpuint(series.count(), CompareOperator.EQ, 100);
         assert_true(series.matches(items, (a, b) => a == b));
     });
 
@@ -59,7 +59,7 @@ void sorted_series_tests() {
         series.add_all(items);
         series.add_all(items);
         series.remove_all_where(si => si < 50);
-        assert_cmpint(series.count(), CompareOperator.EQ, 100);
+        assert_cmpuint(series.count(), CompareOperator.EQ, 100);
         assert_true(range(50, 100).interleave(range(50, 100)).matches(series, (a, b) => a == b));
     });
 
@@ -70,7 +70,7 @@ void sorted_series_tests() {
         series.add_all(items);
         series.add_all(items);
         series.clear();
-        assert_cmpint(series.count(), CompareOperator.EQ, 0);
+        assert_cmpuint(series.count(), CompareOperator.EQ, 0);
         assert_cmpint(series.last_or_default(), CompareOperator.EQ, 0);
     });