package clist; import clist.visitor.ICLVisitor; class DatNode extends ANode { private Object _dat; /** @SBGen Variable (,,,64) */ private CLList _clockwiseTail; /** @SBGen Variable (,,,64) */ private CLList _counterwiseTail; /** * @param dat * @param _clockwiseParent * @param _counterwiseParent * @SBGen Constructor */ DatNode(Object dat, CLList counterwiseParent, CLList clockwiseParent) { _dat = dat; clockwiseParent.setCounterwiseHead(this); counterwiseParent.setClockwiseHead(this); } /** * @param parent * @return */ Object clockwiseDat(CLList parent) { return _dat; } /** * @param parent * @return */ Object counterwiseDat(CLList parent) { return _dat; } /** * @param dat * @param parent */ void insertClockwise(Object dat, CLList parent) { new DatNode (dat, parent, new CLList (NullNode.Singleton, this)); } /** * @param dat * @param parent */ void insertCounterwise(Object dat, CLList parent) { new DatNode (dat, new CLList (this, NullNode.Singleton), parent); } /** * @param parent * @return */ Object remClockwise(CLList parent) { if (parent.equals (_clockwiseTail)) { parent.setClockwiseHead(NullNode.Singleton); parent.setCounterwiseHead(NullNode.Singleton); } else { parent.setClockwiseHead(_clockwiseTail.clockwiseHead()); _clockwiseTail.setClockwiseHead(NullNode.Singleton); _clockwiseTail.setCounterwiseHead(NullNode.Singleton); } return _dat; } /** * @param parent * @return */ Object remCounterwise(CLList parent) { if (parent.equals (_counterwiseTail)) { parent.setClockwiseHead(NullNode.Singleton); parent.setCounterwiseHead(NullNode.Singleton); } else { parent.setCounterwiseHead(_counterwiseTail.counterwiseHead()); _counterwiseTail.setClockwiseHead(NullNode.Singleton); _counterwiseTail.setCounterwiseHead(NullNode.Singleton); } return _dat; } /** * @param parent * @return */ CLList clockwiseTail(CLList parent) { return _clockwiseTail; } /** * @param parent * @return */ CLList counterwiseTail(CLList parent) { return _counterwiseTail; } /** * @param algo * @param start * @param input * @param parent * @return */ Object execClockwise(ICLVisitor algo, CLList start, Object input, CLList parent) { return algo.nonNullCase(parent, start, input); } /** * @param algo * @param start * @param input * @param parent * @return */ Object execCounterwise(ICLVisitor algo, CLList start, Object input, CLList parent) { return algo.nonNullCase(parent, start, input); } /** * @param cllist */ void setClockwiseParent(CLList cllist) { _clockwiseTail = cllist; } /** * @param cllist */ void setCounterwiseParent(CLList cllist) { _counterwiseTail = cllist; } }