{"version":3,"sources":["jsdelivr-header.js","/npm/box-intersect@1.0.2/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,aAEA,OAAO,QAAU,oBAEjB,IAkGI,OAlGA,KAAO,QAAQ,mBACf,MAAQ,QAAQ,eAChB,iBAAmB,QAAQ,mBAE/B,SAAS,SAAS,EAAG,GACnB,IAAI,IAAI,EAAE,EAAG,EAAE,IAAK,EAClB,KAAK,EAAI,IAAM,EAAI,EAAE,IACnB,OAAO,EAGX,OAAO,CACT,CAGA,SAAS,aAAa,EAAO,EAAG,EAAM,GAGpC,IAFA,IAAI,EAAM,EACN,EAAQ,EACJ,EAAE,EAAG,EAAE,EAAM,OAAQ,EAAE,IAAK,EAAG,CACrC,IAAI,EAAI,EAAM,GACd,IAAG,SAAS,EAAG,GAAf,CAGA,IAAI,IAAI,EAAE,EAAG,EAAE,EAAE,IAAK,EACpB,EAAK,KAAS,EAAE,GAElB,EAAI,KAAW,CAJf,CAKF,CACA,OAAO,CACT,CAGA,SAAS,aAAa,EAAK,EAAM,EAAO,GACtC,IAAI,EAAI,EAAI,OACR,EAAI,EAAK,OAGb,KAAG,GAAK,GAAK,GAAK,GAAlB,CAKA,IAAI,EAAK,EAAI,GAAS,SAAI,EAC1B,KAAG,GAAK,GAAR,CAIA,IAAI,EAGA,EAAW,KAAK,aAAa,EAAE,EAAE,GACjC,EAAW,KAAK,YAAY,GAGhC,IAFA,EAAI,aAAa,EAAK,EAAG,EAAS,IAE3B,EAAG,CACR,GAAS,IAAN,GAAW,EAEZ,MAAM,KAAK,GACX,EAAS,MAAM,cACb,EAAG,EACH,EAAG,EAAG,EAAS,EACf,EAAG,EAAG,EAAS,OACZ,CAGL,IAAI,EAAW,KAAK,aAAa,EAAE,EAAE,GACjC,EAAW,KAAK,YAAY,IAChC,EAAI,aAAa,EAAM,EAAG,EAAU,IAE7B,IACL,MAAM,KAAK,EAAE,GAIX,EAFO,IAAN,EAEQ,MAAM,eACb,EAAG,EACH,EAAG,EAAG,EAAU,EAChB,EAAG,EAAG,EAAU,GAGT,iBACP,EAAG,EAAU,EACb,EAAG,EAAU,EACb,EAAG,EAAU,GAGjB,KAAK,KAAK,GACV,KAAK,KAAK,GAEd,CAEA,KAAK,KAAK,GACV,KAAK,KAAK,EACZ,CAEA,OAAO,CAlDP,CANA,CAyDF,CAKA,SAAS,WAAW,EAAE,GACpB,OAAO,KAAK,CAAC,EAAE,GACjB,CAEA,SAAS,mBAAmB,GAG1B,OAFA,OAAS,GACT,aAAa,EAAG,EAAG,YAAY,GACxB,MACT,CAEA,SAAS,wBAAwB,EAAG,GAGlC,OAFA,OAAS,GACT,aAAa,EAAG,EAAG,YAAY,GACxB,MACT,CAGA,SAAS,oBAAoB,EAAM,EAAM,GAEvC,OAAO,UAAU,QACf,KAAK,EACH,OAAO,mBAAmB,GAC5B,KAAK,EACH,MAAmB,mBAAT,EACD,aAAa,EAAM,EAAM,GAAM,GAE/B,wBAAwB,EAAM,GAEzC,KAAK,EACH,OAAO,aAAa,EAAM,EAAM,GAAM,GACxC,QACE,MAAM,IAAI,MAAM,oCAEtB","file":"/npm/box-intersect@1.0.2/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.37.0.\n * Original file: /npm/box-intersect@1.0.2/index.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\nmodule.exports = boxIntersectWrapper\n\nvar pool = require('typedarray-pool')\nvar sweep = require('./lib/sweep')\nvar boxIntersectIter = require('./lib/intersect')\n\nfunction boxEmpty(d, box) {\n  for(var j=0; j<d; ++j) {\n    if(!(box[j] <= box[j+d])) {\n      return true\n    }\n  }\n  return false\n}\n\n//Unpack boxes into a flat typed array, remove empty boxes\nfunction convertBoxes(boxes, d, data, ids) {\n  var ptr = 0\n  var count = 0\n  for(var i=0, n=boxes.length; i<n; ++i) {\n    var b = boxes[i]\n    if(boxEmpty(d, b)) {\n      continue\n    }\n    for(var j=0; j<2*d; ++j) {\n      data[ptr++] = b[j]\n    }\n    ids[count++] = i\n  }\n  return count\n}\n\n//Perform type conversions, check bounds\nfunction boxIntersect(red, blue, visit, full) {\n  var n = red.length\n  var m = blue.length\n\n  //If either array is empty, then we can skip this whole thing\n  if(n <= 0 || m <= 0) {\n    return\n  }\n\n  //Compute dimension, if it is 0 then we skip\n  var d = (red[0].length)>>>1\n  if(d <= 0) {\n    return\n  }\n\n  var retval\n\n  //Convert red boxes\n  var redList  = pool.mallocDouble(2*d*n)\n  var redIds   = pool.mallocInt32(n)\n  n = convertBoxes(red, d, redList, redIds)\n\n  if(n > 0) {\n    if(d === 1 && full) {\n      //Special case: 1d complete\n      sweep.init(n)\n      retval = sweep.sweepComplete(\n        d, visit, \n        0, n, redList, redIds,\n        0, n, redList, redIds)\n    } else {\n\n      //Convert blue boxes\n      var blueList = pool.mallocDouble(2*d*m)\n      var blueIds  = pool.mallocInt32(m)\n      m = convertBoxes(blue, d, blueList, blueIds)\n\n      if(m > 0) {\n        sweep.init(n+m)\n\n        if(d === 1) {\n          //Special case: 1d bipartite\n          retval = sweep.sweepBipartite(\n            d, visit, \n            0, n, redList,  redIds,\n            0, m, blueList, blueIds)\n        } else {\n          //General case:  d>1\n          retval = boxIntersectIter(\n            d, visit,    full,\n            n, redList,  redIds,\n            m, blueList, blueIds)\n        }\n\n        pool.free(blueList)\n        pool.free(blueIds)\n      }\n    }\n\n    pool.free(redList)\n    pool.free(redIds)\n  }\n\n  return retval\n}\n\n\nvar RESULT\n\nfunction appendItem(i,j) {\n  RESULT.push([i,j])\n}\n\nfunction intersectFullArray(x) {\n  RESULT = []\n  boxIntersect(x, x, appendItem, true)\n  return RESULT\n}\n\nfunction intersectBipartiteArray(x, y) {\n  RESULT = []\n  boxIntersect(x, y, appendItem, false)\n  return RESULT\n}\n\n//User-friendly wrapper, handle full input and no-visitor cases\nfunction boxIntersectWrapper(arg0, arg1, arg2) {\n  var result\n  switch(arguments.length) {\n    case 1:\n      return intersectFullArray(arg0)\n    case 2:\n      if(typeof arg1 === 'function') {\n        return boxIntersect(arg0, arg0, arg1, true)\n      } else {\n        return intersectBipartiteArray(arg0, arg1)\n      }\n    case 3:\n      return boxIntersect(arg0, arg1, arg2, false)\n    default:\n      throw new Error('box-intersect: Invalid arguments')\n  }\n}"]}