org.shapelogic.streams
Class BaseListCommonStream<E>

java.lang.Object
  extended by org.shapelogic.streams.BaseCommonStream<E>
      extended by org.shapelogic.streams.BaseListCommonStream<E>
All Implemented Interfaces:
java.lang.Iterable<E>, java.util.Iterator<E>, CalcValue<E>, ContextGettable, LazyCalc<E>, RecursiveContext, ListStream<E>, NumberedStream<E>, Stream<E>, StreamProperties
Direct Known Subclasses:
BaseListIndexedStream1, BaseListStream0, BaseListStream1, BaseListStream2, BaseListStreamList, IteratorStream, SingleListStream, WrappedListStream

public abstract class BaseListCommonStream<E>
extends BaseCommonStream<E>
implements ListStream<E>

Implementation of ListStream.
Close to
1: a lazy stream.
2: a UNIX pipe.

This is close to org.apache.commons.collections.list.LazyList, but that takes a factory to calculate next element, and that works badly here. How should a step work?
Normally call the hasNext, in order for this to work it would have to do the calculation.

So _current should be the last element that has been returned.

So when you call hasNext it will add that element to the list. When you call next it will bump the counter up one element if goes too high then do the calculation. At the end it will get to a point where the calculation fails. At that point last will be set to the current element. I will ignore synchronization to begin with.

Author:
Sami Badawi

Field Summary
protected  java.util.List<E> _list
           
 
Fields inherited from class org.shapelogic.streams.BaseCommonStream
_context, _current, _dirty, _last, _maxLast, _name, _nullLegalValue, _parentContext, _query, _value
 
Constructor Summary
BaseListCommonStream()
           
 
Method Summary
protected  boolean calcAddNext()
          Try to calculate one more, independent of the _current.
 E get(int inputIndex)
          Get next element without advancing _current.
 int getCurrentSize()
           
 java.util.List<E> getList()
          Get underlying list.
 boolean hasNext()
           
 boolean hasNextBase()
           
abstract  E invokeIndex(int index)
          Calculate the value at an index.
 boolean isCached()
          If there is a list that contains all the results.
 boolean isRandomAccess()
          If you can calculate 1 element independent of other elements.
 java.util.Iterator<E> iterator()
           
 E next()
          Get next element and advance _current.
protected  void setLastFromInput()
           
 void setList(java.util.List<E> list)
          Get underlying list.
 
Methods inherited from class org.shapelogic.streams.BaseCommonStream
getContext, getInContext, getIndex, getLast, getMaxLast, getName, getParentContext, getValue, isDeterministic, isDirty, isNullLegalValue, remove, setMaxLast, setNullLegalValue, setup
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface org.shapelogic.streams.NumberedStream
getIndex, getLast, getMaxLast, setMaxLast
 
Methods inherited from interface org.shapelogic.calculation.LazyCalc
isDirty, setup
 
Methods inherited from interface org.shapelogic.calculation.CalcValue
getValue
 
Methods inherited from interface java.util.Iterator
remove
 

Field Detail

_list

protected java.util.List<E> _list
Constructor Detail

BaseListCommonStream

public BaseListCommonStream()
Method Detail

invokeIndex

public abstract E invokeIndex(int index)
Calculate the value at an index.
So it gets the needed input value and call the appropriate invoke function.
Can this be used for a filter call?
The index does not make sense for a filter since you do not know where the input is coming from. So maybe just ignore it.
This is a little messy but less messy that what is there now.

Specified by:
invokeIndex in class BaseCommonStream<E>

hasNext

public boolean hasNext()
Specified by:
hasNext in interface java.util.Iterator<E>

calcAddNext

protected boolean calcAddNext()
Try to calculate one more, independent of the _current.

Specified by:
calcAddNext in class BaseCommonStream<E>

hasNextBase

public boolean hasNextBase()

setLastFromInput

protected void setLastFromInput()
Overrides:
setLastFromInput in class BaseCommonStream<E>

next

public E next()
Get next element and advance _current.

Specified by:
next in interface java.util.Iterator<E>

get

public E get(int inputIndex)
Get next element without advancing _current.

Specified by:
get in interface NumberedStream<E>
Returns:

isRandomAccess

public boolean isRandomAccess()
Description copied from interface: StreamProperties
If you can calculate 1 element independent of other elements.

Specified by:
isRandomAccess in interface StreamProperties

isCached

public boolean isCached()
If there is a list that contains all the results. I would think that this should always happen for a ListStream, but it could happen for other streams as well.

Specified by:
isCached in interface StreamProperties

getCurrentSize

public int getCurrentSize()

getList

public java.util.List<E> getList()
Description copied from interface: ListStream
Get underlying list.

Specified by:
getList in interface ListStream<E>

setList

public void setList(java.util.List<E> list)
Description copied from interface: ListStream
Get underlying list.

Specified by:
setList in interface ListStream<E>

iterator

public java.util.Iterator<E> iterator()
Specified by:
iterator in interface java.lang.Iterable<E>


Copyright © 2009. All Rights Reserved.