diff --git a/src/ol/structs/buffer.js b/src/ol/structs/buffer.js index 1fe99b415c..e9a601c375 100644 --- a/src/ol/structs/buffer.js +++ b/src/ol/structs/buffer.js @@ -3,6 +3,12 @@ goog.provide('ol.structs.Buffer'); goog.require('ol.structs.IntegerSet'); +/** + * @define {boolean} Replace unused entries with NaNs. + */ +ol.BUFFER_REPLACE_UNUSED_ENTRIES_WITH_NANS = goog.DEBUG; + + /** * @constructor @@ -37,6 +43,14 @@ ol.structs.Buffer = function(opt_arr, opt_used, opt_dirty) { if (opt_dirty && used !== 0) { this.dirtySet_.addRange(0, used); } + if (ol.BUFFER_REPLACE_UNUSED_ENTRIES_WITH_NANS) { + var arr = this.arr_; + var n = arr.length; + var i; + for (i = used; i < n; ++i) { + arr[i] = NaN; + } + } }; @@ -111,6 +125,13 @@ ol.structs.Buffer.prototype.getFreeSet = function() { ol.structs.Buffer.prototype.remove = function(index, size) { this.freeSet_.addRange(index, index + size); this.dirtySet_.removeRange(index, index + size); + if (ol.BUFFER_REPLACE_UNUSED_ENTRIES_WITH_NANS) { + var arr = this.arr_; + var i; + for (i = 0; i < size; ++i) { + arr[index + i] = NaN; + } + } }; diff --git a/test/spec/ol/structs/buffer.test.js b/test/spec/ol/structs/buffer.test.js index b0b8436d8b..bc44c8e8c9 100644 --- a/test/spec/ol/structs/buffer.test.js +++ b/test/spec/ol/structs/buffer.test.js @@ -247,28 +247,32 @@ describe('ol.structs.Buffer', function() { it('allows multiple adds and removes', function() { var b = new ol.structs.Buffer(new Array(8), 0); expect(b.add([0, 1])).to.be(0); - expect(b.getArray()).to.equalArray([ - 0, 1, - undefined, undefined, - undefined, undefined, - undefined, undefined - ]); + expect(b.getArray()).to.equalArray([0, 1, NaN, NaN, NaN, NaN, NaN, NaN]); expect(b.getCount()).to.be(2); expect(b.add([2, 3, 4, 5])).to.be(2); + expect(b.getArray()).to.equalArray([0, 1, 2, 3, 4, 5, NaN, NaN]); expect(b.getCount()).to.be(6); expect(b.add([6, 7])).to.be(6); - expect(b.getCount()).to.be(8); expect(b.getArray()).to.equalArray([0, 1, 2, 3, 4, 5, 6, 7]); + expect(b.getCount()).to.be(8); b.remove(2, 2); + expect(b.getArray()).to.equalArray([0, 1, NaN, NaN, 4, 5, 6, 7]); expect(b.getCount()).to.be(6); expect(b.add([8, 9])).to.be(2); expect(b.getArray()).to.equalArray([0, 1, 8, 9, 4, 5, 6, 7]); + expect(b.getCount()).to.be(8); b.remove(1, 1); + expect(b.getArray()).to.equalArray([0, NaN, 8, 9, 4, 5, 6, 7]); + expect(b.getCount()).to.be(7); b.remove(4, 4); + expect(b.getArray()).to.equalArray([0, NaN, 8, 9, NaN, NaN, NaN, NaN]); + expect(b.getCount()).to.be(3); expect(b.add([10, 11, 12])).to.be(4); - expect(b.getArray()).to.equalArray([0, 1, 8, 9, 10, 11, 12, 7]); + expect(b.getArray()).to.equalArray([0, NaN, 8, 9, 10, 11, 12, NaN]); + expect(b.getCount()).to.be(6); expect(b.add([13])).to.be(1); - expect(b.getArray()).to.equalArray([0, 13, 8, 9, 10, 11, 12, 7]); + expect(b.getArray()).to.equalArray([0, 13, 8, 9, 10, 11, 12, NaN]); + expect(b.getCount()).to.be(7); }); });