Browse Source

Convert ints that logically can't go negative to uints

Billy Barrow 11 tháng trước cách đây
mục cha
commit
614a4ea2b5
65 tập tin đã thay đổi với 154 bổ sung và 130 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);
     });