|
@@ -50,7 +50,7 @@ namespace Invercargill {
|
|
|
if(peeked == null)
|
|
if(peeked == null)
|
|
|
array = new T[1024];
|
|
array = new T[1024];
|
|
|
else
|
|
else
|
|
|
- array = new T[(int)peeked];
|
|
|
|
|
|
|
+ array = new T[int.max(1,(int)peeked)];
|
|
|
|
|
|
|
|
var index = 0;
|
|
var index = 0;
|
|
|
foreach (var item in this) {
|
|
foreach (var item in this) {
|
|
@@ -221,19 +221,11 @@ namespace Invercargill {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public virtual Enumerable<T> skip_last(int count) {
|
|
public virtual Enumerable<T> skip_last(int count) {
|
|
|
- return Iterate.deferred<T>(() => {
|
|
|
|
|
- var buffer = to_immutable_buffer();
|
|
|
|
|
- return buffer.take(int.max(0, (int)buffer.length - count));
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ return new Modifiers.SkipLast<T>(this, count);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- // TODO: This one could realistically be a modifier using a ring buffer so we don't have to
|
|
|
|
|
- // buffer the whole sequence
|
|
|
|
|
public virtual Enumerable<T> take_last(int count) {
|
|
public virtual Enumerable<T> take_last(int count) {
|
|
|
- return Iterate.deferred<T>(() => {
|
|
|
|
|
- var buffer = to_immutable_buffer();
|
|
|
|
|
- return buffer.skip(int.max(0, (int)buffer.length - count));
|
|
|
|
|
- });
|
|
|
|
|
|
|
+ return new Modifiers.TakeLast<T>(this, count);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public virtual Enumerable<TOut> cast<TOut>() {
|
|
public virtual Enumerable<TOut> cast<TOut>() {
|
|
@@ -351,8 +343,7 @@ namespace Invercargill {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public virtual Enumerable<TOut> fork<TOut>(owned TransformDelegate<T, TOut> fork1, owned TransformDelegate<T, TOut> fork2) {
|
|
public virtual Enumerable<TOut> fork<TOut>(owned TransformDelegate<T, TOut> fork1, owned TransformDelegate<T, TOut> fork2) {
|
|
|
- var seq = to_series();
|
|
|
|
|
- return seq.select<TOut>((owned)fork1).interleave(seq.select<TOut>((owned)fork2));
|
|
|
|
|
|
|
+ return new Modifiers.Fork<T, TOut>(this, (owned)fork1, (owned)fork2);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
public virtual Enumerable<TOut> fork_many<TOut>(owned TransformDelegate<T, Enumerable<TOut>> fork1, owned TransformDelegate<T, Enumerable<TOut>> fork2) {
|
|
public virtual Enumerable<TOut> fork_many<TOut>(owned TransformDelegate<T, Enumerable<TOut>> fork1, owned TransformDelegate<T, Enumerable<TOut>> fork2) {
|