UNPKG

openfl

Version:

A fast, productive library for 2D cross-platform development.

167 lines (149 loc) 3.44 kB
// Class: haxe.ds.ArraySort var $global = typeof window != "undefined" ? window : typeof global != "undefined" ? global : typeof self != "undefined" ? self : this $global.Object.defineProperty(exports, "__esModule", {value: true}); var __map_reserved = {}; // Imports var $hxClasses = require("./../../hxClasses_stub").default; var $hxEnums = require("./../../hxEnums_stub").default; var $import = require("./../../import_stub").default; // Constructor var ArraySort = function(){} // Meta ArraySort.__name__ = "haxe.ds.ArraySort"; ArraySort.__isInterface__ = false; ArraySort.prototype = { }; ArraySort.prototype.__class__ = ArraySort.prototype.constructor = $hxClasses["haxe.ds.ArraySort"] = ArraySort; // Init // Statics ArraySort.sort = function(a,cmp) { ArraySort.rec(a,cmp,0,a.length); } ArraySort.rec = function(a,cmp,from,to) { var middle = from + to >> 1; if(to - from < 12) { if(to <= from) { return; } var _g = from + 1; var _g1 = to; while(_g < _g1) { var i = _g++; var j = i; while(j > from) { if(ArraySort.compare(a,cmp,j,j - 1) < 0) { ArraySort.swap(a,j - 1,j); } else { break; } --j; } } return; } ArraySort.rec(a,cmp,from,middle); ArraySort.rec(a,cmp,middle,to); ArraySort.doMerge(a,cmp,from,middle,to,middle - from,to - middle); } ArraySort.doMerge = function(a,cmp,from,pivot,to,len1,len2) { var first_cut; var second_cut; var len11; var len22; if(len1 == 0 || len2 == 0) { return; } if(len1 + len2 == 2) { if(ArraySort.compare(a,cmp,pivot,from) < 0) { ArraySort.swap(a,pivot,from); } return; } if(len1 > len2) { len11 = len1 >> 1; first_cut = from + len11; second_cut = ArraySort.lower(a,cmp,pivot,to,first_cut); len22 = second_cut - pivot; } else { len22 = len2 >> 1; second_cut = pivot + len22; first_cut = ArraySort.upper(a,cmp,from,pivot,second_cut); len11 = first_cut - from; } ArraySort.rotate(a,cmp,first_cut,pivot,second_cut); var new_mid = first_cut + len22; ArraySort.doMerge(a,cmp,from,first_cut,new_mid,len11,len22); ArraySort.doMerge(a,cmp,new_mid,second_cut,to,len1 - len11,len2 - len22); } ArraySort.rotate = function(a,cmp,from,mid,to) { if(from == mid || mid == to) { return; } var n = ArraySort.gcd(to - from,mid - from); while(n-- != 0) { var val = a[from + n]; var shift = mid - from; var p1 = from + n; var p2 = from + n + shift; while(p2 != from + n) { a[p1] = a[p2]; p1 = p2; if(to - p2 > shift) { p2 += shift; } else { p2 = from + (shift - (to - p2)); } } a[p1] = val; } } ArraySort.gcd = function(m,n) { while(n != 0) { var t = m % n; m = n; n = t; } return m; } ArraySort.upper = function(a,cmp,from,to,val) { var len = to - from; var half; var mid; while(len > 0) { half = len >> 1; mid = from + half; if(ArraySort.compare(a,cmp,val,mid) < 0) { len = half; } else { from = mid + 1; len = len - half - 1; } } return from; } ArraySort.lower = function(a,cmp,from,to,val) { var len = to - from; var half; var mid; while(len > 0) { half = len >> 1; mid = from + half; if(ArraySort.compare(a,cmp,mid,val) < 0) { from = mid + 1; len = len - half - 1; } else { len = half; } } return from; } ArraySort.swap = function(a,i,j) { var tmp = a[i]; a[i] = a[j]; a[j] = tmp; } ArraySort.compare = function(a,cmp,i,j) { return cmp(a[i],a[j]); } // Export exports.default = ArraySort;