Package gnu.lists
Class LList
- java.lang.Object
-
- gnu.lists.AbstractSequence<E>
-
- gnu.lists.ExtSequence<java.lang.Object>
-
- gnu.lists.LList
-
- All Implemented Interfaces:
BoundedHashable,Consumable,Sequence<java.lang.Object>,java.io.Externalizable,java.io.Serializable,java.lang.Comparable,java.lang.Iterable<java.lang.Object>,java.util.Collection<java.lang.Object>,java.util.List<java.lang.Object>
public class LList extends ExtSequence<java.lang.Object> implements Sequence<java.lang.Object>, java.io.Externalizable, java.lang.Comparable
Semi-abstract class for traditions Lisp-style lists. A list is implemented as a chain of Pair objects, where the 'car' field of the Pair points to a data element, and the 'cdr' field points to the next Pair. (The names 'car' and 'cdr' are historical; they refer to hardware on machines form the 60's.) Includes singleton static Empty, and the Pair sub-class.- See Also:
- Serialized Form
-
-
Field Summary
Fields Modifier and Type Field Description static EmptyListEmpty-
Fields inherited from class gnu.lists.AbstractSequence
noInts
-
Fields inherited from interface gnu.lists.Sequence
ATTRIBUTE_VALUE, BOOLEAN_VALUE, CDATA_VALUE, CHAR_VALUE, COMMENT_VALUE, DOCUMENT_VALUE, DOUBLE_VALUE, ELEMENT_VALUE, EOF_VALUE, eofValue, FLOAT_VALUE, INT_S16_VALUE, INT_S32_VALUE, INT_S64_VALUE, INT_S8_VALUE, INT_U16_VALUE, INT_U32_VALUE, INT_U64_VALUE, INT_U8_VALUE, OBJECT_VALUE, PRIM_VALUE, PROCESSING_INSTRUCTION_VALUE, TEXT_BYTE_VALUE
-
-
Constructor Summary
Constructors Constructor Description LList()Do not use - only public for serialization!
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description intboundedHash(int seed, int limit)Calculate a hash code for this object.static Pairchain1(Pair old, java.lang.Object arg1)Utility function used by compiler when inlining `list'.static Pairchain4(Pair old, java.lang.Object arg1, java.lang.Object arg2, java.lang.Object arg3, java.lang.Object arg4)Utility function used by compiler when inlining `list'.static java.lang.ObjectcheckNonList(java.lang.Object rest)Helper to protect against pathological LLists (neithr Pair nor Empty).intcompareTo(java.lang.Object obj)voidconsume(Consumer out)static java.lang.ObjectconsX(java.lang.Object[] args)SRFI-1's cons* and Common Lisp's list* function.intcreatePos(int index, boolean isAfter)Generate a position at a given index.intcreateRelativePos(int pos, int delta, boolean isAfter)booleanequals(java.lang.Object obj)java.lang.Objectget(int index)See java.util.List.SeqPositiongetIterator(int index)java.lang.ObjectgetPosNext(int ipos)Get the element following the specified position.java.lang.ObjectgetPosPrevious(int ipos)Get the element before the specified position.inthashCode()booleanhasNext(int ipos)booleanisEmpty()True is this sequence contains no elements.static intlength(java.lang.Object arg)static Pairlist1(java.lang.Object arg1)static Pairlist2(java.lang.Object arg1, java.lang.Object arg2)static Pairlist3(java.lang.Object arg1, java.lang.Object arg2, java.lang.Object arg3)static Pairlist4(java.lang.Object arg1, java.lang.Object arg2, java.lang.Object arg3, java.lang.Object arg4)static intlistLength(java.lang.Object obj, boolean allowOtherSequence)A safe function to count the length of a list.static LListmakeList(java.lang.Object[] vals, int offset)static LListmakeList(java.lang.Object[] vals, int offset, int length)static LListmakeList(java.util.List vals)intnextPos(int ipos)Return the next position following the argument.voidreadExternal(java.io.ObjectInput in)java.lang.ObjectreadResolve()static LListreverseInPlace(java.lang.Object list)Reverse a list in place, by modifying the cdr fields.protected voidsetPosNext(int ipos, java.lang.Object value)protected voidsetPosPrevious(int ipos, java.lang.Object value)intsize()See java.util.List.java.lang.StringtoString()voidwriteExternal(java.io.ObjectOutput out)-
Methods inherited from class gnu.lists.ExtSequence
copyPos, isAfterPos, nextIndex, releasePos
-
Methods inherited from class gnu.lists.AbstractSequence
add, add, addAll, addAll, addPos, asImmutable, badRank, checkCanWrite, checkRank, clear, compare, compare, compare, consume, consumeNext, consumePosRange, contains, containsAll, effectiveIndex, effectiveIndex, effectiveIndex, effectiveIndex, effectiveIndex, elements, endPos, equals, fill, fill, fillPosRange, firstAttributePos, firstChildPos, firstChildPos, fromEndIndex, get, get, get, get, getAttribute, getAttributeLength, getBooleanRaw, getByteRaw, getCharRaw, getContainingSequenceSize, getDoubleRaw, getElementKind, getFloatRaw, getIndexDifference, getInt, getInt, getInt, getInt, getInt, getIntRaw, getIterator, getIteratorAtPos, getLongRaw, getLowBound, getNextKind, getNextTypeName, getNextTypeObject, getRaw, getRowMajor, getShortRaw, getSize, getSize, gotoAttributesStart, gotoChildrenStart, gotoParent, hasPrevious, indexOf, iterator, lastIndexOf, listIterator, listIterator, nextIndex, nextMatching, parentPos, previousPos, rank, remove, remove, removeAll, removePos, removePosRange, retainAll, set, set, setAt, setBuffer, setRaw, stableCompare, startPos, subList, subSequence, subSequencePos, toArray, toArray, toString, unsupported, unsupportedException
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
-
-
-
Field Detail
-
Empty
public static final EmptyList Empty
-
-
Method Detail
-
listLength
public static int listLength(java.lang.Object obj, boolean allowOtherSequence)A safe function to count the length of a list.- Parameters:
obj- the putative list to measureallowOtherSequence- if a non-List Sequence is seen, allow that- Returns:
- the length, or -1 for a circular list, or -2 for a dotted list
-
equals
public boolean equals(java.lang.Object obj)
- Specified by:
equalsin interfacejava.util.Collection<java.lang.Object>- Specified by:
equalsin interfacejava.util.List<java.lang.Object>- Overrides:
equalsin classAbstractSequence<java.lang.Object>
-
compareTo
public int compareTo(java.lang.Object obj)
- Specified by:
compareToin interfacejava.lang.Comparable
-
size
public int size()
Description copied from interface:SequenceSee java.util.List.- Specified by:
sizein interfacejava.util.Collection<java.lang.Object>- Specified by:
sizein interfacejava.util.List<java.lang.Object>- Specified by:
sizein interfaceSequence<java.lang.Object>- Overrides:
sizein classAbstractSequence<java.lang.Object>
-
isEmpty
public boolean isEmpty()
Description copied from interface:SequenceTrue is this sequence contains no elements.- Specified by:
isEmptyin interfacejava.util.Collection<java.lang.Object>- Specified by:
isEmptyin interfacejava.util.List<java.lang.Object>- Specified by:
isEmptyin interfaceSequence<java.lang.Object>- Overrides:
isEmptyin classAbstractSequence<java.lang.Object>
-
getIterator
public SeqPosition getIterator(int index)
- Overrides:
getIteratorin classAbstractSequence<java.lang.Object>
-
createPos
public int createPos(int index, boolean isAfter)Description copied from class:AbstractSequenceGenerate a position at a given index. The result is a position cookie that must be free'd with releasePos.- Overrides:
createPosin classAbstractSequence<java.lang.Object>- Parameters:
index- offset from beginning of desired positionisAfter- should the position have the isAfter property
-
createRelativePos
public int createRelativePos(int pos, int delta, boolean isAfter)- Overrides:
createRelativePosin classAbstractSequence<java.lang.Object>
-
hasNext
public boolean hasNext(int ipos)
- Overrides:
hasNextin classAbstractSequence<java.lang.Object>
-
nextPos
public int nextPos(int ipos)
Description copied from class:AbstractSequenceReturn the next position following the argument. The new position has the isAfter property. The argument is implicitly released (as in releasePos). Returns 0 if we are already at end of file.- Overrides:
nextPosin classAbstractSequence<java.lang.Object>
-
getPosNext
public java.lang.Object getPosNext(int ipos)
Description copied from class:AbstractSequenceGet the element following the specified position.- Overrides:
getPosNextin classAbstractSequence<java.lang.Object>- Parameters:
ipos- the specified position.- Returns:
- the following element, or eofValue if there is none. Called by SeqPosition.getNext. FIXME Should change eof handling so return type can be E.
-
getPosPrevious
public java.lang.Object getPosPrevious(int ipos)
Description copied from class:AbstractSequenceGet the element before the specified position.- Overrides:
getPosPreviousin classAbstractSequence<java.lang.Object>- Parameters:
ipos- the specified position.- Returns:
- the following element, or eofValue if there is none. FIXME Should change eof handling so return type can be E.
-
setPosNext
protected void setPosNext(int ipos, java.lang.Object value)- Overrides:
setPosNextin classAbstractSequence<java.lang.Object>
-
setPosPrevious
protected void setPosPrevious(int ipos, java.lang.Object value)- Overrides:
setPosPreviousin classAbstractSequence<java.lang.Object>
-
get
public java.lang.Object get(int index)
Description copied from interface:SequenceSee java.util.List.- Specified by:
getin interfacejava.util.List<java.lang.Object>- Specified by:
getin interfaceSequence<java.lang.Object>- Overrides:
getin classAbstractSequence<java.lang.Object>
-
length
public static final int length(java.lang.Object arg)
-
boundedHash
public int boundedHash(int seed, int limit)Description copied from interface:BoundedHashableCalculate a hash code for this object.- Specified by:
boundedHashin interfaceBoundedHashable- Overrides:
boundedHashin classAbstractSequence<java.lang.Object>- Parameters:
seed- The seed is an initial value, or the accumulated hash code from previous elements in a containing object. Using zero as the seed is fine.limit- A limit on the number of sub-elements whose hash we should calculate. This guards against cycles. Any recursive calls should be done with a smaller value of limit, and no recursive calls must be done when the limit is zero.- Returns:
- A well-dispersed hash code.
The result is not compatible with
Object#hashCode.
-
hashCode
public int hashCode()
- Specified by:
hashCodein interfacejava.util.Collection<java.lang.Object>- Specified by:
hashCodein interfacejava.util.List<java.lang.Object>- Overrides:
hashCodein classAbstractSequence<java.lang.Object>
-
makeList
public static LList makeList(java.util.List vals)
-
makeList
public static LList makeList(java.lang.Object[] vals, int offset, int length)
-
makeList
public static LList makeList(java.lang.Object[] vals, int offset)
-
consume
public void consume(Consumer out)
- Specified by:
consumein interfaceConsumable- Overrides:
consumein classAbstractSequence<java.lang.Object>
-
readExternal
public void readExternal(java.io.ObjectInput in) throws java.io.IOException, java.lang.ClassNotFoundException- Specified by:
readExternalin interfacejava.io.Externalizable- Throws:
java.io.IOExceptionjava.lang.ClassNotFoundException
-
writeExternal
public void writeExternal(java.io.ObjectOutput out) throws java.io.IOException- Specified by:
writeExternalin interfacejava.io.Externalizable- Throws:
java.io.IOException
-
readResolve
public java.lang.Object readResolve() throws java.io.ObjectStreamException- Throws:
java.io.ObjectStreamException
-
list1
public static Pair list1(java.lang.Object arg1)
-
list2
public static Pair list2(java.lang.Object arg1, java.lang.Object arg2)
-
list3
public static Pair list3(java.lang.Object arg1, java.lang.Object arg2, java.lang.Object arg3)
-
list4
public static Pair list4(java.lang.Object arg1, java.lang.Object arg2, java.lang.Object arg3, java.lang.Object arg4)
-
chain1
public static Pair chain1(Pair old, java.lang.Object arg1)
Utility function used by compiler when inlining `list'.
-
chain4
public static Pair chain4(Pair old, java.lang.Object arg1, java.lang.Object arg2, java.lang.Object arg3, java.lang.Object arg4)
Utility function used by compiler when inlining `list'.
-
reverseInPlace
public static LList reverseInPlace(java.lang.Object list)
Reverse a list in place, by modifying the cdr fields.
-
consX
public static java.lang.Object consX(java.lang.Object[] args)
SRFI-1's cons* and Common Lisp's list* function.
-
toString
public java.lang.String toString()
- Overrides:
toStringin classAbstractSequence<java.lang.Object>
-
checkNonList
public static java.lang.Object checkNonList(java.lang.Object rest)
Helper to protect against pathological LLists (neithr Pair nor Empty).
-
-