/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* JavaWorld Library, Copyright 2011 Bryan Chadwick *
* *
* FILE: ./universe/Cons.java *
* *
* This file is part of JavaWorld. *
* *
* JavaWorld is free software: you can redistribute it and/or *
* modify it under the terms of the GNU General Public License *
* as published by the Free Software Foundation, either version *
* 3 of the License, or (at your option) any later version. *
* *
* JavaWorld is distributed in the hope that it will be useful, *
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
* GNU General Public License for more details. *
* *
* You should have received a copy of the GNU General Public License *
* along with JavaWorld. If not, see . *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
package universe;
/** Represents a Lisp style cons list. You should not use the constructor, use List.push(...)
* to add an element to the front of the list. It is left public so that the parser
* generator can parse different lists if needed. */
public class Cons extends List{
private static final long serialVersionUID = 1;
protected final X first;
protected final List rest;
//private final int hash;
public Cons(X f, List r){
super(r.length()+1);
this.first = f;
this.rest = r;
//hash = first.hashCode()+3*rest.hashCode();
}
public X top(){ return this.first; }
public List pop(){ return this.rest; }
public boolean isEmpty(){ return false; }
public boolean equals(Object o){
if(! (o instanceof Cons>))return false;
List> c = (List>)o;
if(c.length() != length())return false;
for(X x:this){
if(!x.equals(c.top()))return false;
c = c.pop();
}
return true;
}
public int hashCode(){
//return hash;
return this.first.hashCode()+3*this.rest.hashCode();
}
/** Getter for Entry.key */
public X getFirst(){ return this.first; }
/** Getter for Entry.val */
public List getRest(){ return this.rest; }
}