1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 package org.apache.hadoop.hbase.util;
19
20 import java.util.AbstractQueue;
21 import java.util.Iterator;
22
23 import org.apache.hadoop.hbase.classification.InterfaceAudience;
24
25
26
27
28 @InterfaceAudience.Private
29 public class BoundedArrayQueue<E> extends AbstractQueue<E> {
30
31 private Object[] items;
32 private int takeIndex, putIndex;
33 private int count;
34
35 public BoundedArrayQueue(int maxElements) {
36 items = new Object[maxElements];
37 }
38
39 @Override
40 public int size() {
41 return count;
42 }
43
44
45
46
47 @Override
48 public Iterator<E> iterator() {
49
50 throw new UnsupportedOperationException();
51 }
52
53 @Override
54 public boolean offer(E e) {
55 if (count == items.length) return false;
56 items[putIndex] = e;
57 if (++putIndex == items.length) putIndex = 0;
58 count++;
59 return true;
60 }
61
62 @Override
63 public E poll() {
64 return (count == 0) ? null : dequeue();
65 }
66
67 @SuppressWarnings("unchecked")
68 private E dequeue() {
69 E x = (E) items[takeIndex];
70 items[takeIndex] = null;
71 if (++takeIndex == items.length) takeIndex = 0;
72 count--;
73 return x;
74 }
75
76 @SuppressWarnings("unchecked")
77 @Override
78 public E peek() {
79 return (E) items[takeIndex];
80 }
81 }