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 }