UNPKG

openfl

Version:

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

197 lines (179 loc) 5.5 kB
// Class: haxe.ds.BalancedTree 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; function haxe_IMap() {return require("./../../haxe/IMap");} function haxe_CallStack() {return require("./../../haxe/CallStack");} function js__$Boot_HaxeError() {return require("./../../js/_Boot/HaxeError");} function HxOverrides() {return require("./../../HxOverrides");} function haxe_ds_TreeNode() {return require("./../../haxe/ds/TreeNode");} function Reflect() {return require("./../../Reflect");} // Constructor var BalancedTree = function() { } // Meta BalancedTree.__name__ = "haxe.ds.BalancedTree"; BalancedTree.__isInterface__ = false; BalancedTree.__interfaces__ = [(haxe_IMap().default)]; BalancedTree.prototype = { set: function(key,value) { this.root = this.setLoop(key,value,this.root); }, get: function(key) { var node = this.root; while(node != null) { var c = this.compare(key,node.key); if(c == 0) { return node.value; } if(c < 0) { node = node.left; } else { node = node.right; } } return null; }, remove: function(key) { try { this.root = this.removeLoop(key,this.root); return true; } catch( e ) { (haxe_CallStack().default).lastException = e; var e1 = ((e) instanceof (js__$Boot_HaxeError().default)) ? e.val : e; if(typeof(e1) == "string") { var e2 = e1; return false; } else { throw e; } } }, exists: function(key) { var node = this.root; while(node != null) { var c = this.compare(key,node.key); if(c == 0) { return true; } else if(c < 0) { node = node.left; } else { node = node.right; } } return false; }, iterator: function() { var ret = []; this.iteratorLoop(this.root,ret); return (HxOverrides().default).iter(ret); }, keys: function() { var ret = []; this.keysLoop(this.root,ret); return (HxOverrides().default).iter(ret); }, setLoop: function(k,v,node) { if(node == null) { return new (haxe_ds_TreeNode().default)(null,k,v,null); } var c = this.compare(k,node.key); if(c == 0) { return new (haxe_ds_TreeNode().default)(node.left,k,v,node.right,node == null ? 0 : node._height); } else if(c < 0) { var nl = this.setLoop(k,v,node.left); return this.balance(nl,node.key,node.value,node.right); } else { var nr = this.setLoop(k,v,node.right); return this.balance(node.left,node.key,node.value,nr); } }, removeLoop: function(k,node) { if(node == null) { throw new (js__$Boot_HaxeError().default)("Not_found"); } var c = this.compare(k,node.key); if(c == 0) { return this.merge(node.left,node.right); } else if(c < 0) { return this.balance(this.removeLoop(k,node.left),node.key,node.value,node.right); } else { return this.balance(node.left,node.key,node.value,this.removeLoop(k,node.right)); } }, iteratorLoop: function(node,acc) { if(node != null) { this.iteratorLoop(node.left,acc); acc.push(node.value); this.iteratorLoop(node.right,acc); } }, keysLoop: function(node,acc) { if(node != null) { this.keysLoop(node.left,acc); acc.push(node.key); this.keysLoop(node.right,acc); } }, merge: function(t1,t2) { if(t1 == null) { return t2; } if(t2 == null) { return t1; } var t = this.minBinding(t2); return this.balance(t1,t.key,t.value,this.removeMinBinding(t2)); }, minBinding: function(t) { if(t == null) { throw new (js__$Boot_HaxeError().default)("Not_found"); } else if(t.left == null) { return t; } else { return this.minBinding(t.left); } }, removeMinBinding: function(t) { if(t.left == null) { return t.right; } else { return this.balance(this.removeMinBinding(t.left),t.key,t.value,t.right); } }, balance: function(l,k,v,r) { var hl = l == null ? 0 : l._height; var hr = r == null ? 0 : r._height; if(hl > hr + 2) { var _this = l.left; var _this1 = l.right; if((_this == null ? 0 : _this._height) >= (_this1 == null ? 0 : _this1._height)) { return new (haxe_ds_TreeNode().default)(l.left,l.key,l.value,new (haxe_ds_TreeNode().default)(l.right,k,v,r)); } else { return new (haxe_ds_TreeNode().default)(new (haxe_ds_TreeNode().default)(l.left,l.key,l.value,l.right.left),l.right.key,l.right.value,new (haxe_ds_TreeNode().default)(l.right.right,k,v,r)); } } else if(hr > hl + 2) { var _this2 = r.right; var _this3 = r.left; if((_this2 == null ? 0 : _this2._height) > (_this3 == null ? 0 : _this3._height)) { return new (haxe_ds_TreeNode().default)(new (haxe_ds_TreeNode().default)(l,k,v,r.left),r.key,r.value,r.right); } else { return new (haxe_ds_TreeNode().default)(new (haxe_ds_TreeNode().default)(l,k,v,r.left.left),r.left.key,r.left.value,new (haxe_ds_TreeNode().default)(r.left.right,r.key,r.value,r.right)); } } else { return new (haxe_ds_TreeNode().default)(l,k,v,r,(hl > hr ? hl : hr) + 1); } }, compare: function(k1,k2) { return (Reflect().default).compare(k1,k2); } }; BalancedTree.prototype.__class__ = BalancedTree.prototype.constructor = $hxClasses["haxe.ds.BalancedTree"] = BalancedTree; // Init // Statics // Export exports.default = BalancedTree;