class Slot implements Liveness {
static final int SLOT_SIZE=2048;
+ static final int RESERVED_SPACE=64;
static final int HMAC_SIZE=32;
private long seqnum;
private Vector<Entry> entries;
private int livecount;
private boolean seqnumlive;
+ private int freespace;
Slot(long _seqnum, long _machineid, byte[] _prevhmac, byte[] _hmac) {
seqnum=_seqnum;
entries=new Vector<Entry>();
livecount=1;
seqnumlive=true;
+ freespace = SLOT_SIZE - getBaseSize();
}
Slot(long _seqnum, long _machineid, byte[] _prevhmac) {
void addEntry(Entry e) {
entries.add(e);
livecount++;
+ freespace -= e.getSize();
}
+ boolean hasSpace(Entry e) {
+ int newfreespace = freespace - e.getSize();
+ return newfreespace > RESERVED_SPACE;
+ }
+
+ boolean canFit(Entry e) {
+ int newfreespace = freespace - e.getSize();
+ return newfreespace >= 0;
+ }
+
Vector<Entry> getEntries() {
return entries;
}
return array;
}
+ int getBaseSize() {
+ return 2*HMAC_SIZE+2*Long.BYTES+Integer.BYTES;
+ }
+
+ Vector<Entry> getLiveEntries() {
+ Vector<Entry> liveEntries=new Vector<Entry>();
+ for(Entry entry: entries)
+ if (entry.isLive())
+ liveEntries.add(entry);
+
+ if (seqnumlive)
+ liveEntries.add(new LastMessage(this, machineid, seqnum));
+
+ return liveEntries;
+ }
+
long getSequenceNumber() {
return seqnum;
}