queue.lua 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. local queue = class('queue')
  2. function queue:ctor()
  3. self:reset()
  4. end
  5. function queue:pop()
  6. local ret = nil
  7. if self._index < self._border then
  8. ret = self._data[self._index]
  9. self._data[self._index] = nil
  10. self._index = self._index + 1
  11. else
  12. self:reset()
  13. end
  14. return ret
  15. end
  16. function queue:push(d)
  17. self._data[self._border] = d
  18. self._border = self._border + 1
  19. end
  20. function queue:front()
  21. if self._index < self._border then
  22. return self._data[self._index]
  23. end
  24. return nil
  25. end
  26. function queue:back()
  27. if self._border > 0 then
  28. return self._data[self._border - 1]
  29. end
  30. return nil
  31. end
  32. function queue:at(index)
  33. return self._data[self._index + index - 1]
  34. end
  35. function queue:size()
  36. return self._border - self._index
  37. end
  38. function queue:empty()
  39. return self:size() == 0
  40. end
  41. function queue:clear()
  42. if self:empty() then
  43. for i = self._index, self._border do
  44. self._data[i] = nil
  45. end
  46. end
  47. self:reset()
  48. end
  49. function queue:reset()
  50. self._index = 0
  51. self._border = 0
  52. self._data = {}
  53. end
  54. return queue