From f8b59dbd5309bff11887ededd6e22dfd89d98023 Mon Sep 17 00:00:00 2001 From: Frederic Junod Date: Mon, 17 Nov 2014 11:49:05 +0100 Subject: [PATCH] Use goog.array.extend instead of ol.array.safeExtend The upstream implementation now supports large arrays. See https://github.com/google/closure-library/pull/356 --- src/ol/array.js | 19 ------------------- src/ol/format/gml/gml3format.js | 4 ++-- src/ol/format/gml/gmlbaseformat.js | 4 ++-- src/ol/format/kmlformat.js | 5 ++--- src/ol/geom/linestring.js | 4 ++-- src/ol/geom/multilinestring.js | 8 ++++---- src/ol/geom/multipoint.js | 4 ++-- src/ol/geom/multipolygon.js | 6 +++--- src/ol/geom/polygon.js | 3 +-- 9 files changed, 18 insertions(+), 39 deletions(-) diff --git a/src/ol/array.js b/src/ol/array.js index 9e4ffc1da2..882a501262 100644 --- a/src/ol/array.js +++ b/src/ol/array.js @@ -37,25 +37,6 @@ ol.array.binaryFindNearest = function(arr, target) { }; -/** - * Safe version of goog.array.extend that does not risk to overflow the stack - * even if `array2` contains a large number of elements. - * - * @param {Array.} array1 Array 1. - * @param {Array.} array2 Array 2. - * @template T - */ -ol.array.safeExtend = function(array1, array2) { - // goog.array.extend uses Array.prototype.push.apply, which can overflow the - // stack if array2 contains too many elements. Repeatedly calling push - // performs as well on modern browsers. - var i, ii; - for (i = 0, ii = array2.length; i < ii; ++i) { - array1.push(array2[i]); - } -}; - - /** * @param {Array.} arr Array. * @param {number} target Target. diff --git a/src/ol/format/gml/gml3format.js b/src/ol/format/gml/gml3format.js index 59167e1f40..d0d879b0b6 100644 --- a/src/ol/format/gml/gml3format.js +++ b/src/ol/format/gml/gml3format.js @@ -1,12 +1,12 @@ goog.provide('ol.format.GML'); goog.provide('ol.format.GML3'); +goog.require('goog.array'); goog.require('goog.asserts'); goog.require('goog.dom'); goog.require('goog.dom.NodeType'); goog.require('goog.object'); goog.require('ol.Feature'); -goog.require('ol.array'); goog.require('ol.extent'); goog.require('ol.format.Feature'); goog.require('ol.format.GMLBase'); @@ -283,7 +283,7 @@ ol.format.GML3.prototype.readSurface_ = function(node, objectStack) { var ends = [flatCoordinates.length]; var i, ii; for (i = 1, ii = flatLinearRings.length; i < ii; ++i) { - ol.array.safeExtend(flatCoordinates, flatLinearRings[i]); + goog.array.extend(flatCoordinates, flatLinearRings[i]); ends.push(flatCoordinates.length); } polygon.setFlatCoordinates( diff --git a/src/ol/format/gml/gmlbaseformat.js b/src/ol/format/gml/gmlbaseformat.js index 1e1e9dcfc7..6baa27b61f 100644 --- a/src/ol/format/gml/gmlbaseformat.js +++ b/src/ol/format/gml/gmlbaseformat.js @@ -3,13 +3,13 @@ // envelopes/extents, only geometries! goog.provide('ol.format.GMLBase'); +goog.require('goog.array'); goog.require('goog.asserts'); goog.require('goog.dom'); goog.require('goog.dom.NodeType'); goog.require('goog.object'); goog.require('goog.string'); goog.require('ol.Feature'); -goog.require('ol.array'); goog.require('ol.format.Feature'); goog.require('ol.format.XMLFeature'); goog.require('ol.geom.Geometry'); @@ -390,7 +390,7 @@ ol.format.GMLBase.prototype.readPolygon = function(node, objectStack) { var ends = [flatCoordinates.length]; var i, ii; for (i = 1, ii = flatLinearRings.length; i < ii; ++i) { - ol.array.safeExtend(flatCoordinates, flatLinearRings[i]); + goog.array.extend(flatCoordinates, flatLinearRings[i]); ends.push(flatCoordinates.length); } polygon.setFlatCoordinates( diff --git a/src/ol/format/kmlformat.js b/src/ol/format/kmlformat.js index 64ed4ef197..36114a3825 100644 --- a/src/ol/format/kmlformat.js +++ b/src/ol/format/kmlformat.js @@ -14,7 +14,6 @@ goog.require('goog.math'); goog.require('goog.object'); goog.require('goog.string'); goog.require('ol.Feature'); -goog.require('ol.array'); goog.require('ol.color'); goog.require('ol.feature'); goog.require('ol.format.Feature'); @@ -850,7 +849,7 @@ ol.format.KML.readMultiGeometry_ = function(node, objectStack) { geometry = geometries[i]; goog.asserts.assertInstanceof(geometry, ol.geom.Point); goog.asserts.assert(geometry.getLayout() == layout); - ol.array.safeExtend(flatCoordinates, geometry.getFlatCoordinates()); + goog.array.extend(flatCoordinates, geometry.getFlatCoordinates()); } var multiPoint = new ol.geom.MultiPoint(null); multiPoint.setFlatCoordinates(layout, flatCoordinates); @@ -916,7 +915,7 @@ ol.format.KML.readPolygon_ = function(node, objectStack) { var ends = [flatCoordinates.length]; var i, ii; for (i = 1, ii = flatLinearRings.length; i < ii; ++i) { - ol.array.safeExtend(flatCoordinates, flatLinearRings[i]); + goog.array.extend(flatCoordinates, flatLinearRings[i]); ends.push(flatCoordinates.length); } polygon.setFlatCoordinates( diff --git a/src/ol/geom/linestring.js b/src/ol/geom/linestring.js index 7e2bcf74c5..0d80bca4f1 100644 --- a/src/ol/geom/linestring.js +++ b/src/ol/geom/linestring.js @@ -1,7 +1,7 @@ goog.provide('ol.geom.LineString'); +goog.require('goog.array'); goog.require('goog.asserts'); -goog.require('ol.array'); goog.require('ol.extent'); goog.require('ol.geom.GeometryType'); goog.require('ol.geom.SimpleGeometry'); @@ -69,7 +69,7 @@ ol.geom.LineString.prototype.appendCoordinate = function(coordinate) { if (goog.isNull(this.flatCoordinates)) { this.flatCoordinates = coordinate.slice(); } else { - ol.array.safeExtend(this.flatCoordinates, coordinate); + goog.array.extend(this.flatCoordinates, coordinate); } this.changed(); }; diff --git a/src/ol/geom/multilinestring.js b/src/ol/geom/multilinestring.js index 728168b198..751636a8b9 100644 --- a/src/ol/geom/multilinestring.js +++ b/src/ol/geom/multilinestring.js @@ -1,7 +1,7 @@ goog.provide('ol.geom.MultiLineString'); +goog.require('goog.array'); goog.require('goog.asserts'); -goog.require('ol.array'); goog.require('ol.extent'); goog.require('ol.geom.GeometryType'); goog.require('ol.geom.LineString'); @@ -63,7 +63,7 @@ ol.geom.MultiLineString.prototype.appendLineString = function(lineString) { if (goog.isNull(this.flatCoordinates)) { this.flatCoordinates = lineString.getFlatCoordinates().slice(); } else { - ol.array.safeExtend( + goog.array.extend( this.flatCoordinates, lineString.getFlatCoordinates().slice()); } this.ends_.push(this.flatCoordinates.length); @@ -212,7 +212,7 @@ ol.geom.MultiLineString.prototype.getFlatMidpoints = function() { var end = ends[i]; var midpoint = ol.geom.flat.interpolate.lineString( flatCoordinates, offset, end, stride, 0.5); - ol.array.safeExtend(midpoints, midpoint); + goog.array.extend(midpoints, midpoint); offset = end; } return midpoints; @@ -313,7 +313,7 @@ ol.geom.MultiLineString.prototype.setLineStrings = function(lineStrings) { // FIXME better handle the case of non-matching layouts goog.asserts.assert(lineString.getLayout() == layout); } - ol.array.safeExtend(flatCoordinates, lineString.getFlatCoordinates()); + goog.array.extend(flatCoordinates, lineString.getFlatCoordinates()); ends.push(flatCoordinates.length); } this.setFlatCoordinates(layout, flatCoordinates, ends); diff --git a/src/ol/geom/multipoint.js b/src/ol/geom/multipoint.js index f19dfd6dfd..32b1cc02ae 100644 --- a/src/ol/geom/multipoint.js +++ b/src/ol/geom/multipoint.js @@ -1,7 +1,7 @@ goog.provide('ol.geom.MultiPoint'); +goog.require('goog.array'); goog.require('goog.asserts'); -goog.require('ol.array'); goog.require('ol.extent'); goog.require('ol.geom.GeometryType'); goog.require('ol.geom.Point'); @@ -39,7 +39,7 @@ ol.geom.MultiPoint.prototype.appendPoint = function(point) { if (goog.isNull(this.flatCoordinates)) { this.flatCoordinates = point.getFlatCoordinates().slice(); } else { - ol.array.safeExtend(this.flatCoordinates, point.getFlatCoordinates()); + goog.array.extend(this.flatCoordinates, point.getFlatCoordinates()); } this.changed(); }; diff --git a/src/ol/geom/multipolygon.js b/src/ol/geom/multipolygon.js index b881e2eb12..3dafa464d6 100644 --- a/src/ol/geom/multipolygon.js +++ b/src/ol/geom/multipolygon.js @@ -1,7 +1,7 @@ goog.provide('ol.geom.MultiPolygon'); +goog.require('goog.array'); goog.require('goog.asserts'); -goog.require('ol.array'); goog.require('ol.extent'); goog.require('ol.geom.GeometryType'); goog.require('ol.geom.MultiPoint'); @@ -97,7 +97,7 @@ ol.geom.MultiPolygon.prototype.appendPolygon = function(polygon) { this.endss_.push(); } else { var offset = this.flatCoordinates.length; - ol.array.safeExtend(this.flatCoordinates, polygon.getFlatCoordinates()); + goog.array.extend(this.flatCoordinates, polygon.getFlatCoordinates()); ends = polygon.getEnds().slice(); var i, ii; for (i = 0, ii = ends.length; i < ii; ++i) { @@ -397,7 +397,7 @@ ol.geom.MultiPolygon.prototype.setPolygons = function(polygons) { for (j = 0, jj = ends.length; j < jj; ++j) { ends[j] += offset; } - ol.array.safeExtend(flatCoordinates, polygon.getFlatCoordinates()); + goog.array.extend(flatCoordinates, polygon.getFlatCoordinates()); endss.push(ends); } this.setFlatCoordinates(layout, flatCoordinates, endss); diff --git a/src/ol/geom/polygon.js b/src/ol/geom/polygon.js index d3af928088..4eea4150e3 100644 --- a/src/ol/geom/polygon.js +++ b/src/ol/geom/polygon.js @@ -2,7 +2,6 @@ goog.provide('ol.geom.Polygon'); goog.require('goog.array'); goog.require('goog.asserts'); -goog.require('ol.array'); goog.require('ol.extent'); goog.require('ol.geom.GeometryType'); goog.require('ol.geom.LinearRing'); @@ -92,7 +91,7 @@ ol.geom.Polygon.prototype.appendLinearRing = function(linearRing) { if (goog.isNull(this.flatCoordinates)) { this.flatCoordinates = linearRing.getFlatCoordinates().slice(); } else { - ol.array.safeExtend(this.flatCoordinates, linearRing.getFlatCoordinates()); + goog.array.extend(this.flatCoordinates, linearRing.getFlatCoordinates()); } this.ends_.push(this.flatCoordinates.length); this.changed();