Cleaned up git
[iotcloud.git] / version1 / src / java / iotcloud / Entry.java
diff --git a/version1/src/java/iotcloud/Entry.java b/version1/src/java/iotcloud/Entry.java
new file mode 100644 (file)
index 0000000..70f90ee
--- /dev/null
@@ -0,0 +1,94 @@
+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);
+
+}