From 9a0f509a946d3dc733db7b8702538d6fdf14e0f6 Mon Sep 17 00:00:00 2001 From: ahocevar Date: Wed, 30 Jan 2013 18:03:27 +0100 Subject: [PATCH] Use objects instead of arrays for geometry type cache Also trying to reference features directly here instead of storing feature ids in the index. We'll see if this is good when we have an index for tile coords as well and want to filter with multiple filters, accessing multiple indices. --- src/ol/source/vectorsource.js | 15 ++++++--------- 1 file changed, 6 insertions(+), 9 deletions(-) diff --git a/src/ol/source/vectorsource.js b/src/ol/source/vectorsource.js index 69fe06ecc8..c7ea186c66 100644 --- a/src/ol/source/vectorsource.js +++ b/src/ol/source/vectorsource.js @@ -21,7 +21,7 @@ ol.source.FeatureCache = function() { /** - * @type {Object.>} + * @type {Object.} * @private */ this.geometryTypeIndex_; @@ -37,11 +37,11 @@ ol.source.FeatureCache = function() { ol.source.FeatureCache.prototype.clear = function() { this.idLookup_ = {}; - var geometryTypeIndex_ = {}; + var geometryTypeIndex = {}; for (var key in ol.geom.GeometryType) { - geometryTypeIndex_[ol.geom.GeometryType[key]] = []; + geometryTypeIndex[ol.geom.GeometryType[key]] = {}; } - this.geometryTypeIndex_ = geometryTypeIndex_; + this.geometryTypeIndex_ = geometryTypeIndex; }; @@ -57,7 +57,7 @@ ol.source.FeatureCache.prototype.add = function(feature) { // index by geometry type if (!goog.isNull(geometry)) { - this.geometryTypeIndex_[geometry.getType()].push(id); + this.geometryTypeIndex_[geometry.getType()][id] = feature; } /** @@ -99,10 +99,7 @@ ol.source.FeatureCache.prototype.getFeatures = function(opt_filter) { * @private */ ol.source.FeatureCache.prototype.getFeaturesByGeometryType_ = function(filter) { - var type = filter.getType(), - ids = this.geometryTypeIndex_[filter.getType()]; - - return this.getFeaturesByIds_(ids); + return goog.object.getValues(this.geometryTypeIndex_[filter.getType()]); };