|
@@ -132,6 +132,52 @@ namespace Invercargill {
|
|
return pair(other).all(p => equals(p.value1, p.value2));
|
|
return pair(other).all(p => equals(p.value1, p.value2));
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public virtual Enumerable<T> with(T item) {
|
|
|
|
+ var seq = new Sequence<T>();
|
|
|
|
+ seq.add(item);
|
|
|
|
+ return concat(seq);
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public virtual T first() throws SequenceError {
|
|
|
|
+ var tracker = get_tracker();
|
|
|
|
+ if(tracker.has_next()) {
|
|
|
|
+ return tracker.get_next();
|
|
|
|
+ }
|
|
|
|
+ throw new SequenceError.NO_ELEMENTS("The sequence contains no elements");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public virtual T first_or_default() throws SequenceError {
|
|
|
|
+ var tracker = get_tracker();
|
|
|
|
+ if(tracker.has_next()) {
|
|
|
|
+ return tracker.get_next();
|
|
|
|
+ }
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public virtual T single() throws SequenceError {
|
|
|
|
+ var tracker = get_tracker();
|
|
|
|
+ if(tracker.has_next()) {
|
|
|
|
+ var item = tracker.get_next();
|
|
|
|
+ if(tracker.has_next()) {
|
|
|
|
+ throw new SequenceError.MULTUPLE_ELEMENTS("The sequence contains more than one element");
|
|
|
|
+ }
|
|
|
|
+ return item;
|
|
|
|
+ }
|
|
|
|
+ throw new SequenceError.NO_ELEMENTS("The sequence contains no elements");
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public virtual T single_or_default() throws SequenceError {
|
|
|
|
+ var tracker = get_tracker();
|
|
|
|
+ if(tracker.has_next()) {
|
|
|
|
+ var item = tracker.get_next();
|
|
|
|
+ if(tracker.has_next()) {
|
|
|
|
+ throw new SequenceError.MULTUPLE_ELEMENTS("The sequence contains more than one element");
|
|
|
|
+ }
|
|
|
|
+ return item;
|
|
|
|
+ }
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|