--- /dev/null
+package iotcloud;
+import java.nio.ByteBuffer;
+
+/**
+ * Generic class that wraps all the different types of information
+ * that can be stored in a Slot.
+ * @author Brian Demsky <bdemsky@uci.edu>
+ * @version 1.0
+ */
+
+abstract class Entry implements Liveness {
+ static final byte TypeKeyValue = 1;
+ static final byte TypeLastMessage = 2;
+ static final byte TypeRejectedMessage = 3;
+ static final byte TypeTableStatus = 4;
+
+ /* Records whether the information is still live or has been
+ superceded by a newer update. */
+
+ private boolean islive = true;
+ private Slot parentslot;
+
+ Entry(Slot _parentslot) {
+ parentslot = _parentslot;
+ }
+
+ /**
+ * Static method for decoding byte array into Entry objects. First
+ * byte tells the type of entry.
+ */
+
+ static Entry decode(Slot slot, ByteBuffer bb) {
+ byte type=bb.get();
+ switch(type) {
+ case TypeKeyValue:
+ return KeyValue.decode(slot, bb);
+
+ case TypeLastMessage:
+ return LastMessage.decode(slot, bb);
+
+ case TypeRejectedMessage:
+ return RejectedMessage.decode(slot, bb);
+
+ case TypeTableStatus:
+ return TableStatus.decode(slot, bb);
+
+ default:
+ throw new Error("Unrecognized Entry Type: "+type);
+ }
+ }
+
+ /**
+ * Returns true if the Entry object is still live.
+ */
+
+ boolean isLive() {
+ return islive;
+ }
+
+ /**
+ * Flags the entry object as dead. Also decrements the live count
+ * of the parent slot.
+ */
+
+ void setDead() {
+ islive = false;
+ parentslot.decrementLiveCount();
+ }
+
+ /**
+ * Serializes the Entry object into the byte buffer.
+ */
+
+ abstract void encode(ByteBuffer bb);
+
+ /**
+ * Returns the size in bytes the entry object will take in the byte
+ * array.
+ */
+
+ abstract int getSize();
+
+ /**
+ * Returns a byte encoding the type of the entry object.
+ */
+
+ abstract byte getType();
+
+ /**
+ * Returns a copy of the Entry that can be added to a different slot.
+ */
+ abstract Entry getCopy(Slot s);
+
+}