package plp.collection; /** * Cells are used for different kind of linked structures. */ class Cell implements Position { private Object data; private Cell prev; private Cell next; private static final Object INVALID_DATA = new Object(); Cell() { this(null, null, null); } Cell(Object o) { this(null, o, null); } Cell(Cell prev, Cell next) { this(prev, null, next); } Cell(Cell prev, Object o, Cell next) { setPrev(prev); setNext(next); setData(o); } Cell prev() { return prev; } void setPrev(Cell prev) { this.prev = prev; if (prev != null) { prev.next = this; } } Cell next () { return next; } void setNext(Cell next) { this.next = next; if (next != null) { next.prev = this; } } Object data() { return data; } void setData(Object o) { data = o; } void remove() { if (prev != null) { prev.setNext(next); } if (next != null) { next.setPrev(prev); } data = INVALID_DATA; } public String toString() { return "(" + super.toString() + " data : " + data + ")"; } public boolean isValid() { return data != INVALID_DATA; } }