|
@@ -181,6 +181,32 @@ namespace Invercargill {
|
|
return null;
|
|
return null;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ public virtual T last(owned PredicateDelegate<T>? predicate = null) throws SequenceError {
|
|
|
|
+ var tracker = predicate == null ? get_tracker() : where((owned)predicate).get_tracker();
|
|
|
|
+ if(!tracker.has_next()) {
|
|
|
|
+ throw new SequenceError.NO_ELEMENTS("The sequence contains no elements");
|
|
|
|
+ }
|
|
|
|
+ while(true) {
|
|
|
|
+ T item = tracker.get_next();
|
|
|
|
+ if(!tracker.has_next()) {
|
|
|
|
+ return item;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public virtual T? last_or_default(owned PredicateDelegate<T>? predicate = null) {
|
|
|
|
+ var tracker = predicate == null ? get_tracker() : where((owned)predicate).get_tracker();
|
|
|
|
+ if(!tracker.has_next()) {
|
|
|
|
+ return null;
|
|
|
|
+ }
|
|
|
|
+ while(true) {
|
|
|
|
+ T item = tracker.get_next();
|
|
|
|
+ if(!tracker.has_next()) {
|
|
|
|
+ return item;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
public virtual T single(owned PredicateDelegate<T>? predicate = null) throws SequenceError {
|
|
public virtual T single(owned PredicateDelegate<T>? predicate = null) throws SequenceError {
|
|
var tracker = predicate == null ? get_tracker() : where((owned)predicate).get_tracker();
|
|
var tracker = predicate == null ? get_tracker() : where((owned)predicate).get_tracker();
|
|
if(tracker.has_next()) {
|
|
if(tracker.has_next()) {
|