001 package lrs; 002 003 /** 004 * Represents the non-empty state of a LStruct. 005 * @author Dung X. Nguyen and Stephen Wong Copyright 2005 - All rights reserved. 006 * @since 8/25/05 007 */ 008 class NENode extends ANode { 009 private Object _dat; 010 private LRStruct _tail; 011 012 /** 013 * Initializes this NENode to contain dat and a given tail list. 014 * @param dat the data object to be stored in this NENode. 015 * @param tail the LRStruct tail of this NENode. 016 */ 017 NENode(Object dat, LRStruct tail) { 018 _dat = dat; 019 _tail = tail; 020 } 021 022 LRStruct getRest(LRStruct owner) { 023 return _tail; 024 } 025 026 Object getFirst(LRStruct owner) { 027 return _dat; 028 } 029 030 LRStruct setRest(LRStruct tail, LRStruct owner) { 031 _tail = tail; 032 return owner; 033 } 034 035 LRStruct setFirst(Object first, LRStruct owner) { 036 _dat = first; 037 return owner; 038 } 039 040 /** 041 * Inserts a data object at the front of the LRStruct owner. 042 * @param dat the object to be inserted at the front. 043 * @param owner the LRS referencing this NENode. 044 */ 045 LRStruct insertFront(Object dat, LRStruct owner) { 046 return owner.setHead(new NENode(dat, new LRStruct(this))); 047 /* Details: 048 // LRStruct coOwner = new LRStruct (this); 049 // NENode newNode = new NENode (dat, coOwner); 050 // owner.setHead (newNode); 051 // "old" style: owner._head = newNode - cannot be done here. 052 */ 053 } 054 055 Object removeFront(LRStruct owner) { 056 owner.setHead(_tail.getHead()); // owner._head = _tail._head 057 return _dat; 058 } 059 060 /** 061 * Calls the visitor's non-empty case. 062 */ 063 Object execute(LRStruct owner, IAlgo algo, Object... input) { 064 return algo.nonEmptyCase(owner, input); 065 } 066 } 067