Advertisement
Guest User

Untitled

a guest
May 5th, 2015
198
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.37 KB | None | 0 0
  1. local ENQUEUE_CAPACITY = 100
  2.  
  3. local function l_exists(rec, bin)
  4. if aerospike:exists(rec)
  5. and rec[bin] ~= nil
  6. and type(rec) == "userdata" then
  7. return true
  8. end
  9. return false
  10. end
  11.  
  12. local function l_update(rec)
  13. if aerospike:exists(rec) then
  14. aerospike:update(rec)
  15. else
  16. aerospike:create(rec)
  17. end
  18. end
  19.  
  20. local function l_enqueue(q, value)
  21. if q.rear == nil then
  22. q.rear = list(ENQUEUE_CAPACITY)
  23. end
  24. list.append(q.rear, value)
  25. q.size = q.size + 1
  26. end
  27.  
  28. local function l_dequeue(q)
  29. if q.front == nil then
  30. q.front = q.rear
  31. q.pos = 1
  32. map.remove(q, "rear")
  33. end
  34.  
  35. local item = nil
  36. local last = list.size(q.front)
  37. if last == 1 then
  38. item = q.front[1]
  39. map.remove(q, "front")
  40. map.remove(q, "pos")
  41. else
  42. if q.pos < last then
  43. item = q.front[q.pos]
  44. q.front[q.pos] = q.front[last]
  45. q.pos = q.pos + 1
  46. else
  47. item = q.front[last]
  48. end
  49. list.remove(q.front, last)
  50. end
  51. q.size = q.size - 1
  52. return item
  53. end
  54.  
  55. function enqueue(rec, bin, value)
  56. local q = rec[bin]
  57. if q == nil then
  58. q = map { size = 0 }
  59. end
  60. l_enqueue(q, value)
  61. rec[bin] = q
  62. l_update(rec)
  63. return q.size
  64. end
  65.  
  66. function dequeue(rec, bin)
  67. if not l_exists(rec, bin) then
  68. return nil
  69. end
  70.  
  71. local q = rec[bin]
  72. if q.size == 0 then
  73. return nil
  74. end
  75.  
  76. local item = l_dequeue(q)
  77. rec[bin] = q
  78. l_update(rec)
  79. return item
  80. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement