Addressing @tschaub's review comments

This commit is contained in:
ahocevar
2013-05-21 15:00:50 -05:00
parent 0f4a5c09af
commit a2927a0dd9
+14 -11
View File
@@ -91,7 +91,7 @@ ol.structs.RTree = function(opt_width) {
if (nodes.length < 1) { if (nodes.length < 1) {
return {extent: [0, 0, 0, 0]}; return {extent: [0, 0, 0, 0]};
} }
rect.extent = goog.array.concat(nodes[0].extent); rect.extent = nodes[0].extent.concat();
for (var i = nodes.length - 1; i > 0; --i) { for (var i = nodes.length - 1; i > 0; --i) {
ol.extent.extend(rect.extent, nodes[i].extent); ol.extent.extend(rect.extent, nodes[i].extent);
@@ -120,7 +120,7 @@ ol.structs.RTree = function(opt_width) {
/** @type {ol.structs.RTreeNode} */ /** @type {ol.structs.RTreeNode} */
var workingObject = /** @type {ol.structs.RTreeNode} */ var workingObject = /** @type {ol.structs.RTreeNode} */
({extent: goog.array.concat(rect.extent), target: obj}); ({extent: rect.extent.concat(), target: obj});
countStack.push(root.nodes.length); countStack.push(root.nodes.length);
hitStack.push(root); hitStack.push(root);
@@ -172,10 +172,12 @@ ol.structs.RTree = function(opt_width) {
tree.nodes.splice(i + 1, 1); // Remove unsplit node tree.nodes.splice(i + 1, 1); // Remove unsplit node
// workingObject.nodes contains a list of elements removed from the // workingObject.nodes contains a list of elements removed from the
// tree so far // tree so far
if (tree.nodes.length > 0) if (tree.nodes.length > 0) {
makeMBR(tree.nodes, tree); makeMBR(tree.nodes, tree);
for (var t = 0, tt = workingObject.nodes.length; t < tt; ++t) }
for (var t = 0, tt = workingObject.nodes.length; t < tt; ++t) {
insertSubtree(workingObject.nodes[t], tree); insertSubtree(workingObject.nodes[t], tree);
}
workingObject.nodes.length = 0; workingObject.nodes.length = 0;
if (hitStack.length === 0 && tree.nodes.length <= 1) { if (hitStack.length === 0 && tree.nodes.length <= 1) {
// Underflow..on root! // Underflow..on root!
@@ -312,10 +314,11 @@ ol.structs.RTree = function(opt_width) {
newAreaB[1] - newAreaB[0], newAreaB[3] - newAreaB[2], newAreaB[1] - newAreaB[0], newAreaB[3] - newAreaB[2],
b.nodes.length + 2) - areaB); b.nodes.length + 2) - areaB);
var changeNewAreaDelta = Math.abs(changeNewAreaB - changeNewAreaA);
if (!highAreaNode || !highAreaDelta || if (!highAreaNode || !highAreaDelta ||
Math.abs(changeNewAreaB - changeNewAreaA) < highAreaDelta) { changeNewAreaDelta < highAreaDelta) {
highAreaNode = i; highAreaNode = i;
highAreaDelta = Math.abs(changeNewAreaB - changeNewAreaA); highAreaDelta = changeNewAreaDelta;
lowestGrowthGroup = changeNewAreaB < changeNewAreaA ? b : a; lowestGrowthGroup = changeNewAreaB < changeNewAreaA ? b : a;
} }
} }
@@ -384,9 +387,9 @@ ol.structs.RTree = function(opt_width) {
} }
return [ return [
/** @type {ol.structs.RTreeNode} */ /** @type {ol.structs.RTreeNode} */
({extent: goog.array.concat(t1.extent), nodes: [t1]}), ({extent: t1.extent.concat(), nodes: [t1]}),
/** @type {ol.structs.RTreeNode} */ /** @type {ol.structs.RTreeNode} */
({extent: goog.array.concat(t2.extent), nodes: [t2]}) ({extent: t2.extent.concat(), nodes: [t2]})
]; ];
}; };
@@ -448,7 +451,7 @@ ol.structs.RTree = function(opt_width) {
// Initial insertion is special because we resize the Tree and we don't // Initial insertion is special because we resize the Tree and we don't
// care about any overflow (seriously, how can the first object overflow?) // care about any overflow (seriously, how can the first object overflow?)
if (root.nodes.length === 0) { if (root.nodes.length === 0) {
root.extent = goog.array.concat(node.extent); root.extent = node.extent.concat();
root.nodes.push(node); root.nodes.push(node);
return; return;
} }
@@ -491,7 +494,7 @@ ol.structs.RTree = function(opt_width) {
} }
if (bc.nodes.length <= maxWidth) { // Start Resizeing Up the Tree if (bc.nodes.length <= maxWidth) { // Start Resizeing Up the Tree
workingObject = {extent: goog.array.concat(bc.extent)}; workingObject = {extent: bc.extent.concat()};
} else { // Otherwise Split this Node } else { // Otherwise Split this Node
// linearSplit() returns an array containing two new nodes // linearSplit() returns an array containing two new nodes
// formed from the split of the previous node's overflow // formed from the split of the previous node's overflow
@@ -507,7 +510,7 @@ ol.structs.RTree = function(opt_width) {
} else { // Otherwise Do Resize } else { // Otherwise Do Resize
//Just keep applying the new bounding rectangle to the parents.. //Just keep applying the new bounding rectangle to the parents..
ol.extent.extend(bc.extent, workingObject.extent); ol.extent.extend(bc.extent, workingObject.extent);
workingObject = ({extent: goog.array.concat(bc.extent)}); workingObject = ({extent: bc.extent.concat()});
} }
} while (treeStack.length > 0); } while (treeStack.length > 0);
}; };