{"version":3,"sources":["jsdelivr-header.js","/npm/n-body-pairs@0.1.0/pairs.js"],"names":[],"mappings":"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","file":"/npm/n-body-pairs@0.1.0/pairs.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/n-body-pairs@0.1.0/pairs.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\"use strict\"\n\nfunction Storage(max_points, dimension) {\n  this.coordinates = new Array(dimension)\n  this.points = new Array(dimension)\n  for(var i=0; i<dimension; ++i) {\n    this.coordinates[i] = new Int32Array(max_points<<dimension)\n    this.points[i] = new Float64Array(max_points<<dimension)\n  }\n  this.indices = new Int32Array(max_points<<dimension)\n}\n\nStorage.prototype.resize = function(max_points) {\n  var dimension = this.coordinates.length\n  for(var i=0; i<dimension; ++i) {\n    this.coordinates[i] = new Int32Array(max_points<<dimension)\n    this.points[i] = new Float64Array(max_points<<dimension)\n  }\n  this.indices = new Int32Array(max_points<<dimension)\n}\n\nStorage.prototype.size = function() {\n  return this.indices >> this.coordinates.length\n}\n\nStorage.prototype.move = function(p, q) {\n  var coords = this.coordinates\n    , points = this.points\n    , indices = this.indices\n    , dimension = coords.length\n    , a, b, k\n  for(k=0; k<dimension; ++k) {\n    a = coords[k]\n    a[p] = a[q]\n    b = points[k]\n    b[p] = b[q]\n  }\n  indices[p] = indices[q]\n}\n\nStorage.prototype.load = function(scratch, i) {\n  var coords = this.coordinates\n    , points = this.points\n  for(var k=0, d=coords.length; k<d; ++k) {\n    scratch[k] = coords[k][i]|0\n    scratch[k+d+1] = +points[k][i]\n  }\n  scratch[d] = this.indices[i]|0\n}\n\nStorage.prototype.store = function(i, scratch) {\n  var coords = this.coordinates\n    , points = this.points\n  for(var k=0, d=coords.length; k<d; ++k) {\n    coords[k][i] = scratch[k]\n    points[k][i] = scratch[k+d+1]\n  }\n  this.indices[i] = scratch[d]\n}\n\nStorage.prototype.swap = function(i, j) {\n  var coords = this.coordinates\n  var points = this.points\n  var ind = this.indices\n  var t, a, b\n  for(var k=0, d=coords.length; k<d; ++k) {\n    a = coords[k]\n    t = a[i]\n    a[i] = a[j]\n    a[j] = t\n    b = points[k]\n    t = b[i]\n    b[i] = b[j]\n    b[j] = t\n  }\n  t = ind[i]\n  ind[i] = ind[j]\n  ind[j] = t\n}\n\nStorage.prototype.compare = function(i,j) {\n  var coords = this.coordinates\n  for(var k=0, d=coords.length; k<d; ++k) {\n    var a = coords[k]\n      , s = a[i] - a[j]\n    if(s) { return s }\n  }\n  return this.indices[i] - this.indices[j]\n}\n\nStorage.prototype.compareNoId = function(i,j) {\n  var coords = this.coordinates\n  for(var k=0, d=coords.length-1; k<d; ++k) {\n    var a = coords[k]\n      , s = a[i] - a[j]\n    if(s) { return s }\n  }\n  return coords[d][i] - coords[d][j]\n}\n\nStorage.prototype.compareS = function(i, scratch) {\n  var coords = this.coordinates\n  for(var k=0, d=coords.length; k<d; ++k) {\n    var s = coords[k][i] - scratch[k]\n    if(s) { return s }\n  }\n  return this.indices[i] - scratch[d]\n}\n\n/*\n  Modified from this: http://stackoverflow.com/questions/8082425/fastest-way-to-sort-32bit-signed-integer-arrays-in-javascript\n */\nStorage.prototype.sort = function(n) {\n  var coords = this.coordinates\n  var points = this.points\n  var indices = this.indices\n  var dimension = coords.length|0\n  var stack = []\n  var sp = -1\n  var left = 0\n  var right = n - 1\n  var i, j, k, d, swap = new Array(2*dimension+1), a, b, p, q, t\n  for(i=0; i<dimension; ++i) {\n    swap[i] = 0|0\n  }\n  swap[dimension] = 0|0\n  for(i=0; i<dimension; ++i) {\n    swap[dimension+1+i] = +0.0\n  }\n  while(true) {\n    if(right - left <= 25){\n      for(j=left+1; j<=right; j++) {\n        for(k=0; k<dimension; ++k) {\n          swap[k] = coords[k][j]|0\n          swap[k+dimension+1] = +points[k][j]\n        }\n        swap[dimension] = indices[j]|0\n        i = j-1;        \nlo_loop:\n        while(i >= left) {\n          for(k=0; k<dimension; ++k) {\n            d = coords[k][i] - swap[k]\n            if(d < 0) {\n              break lo_loop\n            } if(d > 0) {\n              break\n            }\n          }\n          p = i+1\n          q = i--\n          for(k=0; k<dimension; ++k) {\n            a = coords[k]\n            a[p] = a[q]\n            b = points[k]\n            b[p] = b[q]\n          }\n          indices[p] = indices[q]\n        }\n        this.store(i+1, swap)\n      }\n      if(sp == -1)    break;\n      right = stack[sp--];\n      left = stack[sp--];\n    } else {\n      var median = (left + right) >> 1;\n      i = left + 1;\n      j = right;\n      \n      this.swap(median, i)\n      if(this.compare(left, right) > 0) {\n        this.swap(left, right)\n      } if(this.compare(i, right) > 0) {\n        this.swap(i, right)\n      } if(this.compare(left, i) > 0) {\n        this.swap(left, i)\n      }\n      \n      this.load(swap, i)\n      while(true){\nii_loop:\n        while(true) {\n          ++i\n          for(k=0; k<dimension; ++k) {\n            d = coords[k][i] - swap[k]\n            if(d > 0) {\n              break ii_loop\n            } if(d < 0) {\n              continue ii_loop\n            }\n          }\n          if(indices[i] >= swap[dimension]) {\n            break\n          }\n        }\njj_loop:\n        while(true) {\n          --j\n          for(k=0; k<dimension; ++k) {\n            d = coords[k][j] - swap[k]\n            if(d < 0) {\n              break jj_loop\n            } if(d > 0) {\n              continue jj_loop\n            }\n          }\n          if(indices[j] <= swap[dimension]) {\n            break\n          }\n        }\n        if(j < i)    break;\n        for(k=0; k<dimension; ++k) {\n          a = coords[k]\n          t = a[i]\n          a[i] = a[j]\n          a[j] = t\n          b = points[k]\n          t = b[i]\n          b[i] = b[j]\n          b[j] = t\n        }\n        t = indices[i]\n        indices[i] = indices[j]\n        indices[j] = t\n      }\n      this.move(left+1, j)\n      this.store(j, swap)\n      if(right - i + 1 >= j - left){\n        stack[++sp] = i;\n        stack[++sp] = right;\n        right = j - 1;\n      }else{\n        stack[++sp] = left;\n        stack[++sp] = j - 1;\n        left = i;\n      }\n    }\n  }\n}\n\nStorage.prototype.hashPoints = function(points, bucketSize, radius) {\n  var floor = Math.floor\n    , coords = this.coordinates\n    , spoints = this.points\n    , indices = this.indices\n    , count = points.length|0\n    , dimension = coords.length|0\n    , dbits = (1<<dimension)|0\n    , ptr = 0\n  for(var i=0; i<count; ++i) {\n    var t = ptr\n      , p = points[i]\n      , cross = 0\n    for(var j=0; j<dimension; ++j) {\n      var ix = floor(p[j]/bucketSize)\n      coords[j][ptr] = ix\n      spoints[j][ptr] = p[j]\n      if(bucketSize*(ix+1) <= p[j]+2*radius) {\n        cross += (1<<j)\n      }\n    }\n    indices[ptr++] = i\n    cross = ~cross\n    for(var j=1; j<dbits; ++j) {\n      if(j & cross) {\n        continue\n      }\n      for(var k=0; k<dimension; ++k) {\n        var c = coords[k]\n        c[ptr] = c[t]+((j>>>k)&1)\n        spoints[k][ptr] = p[k]\n      }\n      indices[ptr++] = i\n    }\n  }\n  return ptr\n}\n\nStorage.prototype.computePairs = function(cellCount, bucketSize, radius, cb) {\n  var floor = Math.floor\n    , coords = this.coordinates\n    , points = this.points\n    , indices = this.indices\n    , dimension = coords.length|0\n    , ptr = 0\n    , r2 = 4 * radius * radius\n    , i, j, k, l\n    , a, b, pa, pb, d, d2, ac, bc\n  for(i=0; i<cellCount;) {\n    for(j=i+1; j<cellCount; ++j) {\n      if(this.compareNoId(i, j) !== 0) {\n        break\n      }\n      a = indices[j]\nk_loop:\n      for(k=i; k<j; ++k) {\n        b = indices[k]\n        d2 = 0.0\n        for(l=0; l<dimension; ++l) {\n          ac = points[l][j]\n          bc = points[l][k]\n          if(ac > bc) {\n            if(coords[l][i] !== floor(ac/bucketSize)) {\n              continue k_loop\n            }\n          } else if(coords[l][i] !== floor(bc/bucketSize)) {\n            continue k_loop\n          }\n          d = ac - bc\n          d2 += d * d\n          if(d2 > r2) {\n            continue k_loop\n          }\n        }\n        if(cb(a, b, d2)) {\n          return\n        }\n      }\n    }\n    i = j\n  }\n}\n\nfunction createNBodyDataStructure(dimension, num_points) {\n  dimension = (dimension|0) || 2\n  var grid = new Storage(num_points||1024, dimension)\n  \n  function findPairs(points, radius, cb) {\n    var count = points.length|0\n    var cellCount = count<<dimension\n    if(grid.size() < cellCount) {\n      grid.resize(count)\n    }\n    var bucketSize = 4*radius\n    var nc = grid.hashPoints(points, bucketSize, radius)\n    grid.sort(nc)\n    grid.computePairs(nc, bucketSize, radius, cb)\n  }\n  \n  Object.defineProperty(findPairs, \"capacity\", {\n    get: function() {\n      return grid.size()\n    },\n    set: function(n_capacity) {\n      grid.resize(n_points)\n      return grid.size()\n    }\n  })\n  \n  return findPairs\n}\n\nmodule.exports = createNBodyDataStructure\n"]}