package clist; class DatNode extends ANode { private Object _dat; private CLList _clockwiseTail; private CLList _counterwiseTail; DatNode(Object dat, CLList counterwiseParent, CLList clockwiseParent) { _dat = dat; clockwiseParent.setCounterwiseHead(this); counterwiseParent.setClockwiseHead(this); } Object getDat(CLList parent) { return _dat; } void setDat(Object dat, CLList parent) { _dat = dat; } CLList getClockwiseTail(CLList parent) { return _clockwiseTail; } void setClockwiseParent(CLList cllist) { _clockwiseTail = cllist; } CLList getCounterwiseTail(CLList parent) { return _counterwiseTail; } void setCounterwiseParent(CLList cllist) { _counterwiseTail = cllist; } void insertClockwise(Object dat, CLList parent) { new DatNode(dat, parent, new CLList(NullNode.Singleton, this)); } void insertCounterwise(Object dat, CLList parent) { new DatNode(dat, new CLList(this, NullNode.Singleton), parent); } Object removeClockwise(CLList parent) { if (parent.equals(_clockwiseTail)) { parent.setClockwiseHead(NullNode.Singleton); parent.setCounterwiseHead(NullNode.Singleton); } else { parent.setClockwiseHead(_clockwiseTail.getClockwiseHead()); _clockwiseTail.setClockwiseHead(NullNode.Singleton); _clockwiseTail.setCounterwiseHead(NullNode.Singleton); } return _dat; } Object removeCounterwise(CLList parent) { if (parent.equals(_counterwiseTail)) { parent.setClockwiseHead(NullNode.Singleton); parent.setCounterwiseHead(NullNode.Singleton); } else { parent.setCounterwiseHead(_counterwiseTail.getCounterwiseHead()); _counterwiseTail.setClockwiseHead(NullNode.Singleton); _counterwiseTail.setCounterwiseHead(NullNode.Singleton); } return _dat; } Object execClockwise(ICLVisitor algo, CLList start, Object input, CLList parent) { return algo.nonNullCase(parent, start, input); } Object execCounterwise(ICLVisitor algo, CLList start, Object input, CLList parent) { return algo.nonNullCase(parent, start, input); } }