This repository has been archived by the owner on Dec 25, 2018. It is now read-only.
/
createComparer.js.map
1 lines (1 loc) · 3.88 KB
/
createComparer.js.map
1
{"version":3,"sources":["System/Collections/Array/Sorting/createComparer.ts"],"names":[],"mappings":"AAAA;;;GAGG;OAGI,EAAC,IAAI,EAAC,MAAM,gBAAgB;OAC5B,EAAC,OAAO,EAAC,MAAM,kBAAkB;AAMxC,qBAAwB,KAAW;IAElC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;UACnB,KAAK;UACV,CAAI,KAAK,CAAC,CAAC;AACf,CAAC;AAyBD,+BACC,QAA4C,EAC5C,KAAK,GAAmB,CAAe,EACvC,eAAe,GAAO,GAAG;IAEzB,IAAI,gBAAgB,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;IAExD,MAAM,CAAC,CAAC,CAAmB,EAAE,CAAmB;QAG/C,IAAI,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,MAAM,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,IAAI,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;QAEjD,IAAI,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,IAAI,CAAC;QACjD,GAAG,CAAA,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAC,GAAG,EAAE,CAAC,EAAE,EACzB,CAAC;YACA,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,EACd,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,EACd,CAAC,GAAI,MAAM;kBACR,CAAC,CAAC,GAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAe,CAAC;kBACxC,KAAK,CAAC;YAEpB,EAAE,CAAA,CAAC,gBAAgB,CAAC,CACpB,CAAC;gBACA,EAAE,CAAA,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;oBACrB,EAAE,GAAG,eAAe,CAAC;gBACtB,EAAE,CAAA,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;oBACrB,EAAE,GAAG,eAAe,CAAC;YAEvB,CAAC;YAED,IAAI,CAAC,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;YACxB,EAAE,CAAA,CAAC,CAAC,KAAG,CAAmB,CAAC;gBAC1B,MAAM,CAAC,CAAC,GAAC,CAAC,CAAC;QAEb,CAAC;QAED,MAAM,CAAC,CAAC,CAAC;IACV,CAAC,CAAC;AACH,CAAC","file":"System/Collections/Array/Sorting/createComparer.js","sourcesContent":["/*!\r\n * @author electricessence / https://github.com/electricessence/\r\n * Licensing: MIT https://github.com/electricessence/TypeScript.NET/blob/master/LICENSE.md\r\n */\r\n\r\n\r\nimport {Type} from \"../../../Types\";\r\nimport {compare} from \"../../../Compare\";\r\nimport {Primitive} from \"../../../Primitive\";\r\nimport {Selector, Comparison} from \"../../../FunctionTypes\";\r\nimport {CompareResult} from \"../../../CompareResult\";\r\nimport {Order} from \"../../Sorting/Order\";\r\n\r\nfunction ensureArray<T>(value:T|T[]):T[]\r\n{\r\n\treturn Array.isArray(value)\r\n\t\t? <T[]>value\r\n\t\t: [<T>value];\r\n}\r\n\r\n/**\r\n * A factory function that creates a comparer to be used in multi-dimensional sorting.\r\n *\r\n * <h4>Example</h4>\r\n * ```typescript\r\n * var myArray = [{a:1:b:2},{a:3,b:4},{a:1,b:3}];\r\n *\r\n * // First sort by a, then by b.\r\n * myArray.sort(\r\n * createComparer(\r\n * (e)=> [e.a, e.b],\r\n * [Order.Ascending, Order.Descending]\r\n * )\r\n * );\r\n *\r\n * // result: [{a:1,b:3},{a:1:b:2},{a:3,b:4}]\r\n * ```\r\n *\r\n * @param selector\r\n * @param order\r\n * @param equivalentToNaN\r\n * @returns {function((TSource|TSource[]), (TSource|TSource[])): CompareResult}\r\n */\r\nexport function createComparer<TSource,TSelect extends Primitive>(\r\n\tselector:Selector<TSource|TSource[],TSelect>,\r\n\torder:Order | Order[] = Order.Ascending,\r\n\tequivalentToNaN:any = NaN):Comparison<TSource|TSource[]>\r\n{\r\n\tvar nanHasEquivalent = !Type.isTrueNaN(equivalentToNaN);\r\n\r\n\treturn (a:TSource|TSource[], b:TSource|TSource[]):CompareResult=>\r\n\t{\r\n\t\t// Use an array always to ensure a single code path.\r\n\t\tvar aValue = ensureArray(selector(a));\r\n\t\tvar bValue = ensureArray(selector(b));\r\n\t\tvar len = Math.min(aValue.length, bValue.length);\r\n\r\n\t\tvar oArray = Array.isArray(order) ? order : null;\r\n\t\tfor(let i = 0; i<len; i++)\r\n\t\t{\r\n\t\t\tvar vA = aValue[i],\r\n\t\t\t vB = bValue[i],\r\n\t\t\t o = oArray\r\n\t\t\t\t ? (i<oArray.length ? oArray[i] : Order.Ascending)\r\n\t\t\t\t : <Order>order;\r\n\r\n\t\t\tif(nanHasEquivalent)\r\n\t\t\t{\r\n\t\t\t\tif(Type.isTrueNaN(vA))\r\n\t\t\t\t\tvA = equivalentToNaN;\r\n\t\t\t\tif(Type.isTrueNaN(vB))\r\n\t\t\t\t\tvB = equivalentToNaN;\r\n\r\n\t\t\t}\r\n\r\n\t\t\tvar r = compare(vA, vB);\r\n\t\t\tif(r!==CompareResult.Equal)\r\n\t\t\t\treturn o*r;\r\n\r\n\t\t}\r\n\r\n\t\treturn 0;\r\n\t};\r\n}\r\n\r\n"]}