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); } }