SlotBuffer() {
array=new Slot[DEFAULT_SIZE+1];
+ head=tail=0;
+ oldestseqn=0;
}
int size() {
return (array.length + head) - tail;
}
+ int capacity() {
+ return array.length - 1;
+ }
+
void resize(int newsize) {
if (newsize == (array.length-1))
return;
head = 0;
}
+ private void incrementHead() {
+ head++;
+ if (head >= array.length)
+ head=0;
+ }
+
+ private void incrementTail() {
+ tail++;
+ if (tail >= array.length)
+ tail=0;
+ }
+
void putSlot(Slot s) {
array[head]=s;
- head++;
+ incrementHead();
+
if (oldestseqn==0)
oldestseqn = s.getSequenceNumber();
if (head==tail) {
- tail++;
+ incrementTail();
oldestseqn++;
}
}
Slot getSlot(long seqnum) {
int diff=(int) (seqnum-oldestseqn);
int index=diff + tail;
- if (index > array.length) {
+ if (index >= array.length) {
if (head >= tail)
return null;
index-= array.length;
}
- if (index >= array.length ||
- index >= head)
+ if (index >= array.length)
+ return null;
+
+ if (head >= tail && index >= head)
return null;
return array[index];
}
long getNewestSeqNum() {
- return oldestseqn + size();
+ return oldestseqn + size() - 1;
}
}