{"version":3,"file":"algorithmUtil.cjs","sources":["../../../../../../../packages/vue-components/vc-virtual-list/src/utils/algorithmUtil.ts"],"sourcesContent":["/**\n * Get index with specific start index one by one. e.g.\n * min: 3, max: 9, start: 6\n *\n * Return index is:\n * [0]: 6\n * [1]: 7\n * [2]: 5\n * [3]: 8\n * [4]: 4\n * [5]: 9\n * [6]: 3\n */\nexport function getIndexByStartLoc(min, max, start, index) {\n  const beforeCount = start - min;\n  const afterCount = max - start;\n  const balanceCount = Math.min(beforeCount, afterCount) * 2;\n\n  // Balance\n  if (index <= balanceCount) {\n    const stepIndex = Math.floor(index / 2);\n    if (index % 2)\n      return start + stepIndex + 1;\n\n    return start - stepIndex;\n  }\n\n  // One is out of range\n  if (beforeCount > afterCount)\n    return start - (index - afterCount);\n\n  return start + (index - beforeCount);\n}\n\n/**\n * We assume that 2 list has only 1 item diff and others keeping the order.\n * So we can use dichotomy algorithm to find changed one.\n */\nexport function findListDiffIndex(originList, targetList, getKey) {\n  const originLen = originList.length;\n  const targetLen = targetList.length;\n\n  let shortList;\n  let longList;\n\n  if (originLen === 0 && targetLen === 0)\n    return null;\n\n  if (originLen < targetLen) {\n    shortList = originList;\n    longList = targetList;\n  } else {\n    shortList = targetList;\n    longList = originList;\n  }\n\n  const notExistKey = { __EMPTY_ITEM__: true };\n  function getItemKey(item) {\n    if (item !== undefined)\n      return getKey(item);\n\n    return notExistKey;\n  }\n\n  // Loop to find diff one\n  let diffIndex = null;\n  let multiple = Math.abs(originLen - targetLen) !== 1;\n  for (let i = 0; i < longList.length; i += 1) {\n    const shortKey = getItemKey(shortList[i]);\n    const longKey = getItemKey(longList[i]);\n\n    if (shortKey !== longKey) {\n      diffIndex = i;\n      multiple = multiple || shortKey !== getItemKey(longList[i + 1]);\n      break;\n    }\n  }\n\n  return diffIndex === null ? null : { index: diffIndex, multiple };\n}\n"],"names":[],"mappings":";;AAaO,SAAS,kBAAmB,CAAA,GAAA,EAAK,GAAK,EAAA,KAAA,EAAO,KAAO,EAAA;AACzD,EAAA,MAAM,cAAc,KAAQ,GAAA,GAAA,CAAA;AAC5B,EAAA,MAAM,aAAa,GAAM,GAAA,KAAA,CAAA;AACzB,EAAA,MAAM,YAAe,GAAA,IAAA,CAAK,GAAI,CAAA,WAAA,EAAa,UAAU,CAAI,GAAA,CAAA,CAAA;AAGzD,EAAA,IAAI,SAAS,YAAc,EAAA;AACzB,IAAA,MAAM,SAAY,GAAA,IAAA,CAAK,KAAM,CAAA,KAAA,GAAQ,CAAC,CAAA,CAAA;AACtC,IAAA,IAAI,KAAQ,GAAA,CAAA;AACV,MAAA,OAAO,QAAQ,SAAY,GAAA,CAAA,CAAA;AAE7B,IAAA,OAAO,KAAQ,GAAA,SAAA,CAAA;AAAA,GACjB;AAGA,EAAA,IAAI,WAAc,GAAA,UAAA;AAChB,IAAA,OAAO,SAAS,KAAQ,GAAA,UAAA,CAAA,CAAA;AAE1B,EAAA,OAAO,SAAS,KAAQ,GAAA,WAAA,CAAA,CAAA;AAC1B,CAAA;AAMgB,SAAA,iBAAA,CAAkB,UAAY,EAAA,UAAA,EAAY,MAAQ,EAAA;AAChE,EAAA,MAAM,YAAY,UAAW,CAAA,MAAA,CAAA;AAC7B,EAAA,MAAM,YAAY,UAAW,CAAA,MAAA,CAAA;AAE7B,EAAI,IAAA,SAAA,CAAA;AACJ,EAAI,IAAA,QAAA,CAAA;AAEJ,EAAI,IAAA,SAAA,KAAc,KAAK,SAAc,KAAA,CAAA;AACnC,IAAO,OAAA,IAAA,CAAA;AAET,EAAA,IAAI,YAAY,SAAW,EAAA;AACzB,IAAY,SAAA,GAAA,UAAA,CAAA;AACZ,IAAW,QAAA,GAAA,UAAA,CAAA;AAAA,GACN,MAAA;AACL,IAAY,SAAA,GAAA,UAAA,CAAA;AACZ,IAAW,QAAA,GAAA,UAAA,CAAA;AAAA,GACb;AAEA,EAAM,MAAA,WAAA,GAAc,EAAE,cAAA,EAAgB,IAAK,EAAA,CAAA;AAC3C,EAAA,SAAS,WAAW,IAAM,EAAA;AACxB,IAAA,IAAI,IAAS,KAAA,KAAA,CAAA;AACX,MAAA,OAAO,OAAO,IAAI,CAAA,CAAA;AAEpB,IAAO,OAAA,WAAA,CAAA;AAAA,GACT;AAGA,EAAA,IAAI,SAAY,GAAA,IAAA,CAAA;AAChB,EAAA,IAAI,QAAW,GAAA,IAAA,CAAK,GAAI,CAAA,SAAA,GAAY,SAAS,CAAM,KAAA,CAAA,CAAA;AACnD,EAAA,KAAA,IAAS,IAAI,CAAG,EAAA,CAAA,GAAI,QAAS,CAAA,MAAA,EAAQ,KAAK,CAAG,EAAA;AAC3C,IAAA,MAAM,QAAW,GAAA,UAAA,CAAW,SAAU,CAAA,CAAC,CAAC,CAAA,CAAA;AACxC,IAAA,MAAM,OAAU,GAAA,UAAA,CAAW,QAAS,CAAA,CAAC,CAAC,CAAA,CAAA;AAEtC,IAAA,IAAI,aAAa,OAAS,EAAA;AACxB,MAAY,SAAA,GAAA,CAAA,CAAA;AACZ,MAAA,QAAA,GAAW,YAAY,QAAa,KAAA,UAAA,CAAW,QAAS,CAAA,CAAA,GAAI,CAAC,CAAC,CAAA,CAAA;AAC9D,MAAA,MAAA;AAAA,KACF;AAAA,GACF;AAEA,EAAA,OAAO,cAAc,IAAO,GAAA,IAAA,GAAO,EAAE,KAAA,EAAO,WAAW,QAAS,EAAA,CAAA;AAClE;;;;;"}