Advertisement
nponeccop

Node.js FIFO queue using a circular buffer

Apr 3rd, 2012
400
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. exports.allocate = function(size, fillFunc)
  2. {
  3.     var
  4.         data = new Array(size)
  5.     ,   pushPtr = 0
  6.     ,   full = false
  7.  
  8.     var obj = {
  9.         push : function (item)
  10.         {
  11.             data[pushPtr] = item
  12.             pushPtr += 1
  13. //          console.log("Pushing: size = " + data.length + " pushPtr = " + pushPtr + "Memory: " + logMemory() + "\n")
  14.             if (pushPtr >= data.length)
  15.             {
  16.                 full = true
  17.                 pushPtr = 0
  18.             }
  19.         }
  20.  
  21.     ,   all : function ()
  22.         {
  23.             if (full)
  24.             {
  25.                 return data.slice(pushPtr).concat(data.slice(0, pushPtr))
  26.             }
  27.             else
  28.             {
  29.                 return data.slice(0, pushPtr)
  30.             }
  31.         }
  32.     , get : function (index)
  33.         {
  34.             var pushedCount = full ? data.length : pushPtr
  35.             if (index < 0 || index >= pushedCount)
  36.             {
  37.                 return null
  38.             }
  39.  
  40.             var i = pushPtr - 1 - index
  41.  
  42.             if (full)
  43.             {
  44.                 if (i >= 0)
  45.                 {
  46.                     return data[i]
  47.                 }
  48.                 else
  49.                 {
  50.                     return data[i + data.length]
  51.                 }
  52.  
  53.             }
  54.             else
  55.             {
  56.                 if (i >= 0)
  57.                 {
  58.                     return data[i]
  59.                 }
  60.                 else
  61.                 {
  62.                     return null
  63.                 }
  64.             }
  65.  
  66.         }
  67.     }
  68.     if (fillFunc !== undefined)
  69.     {
  70.         for (i = 0; i < size; i++)
  71.         {
  72.             obj.push(fillFunc(i))
  73.         }
  74.     }
  75.     return obj
  76. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement