list tweaks

This commit is contained in:
gnembon committed 2019-07-20 22:52:32 -03:00
1 parent 6b24d7e93f
commit 6e4de969c8
9 files changed
+124 -67

No files matched your search

@@ -7,7 +7,7 @@ import java.util.Collections;
import java.util.Iterator;
import java.util.List;
public abstract class LazyListValue extends ListValue implements Iterator<Value>
public abstract class LazyListValue extends AbstractListValue implements Iterator<Value>
{
public static LazyListValue range(long from, long to, long step)
{
@@ -16,10 +16,12 @@ public abstract class LazyListValue extends ListValue implements Iterator<Value>
{
if (step == 0)
throw new InternalExpressionException("range will never end with zero step");
this.current = from;
this.start = from;
this.current = this.start;
this.limit = to;
this.stepp = step;
}
private long start;
private long current;
private long limit;
private long stepp;
@@ -31,6 +33,12 @@ public abstract class LazyListValue extends ListValue implements Iterator<Value>
return val;
}
@Override
public void reset()
{
current = start;
}
@Override
public boolean hasNext()
{
@@ -39,11 +47,6 @@ public abstract class LazyListValue extends ListValue implements Iterator<Value>
};
}
public LazyListValue()
{
super(Collections.emptyList());
}
@Override
public String getString()
{
@@ -59,6 +62,10 @@ public abstract class LazyListValue extends ListValue implements Iterator<Value>
public abstract Value next();
@Override
public void fatality() {reset();}
public abstract void reset();
@Override
public Iterator<Value> iterator() {return this;}
@@ -66,6 +73,7 @@ public abstract class LazyListValue extends ListValue implements Iterator<Value>
{
List<Value> result = new ArrayList<>();
this.forEachRemaining(result::add);
fatality();
return result;
}
@@ -83,14 +91,20 @@ public abstract class LazyListValue extends ListValue implements Iterator<Value>
if (hasNext())
next();
else
{
fatality();
return ListValue.wrap(result);
}
}
for (i = (int)from; i < to; i++)
{
if (hasNext())
result.add(next());
else
{
fatality();
return ListValue.wrap(result);
}
}
return ListValue.wrap(result);
}
@@ -116,5 +130,19 @@ public abstract class LazyListValue extends ListValue implements Iterator<Value>
{
return "iterator";
}
@Override
public Object clone()
{
Object copy;
try
{
copy = super.clone();
}
catch (CloneNotSupportedException e)
{
throw new InternalExpressionException("cannot copy iterator");
}
((LazyListValue)copy).reset();
return copy;
}
}