diff --git a/src/ol/array.js b/src/ol/array.js index c97eaaaee1..5a59474fda 100644 --- a/src/ol/array.js +++ b/src/ol/array.js @@ -178,11 +178,11 @@ ol.array.remove = function(arr, obj) { /** * @param {Array} arr The array to modify. * @param {?function(this:THISVAL, VALUE, number, ?) : boolean} func The function to compare. - * @param {THISVAL=} thisArg Optional this argument for the function. + * @param {THISVAL=} opt_thisArg Optional this argument for the function. * @template VALUE,THISVAL * @return {VALUE} If the element was removed. */ -ol.array.find = function(arr, func, thisArg) { +ol.array.find = function(arr, func, opt_thisArg) { if (typeof func !== 'function') { throw new TypeError('func must be a function'); } @@ -192,9 +192,50 @@ ol.array.find = function(arr, func, thisArg) { for (var i = 0; i < length; i++) { value = list[i]; - if (func.call(thisArg, value, i, list)) { + if (func.call(opt_thisArg, value, i, list)) { return value; } } return null; } + + +/** +* @param {goog.array.ArrayLike} arr1 The first array to compare. +* @param {goog.array.ArrayLike} arr2 The second array to compare. +* @param {Function=} opt_equalsFn Optional comparison function. +* @return {boolean} Whether the two arrays are equal. + */ +ol.array.equals = function(arr1, arr2, opt_equalsFn) { + if (!goog.isArrayLike(arr1) || !goog.isArrayLike(arr2) || arr1.length !== arr2.length) { + return false; + } + var length = arr1.length; + var equalsFn = opt_equalsFn !== undefined ? opt_equalsFn : function(a, b) { + return a === b; + }; + for (var i = 0; i < length; i++) { + if (!equalsFn(arr1[i], arr2[i])) { + return false; + } + } + return true; +} + +ol.array.stableSort = function(arr, compareFnc) { + var length = arr.length; + var tmp = Array(arr.length); + var i; + for (i = 0; i < length; i++) { + tmp[i] = {index: i, value: arr[i]}; + } + var compare = compareFnc || function(a, b) { + return a > b ? 1 : a < b ? -1 : 0; + }; + tmp.sort(function(a, b) { + return compare(a.value, b.value) || a.index - b.index; + }); + for (i = 0; i < arr.length; i++) { + arr[i] = tmp[i].value; + } +} diff --git a/src/ol/interaction/modifyinteraction.js b/src/ol/interaction/modifyinteraction.js index e840dedcea..ea108929a2 100644 --- a/src/ol/interaction/modifyinteraction.js +++ b/src/ol/interaction/modifyinteraction.js @@ -1,7 +1,6 @@ goog.provide('ol.interaction.Modify'); goog.provide('ol.interaction.ModifyEvent'); -goog.require('goog.array'); goog.require('goog.asserts'); goog.require('goog.events'); goog.require('goog.events.Event'); @@ -14,6 +13,7 @@ goog.require('ol.Feature'); goog.require('ol.MapBrowserEvent.EventType'); goog.require('ol.MapBrowserPointerEvent'); goog.require('ol.ViewHint'); +goog.require('ol.array'); goog.require('ol.coordinate'); goog.require('ol.events.condition'); goog.require('ol.extent'); @@ -999,7 +999,7 @@ ol.interaction.Modify.prototype.updateSegmentIndices_ = function( this.rBush_.forEachInExtent(geometry.getExtent(), function(segmentDataMatch) { if (segmentDataMatch.geometry === geometry && (depth === undefined || segmentDataMatch.depth === undefined || - goog.array.equals( + ol.array.equals( /** @type {null|{length: number}} */ (segmentDataMatch.depth), depth)) && segmentDataMatch.index > index) { diff --git a/src/ol/render/canvas/canvasimmediate.js b/src/ol/render/canvas/canvasimmediate.js index 9003160ae6..cabb1c0129 100644 --- a/src/ol/render/canvas/canvasimmediate.js +++ b/src/ol/render/canvas/canvasimmediate.js @@ -4,7 +4,6 @@ goog.provide('ol.render.canvas.Immediate'); -goog.require('goog.array'); goog.require('goog.asserts'); goog.require('goog.vec.Mat4'); goog.require('ol.array'); @@ -768,7 +767,7 @@ ol.render.canvas.Immediate.prototype.setContextStrokeState_ = function(strokeSta contextStrokeState.lineCap = context.lineCap = strokeState.lineCap; } if (ol.has.CANVAS_LINE_DASH) { - if (!goog.array.equals( + if (!ol.array.equals( contextStrokeState.lineDash, strokeState.lineDash)) { context.setLineDash(contextStrokeState.lineDash = strokeState.lineDash); } diff --git a/src/ol/render/canvas/canvasreplay.js b/src/ol/render/canvas/canvasreplay.js index ddfcd46144..9cc8dca3d7 100644 --- a/src/ol/render/canvas/canvasreplay.js +++ b/src/ol/render/canvas/canvasreplay.js @@ -8,7 +8,6 @@ goog.provide('ol.render.canvas.Replay'); goog.provide('ol.render.canvas.ReplayGroup'); goog.provide('ol.render.canvas.TextReplay'); -goog.require('goog.array'); goog.require('goog.asserts'); goog.require('goog.object'); goog.require('goog.vec.Mat4'); @@ -1037,7 +1036,7 @@ ol.render.canvas.LineStringReplay.prototype.setStrokeStyle_ = function() { goog.asserts.assert(miterLimit !== undefined, 'miterLimit should be defined'); if (state.currentStrokeStyle != strokeStyle || state.currentLineCap != lineCap || - !goog.array.equals(state.currentLineDash, lineDash) || + !ol.array.equals(state.currentLineDash, lineDash) || state.currentLineJoin != lineJoin || state.currentLineWidth != lineWidth || state.currentMiterLimit != miterLimit) { diff --git a/src/ol/renderer/canvas/canvaslayerrenderer.js b/src/ol/renderer/canvas/canvaslayerrenderer.js index b556e91fff..a3502a1d10 100644 --- a/src/ol/renderer/canvas/canvaslayerrenderer.js +++ b/src/ol/renderer/canvas/canvaslayerrenderer.js @@ -1,8 +1,8 @@ goog.provide('ol.renderer.canvas.Layer'); -goog.require('goog.array'); goog.require('goog.asserts'); goog.require('goog.vec.Mat4'); +goog.require('ol.array'); goog.require('ol.dom'); goog.require('ol.extent'); goog.require('ol.layer.Layer'); @@ -262,7 +262,7 @@ ol.renderer.canvas.Layer.testCanvasSize = (function() { var y = size[1] - 1; context.putImageData(imageData, x, y); var result = context.getImageData(x, y, 1, 1); - good = goog.array.equals(imageData.data, result.data); + good = ol.array.equals(imageData.data, result.data); } return good; }; diff --git a/src/ol/renderer/canvas/canvasmaprenderer.js b/src/ol/renderer/canvas/canvasmaprenderer.js index 88f2ed55b7..f446e6a7e7 100644 --- a/src/ol/renderer/canvas/canvasmaprenderer.js +++ b/src/ol/renderer/canvas/canvasmaprenderer.js @@ -2,13 +2,13 @@ goog.provide('ol.renderer.canvas.Map'); -goog.require('goog.array'); goog.require('goog.asserts'); goog.require('goog.dom'); goog.require('goog.style'); goog.require('goog.vec.Mat4'); goog.require('ol'); goog.require('ol.RendererType'); +goog.require('ol.array'); goog.require('ol.css'); goog.require('ol.dom'); goog.require('ol.layer.Image'); @@ -171,7 +171,7 @@ ol.renderer.canvas.Map.prototype.renderFrame = function(frameState) { this.dispatchComposeEvent_(ol.render.EventType.PRECOMPOSE, frameState); var layerStatesArray = frameState.layerStatesArray; - goog.array.stableSort(layerStatesArray, ol.renderer.Map.sortByZIndex); + ol.array.stableSort(layerStatesArray, ol.renderer.Map.sortByZIndex); var viewResolution = frameState.viewState.resolution; var i, ii, layer, layerRenderer, layerState; diff --git a/src/ol/renderer/dom/dommaprenderer.js b/src/ol/renderer/dom/dommaprenderer.js index 1f701ee79c..8d8297d67a 100644 --- a/src/ol/renderer/dom/dommaprenderer.js +++ b/src/ol/renderer/dom/dommaprenderer.js @@ -1,6 +1,5 @@ goog.provide('ol.renderer.dom.Map'); -goog.require('goog.array'); goog.require('goog.asserts'); goog.require('goog.dom'); goog.require('goog.events'); @@ -10,6 +9,7 @@ goog.require('goog.style'); goog.require('goog.vec.Mat4'); goog.require('ol'); goog.require('ol.RendererType'); +goog.require('ol.array'); goog.require('ol.css'); goog.require('ol.dom'); goog.require('ol.layer.Image'); @@ -176,7 +176,7 @@ ol.renderer.dom.Map.prototype.renderFrame = function(frameState) { this.dispatchComposeEvent_(ol.render.EventType.PRECOMPOSE, frameState); var layerStatesArray = frameState.layerStatesArray; - goog.array.stableSort(layerStatesArray, ol.renderer.Map.sortByZIndex); + ol.array.stableSort(layerStatesArray, ol.renderer.Map.sortByZIndex); var viewResolution = frameState.viewState.resolution; var i, ii, layer, layerRenderer, layerState; diff --git a/src/ol/renderer/webgl/webglmaprenderer.js b/src/ol/renderer/webgl/webglmaprenderer.js index 68df7370da..9ece2811f6 100644 --- a/src/ol/renderer/webgl/webglmaprenderer.js +++ b/src/ol/renderer/webgl/webglmaprenderer.js @@ -2,7 +2,6 @@ goog.provide('ol.renderer.webgl.Map'); -goog.require('goog.array'); goog.require('goog.asserts'); goog.require('goog.dom'); goog.require('goog.events'); @@ -14,6 +13,7 @@ goog.require('goog.style'); goog.require('goog.webgl'); goog.require('ol'); goog.require('ol.RendererType'); +goog.require('ol.array'); goog.require('ol.css'); goog.require('ol.dom'); goog.require('ol.layer.Image'); @@ -470,7 +470,7 @@ ol.renderer.webgl.Map.prototype.renderFrame = function(frameState) { /** @type {Array.} */ var layerStatesToDraw = []; var layerStatesArray = frameState.layerStatesArray; - goog.array.stableSort(layerStatesArray, ol.renderer.Map.sortByZIndex); + ol.array.stableSort(layerStatesArray, ol.renderer.Map.sortByZIndex); var viewResolution = frameState.viewState.resolution; var i, ii, layerRenderer, layerState;