BrainStone

Lua Queue

Dec 7th, 2015
155
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 1.25 KB | None | 0 0
  1. -- Queue Table
  2. -- Uses a table as stack, use <table>:push(value) and <table>:pop()
  3. -- Lua 5.1 compatible
  4.  
  5. -- Create a Table with queue functions
  6. function Create()
  7.  
  8.   -- queue table
  9.   local t = {first = 0, last = -1}
  10.  
  11.   -- push a value on to the queue
  12.   function t:push(...)
  13.     if ... then
  14.       local last
  15.       local targs = {...}
  16.       -- add values
  17.       for _,v in ipairs(targs) do
  18.         last = self.last + 1
  19.         self.last = last
  20.         self[last] = v
  21.       end
  22.     end
  23.   end
  24.  
  25.   -- pop a value from the queue
  26.   function t:pop(num)
  27.  
  28.     -- get num values from queue
  29.     local num = num or 1
  30.  
  31.     -- return table
  32.     local entries = {}
  33.     local first
  34.  
  35.     -- get values into entries
  36.     for i = 1, num do
  37.       first = self.first
  38.      
  39.       -- get first entry
  40.       if first <= self.last then
  41.         table.insert(entries, self[first])
  42.         -- remove last value
  43.        
  44.         self[first] = nil
  45.         self.first = first + 1
  46.       else
  47.         break
  48.       end
  49.     end
  50.     -- return unpacked entries
  51.     return unpack(entries)
  52.   end
  53.  
  54.   -- get entries
  55.   function t:size()
  56.     return self.last - self.first + 1
  57.   end
  58.  
  59.   function t:empty()
  60.     return self.first > self.last
  61.   end
  62.  
  63.   return t
  64. end
Advertisement
Add Comment
Please, Sign In to add comment