diff --git a/core/connection_db.js b/core/connection_db.js index f1968f957..476b824bb 100644 --- a/core/connection_db.js +++ b/core/connection_db.js @@ -36,15 +36,14 @@ goog.require('Blockly.Connection'); * @constructor */ Blockly.ConnectionDB = function() { + /** + * Array of connections sorted by y coordinate. + * @type {!Array.} + * @private + */ + this.connections_ = []; }; -Blockly.ConnectionDB.prototype = new Array(); -/** - * Don't inherit the constructor from Array. - * @type {!Function} - */ -Blockly.ConnectionDB.constructor = Blockly.ConnectionDB; - /** * Add a connection to the database. Must not already exist in DB. * @param {!Blockly.Connection} connection The connection to be added. @@ -58,7 +57,7 @@ Blockly.ConnectionDB.prototype.addConnection = function(connection) { return; } var position = this.findPositionForConnection_(connection); - this.splice(position, 0, connection); + this.connections_.splice(position, 0, connection); connection.inDB_ = true; }; @@ -71,12 +70,12 @@ Blockly.ConnectionDB.prototype.addConnection = function(connection) { * not found. */ Blockly.ConnectionDB.prototype.findConnection = function(conn) { - if (!this.length) { + if (!this.connections_.length) { return -1; } var bestGuess = this.findPositionForConnection_(conn); - if (bestGuess >= this.length) { + if (bestGuess >= this.connections_.length) { // Not in list return -1; } @@ -85,15 +84,16 @@ Blockly.ConnectionDB.prototype.findConnection = function(conn) { // Walk forward and back on the y axis looking for the connection. var pointerMin = bestGuess; var pointerMax = bestGuess; - while (pointerMin >= 0 && this[pointerMin].y_ == yPos) { - if (this[pointerMin] == conn) { + while (pointerMin >= 0 && this.connections_[pointerMin].y_ == yPos) { + if (this.connections_[pointerMin] == conn) { return pointerMin; } pointerMin--; } - while (pointerMax < this.length && this[pointerMax].y_ == yPos) { - if (this[pointerMax] == conn) { + while (pointerMax < this.connections_.length && + this.connections_[pointerMax].y_ == yPos) { + if (this.connections_[pointerMax] == conn) { return pointerMax; } pointerMax++; @@ -111,16 +111,16 @@ Blockly.ConnectionDB.prototype.findConnection = function(conn) { */ Blockly.ConnectionDB.prototype.findPositionForConnection_ = function( connection) { - if (!this.length) { + if (!this.connections_.length) { return 0; } var pointerMin = 0; - var pointerMax = this.length; + var pointerMax = this.connections_.length; while (pointerMin < pointerMax) { var pointerMid = Math.floor((pointerMin + pointerMax) / 2); - if (this[pointerMid].y_ < connection.y_) { + if (this.connections_[pointerMid].y_ < connection.y_) { pointerMin = pointerMid + 1; - } else if (this[pointerMid].y_ > connection.y_) { + } else if (this.connections_[pointerMid].y_ > connection.y_) { pointerMax = pointerMid; } else { pointerMin = pointerMid; @@ -144,7 +144,7 @@ Blockly.ConnectionDB.prototype.removeConnection_ = function(connection) { throw Error('Unable to find connection in connectionDB.'); } connection.inDB_ = false; - this.splice(removalIndex, 1); + this.connections_.splice(removalIndex, 1); }; /** @@ -156,7 +156,7 @@ Blockly.ConnectionDB.prototype.removeConnection_ = function(connection) { * @return {!Array.} List of connections. */ Blockly.ConnectionDB.prototype.getNeighbours = function(connection, maxRadius) { - var db = this; + var db = this.connections_; var currentX = connection.x_; var currentY = connection.y_; @@ -218,7 +218,7 @@ Blockly.ConnectionDB.prototype.getNeighbours = function(connection, maxRadius) { * @private */ Blockly.ConnectionDB.prototype.isInYRange_ = function(index, baseY, maxRadius) { - return (Math.abs(this[index].y_ - baseY) <= maxRadius); + return (Math.abs(this.connections_[index].y_ - baseY) <= maxRadius); }; /** @@ -235,7 +235,7 @@ Blockly.ConnectionDB.prototype.isInYRange_ = function(index, baseY, maxRadius) { Blockly.ConnectionDB.prototype.searchForClosest = function(conn, maxRadius, dxy) { // Don't bother. - if (!this.length) { + if (!this.connections_.length) { return {connection: null, radius: maxRadius}; } @@ -258,7 +258,7 @@ Blockly.ConnectionDB.prototype.searchForClosest = function(conn, maxRadius, // Walk forward and back on the y axis looking for the closest x,y point. var pointerMin = closestIndex - 1; while (pointerMin >= 0 && this.isInYRange_(pointerMin, conn.y_, maxRadius)) { - temp = this[pointerMin]; + temp = this.connections_[pointerMin]; if (conn.isConnectionAllowed(temp, bestRadius)) { bestConnection = temp; bestRadius = temp.distanceFrom(conn); @@ -267,9 +267,9 @@ Blockly.ConnectionDB.prototype.searchForClosest = function(conn, maxRadius, } var pointerMax = closestIndex; - while (pointerMax < this.length && this.isInYRange_(pointerMax, conn.y_, - maxRadius)) { - temp = this[pointerMax]; + while (pointerMax < this.connections_.length && + this.isInYRange_(pointerMax, conn.y_, maxRadius)) { + temp = this.connections_[pointerMax]; if (conn.isConnectionAllowed(temp, bestRadius)) { bestConnection = temp; bestRadius = temp.distanceFrom(conn);