NENode.java
Created with JBuilder
package lrs;

/**
 * Represents the non-empty state of a LStruct.
 * @author Dung X. Nguyen  Copyright 2001 - All rights reserved.
 * @since 10/09/01
 */
class NENode extends ANode {
    private Object _dat;
    private LRStruct _tail;

    /**
     * Initializes this NENode to contain dat and a given tail list.
     * @param dat the data object to be stored in this NENode.
     * @param tail the LRStruct tail of this NENode.
     */
    NENode(Object dat, LRStruct tail) {
        _dat = dat;
  	_tail = tail;
    }

    LRStruct getRest(LRStruct owner) {
        return _tail;
    }

    Object getFirst(LRStruct owner) {
        return _dat;
    }

    LRStruct setRest(LRStruct tail, LRStruct owner)	{
        _tail = tail;
        return owner;
    }

    LRStruct setFirst(Object first, LRStruct owner) {
        _dat = first;
        return owner;
    }

    /**
     * Inserts a data object at the front of the LRStruct owner.
     * @param dat the object to be inserted at the front.
     * @param owner the LRS referencing this NENode.
     */
    LRStruct insertFront(Object dat, LRStruct owner) {
        return owner.setHead(new NENode(dat, new LRStruct(this)));
      /* Details:
      // LRStruct coOwner = new LRStruct (this);
      // NENode newNode = new NENode (dat, coOwner);
      // owner.setHead (newNode);
      // "old" style: owner._head = newNode - cannot be done here.
      */
    }

    Object removeFront(LRStruct owner) {
    	owner.setHead(_tail.getHead()); // owner._head = _tail._head
    	return _dat;
    }

    /**
    * Calls the visitor's non-empty case.
    */
    Object execute(IAlgo algo, Object input, LRStruct owner)  {
        return algo.nonEmptyCase(owner, input);
    }
}



NENode.java
Created with JBuilder