package edu.rice.cs.dxn.QFList; /** * non-null list node */ class NonNullNode implements IState { private Object _dat; private QFList _tail; /** * Initializes this NonNullNode to contain dat and an empty tail list. * @param dat the data object to be stored in this NonNullNode. */ NonNullNode(Object dat) { _dat = dat; _tail = new QFList(); } /** * Initializes this NonNullNode to contain dat and a given tail list. * @param dat the data object to be stored in this NonNullNode. * @param tail the QFList tail of this NoNullNode. */ NonNullNode(Object dat, QFList tail) { _dat = dat; _tail = tail; } /** * @param owner * @return n */ public QFList getRest(QFList owner) { return(_tail); } /** * @param owner * @return n */ public Object getFirst(QFList owner) { return(_dat); } /** * @param tail * @param owner */ public void setRest(QFList tail, QFList owner) { _tail = tail; } /** * @param first * @param owner */ public void setFirst(Object first, QFList owner) { _dat = first; } /** * Inserts a data object at the front of the QFList owner. * @param dat the object to be inserted at the front. * @param owner the QFList owner */ public void insertFront (Object dat, QFList owner) { owner.setHead (new NonNullNode (dat, new QFList (owner.getHead ()))); /* Details: QFList coOwner = new QFList (owner.getHead ()); // new QFList (this); NonNullNode newNode = new NonNullNode (dat, coOwner); owner.setHead (newNode); // "old" style: owner._head = newNode - cannot be done here. */ } /** * @param owner * @return the front data of the QFList owner. */ public Object removeFront(QFList owner) { Object dat = owner.getFirst(); // dat = _dat owner.setHead(owner.getRest().getHead()); // owner._head = _tail._head return(dat); } /** * @returns the output object resulting from executing the visitor. */ public Object execute(IAlgo visitor, Object input, QFList owner) { return visitor.nonNullCase(owner, input); } }