1 module neton.store.EventQueue;
2 
3 import neton.store.Event;
4 import hunt.logging;
5 
6 class EventQueue
7 {
8     this(int capacity)
9     {
10         _capacity = capacity;
11         _events = new Event[_capacity];
12         _front = _back = _size = 0;
13     }
14 
15     public :
16         void insert(Event e)
17         {
18             try
19             {
20                  this._events[_back] = e;
21                 _back = (_back + 1) % _capacity;
22 
23                 if (_size == _capacity) { //dequeue
24                     _front = (_front + 1) % _capacity;
25                 } else {
26                     _size++;
27                 } 
28                logInfo("event queue size : ", _size," front : ",_front," back : ",_back);
29             }
30             catch (Exception e)
31             {
32                 logError("catch %s", e.msg);
33             }
34 
35         }
36 
37         ulong getIndex(int idx)
38         {
39             return _events[idx].Index();
40             
41         }
42 
43         @property int front()
44         {
45             return _front;
46         }
47 
48         @property int back()
49         {
50             return _back;
51         }
52 
53         @property int capacity()
54         {
55             return _capacity;
56         }
57 
58         Event event(int i)
59         {
60             return _events[i];
61         }
62     private :
63         int _size;
64         int _front;
65         int _back;
66         int _capacity;
67         Event[] _events;
68 }