Enum for checking built-in lib functions internally

This commit is contained in:
Tim Schaub
2013-06-25 11:54:34 -06:00
parent 70fef73869
commit 1eaf82ead5
2 changed files with 52 additions and 38 deletions

View File

@@ -1,4 +1,5 @@
goog.provide('ol.expr'); goog.provide('ol.expr');
goog.provide('ol.expr.functions');
goog.require('ol.Extent'); goog.require('ol.Extent');
goog.require('ol.Feature'); goog.require('ol.Feature');
@@ -83,9 +84,21 @@ ol.expr.isLibCall = function(expr) {
* Library of well-known functions. These are available to expressions parsed * Library of well-known functions. These are available to expressions parsed
* with `ol.expr.parse`. * with `ol.expr.parse`.
* *
* @type {Object} * @type {Object.<string, function(...)>}
*/ */
ol.expr.lib = { ol.expr.lib = {};
/**
* Enumeration of library function names.
*
* @enum {string}
*/
ol.expr.functions = {
EXTENT: 'extent',
GEOMETRY_TYPE: 'geometryType'
};
/** /**
* Determine if a feature's extent intersects the provided extent. * Determine if a feature's extent intersects the provided extent.
@@ -96,7 +109,7 @@ ol.expr.lib = {
* @return {boolean} The provided extent intersects the feature's extent. * @return {boolean} The provided extent intersects the feature's extent.
* @this {ol.Feature} * @this {ol.Feature}
*/ */
'extent': function(minX, maxX, minY, maxY) { ol.expr.lib[ol.expr.functions.EXTENT] = function(minX, maxX, minY, maxY) {
var intersects = false; var intersects = false;
var geometry = this.getGeometry(); var geometry = this.getGeometry();
if (geometry) { if (geometry) {
@@ -104,8 +117,10 @@ ol.expr.lib = {
[minX, maxX, minY, maxY]); [minX, maxX, minY, maxY]);
} }
return intersects; return intersects;
}, };
}
}
/** /**
* Determine if a feature's default geometry is of the given type. * Determine if a feature's default geometry is of the given type.
@@ -113,13 +128,11 @@ ol.expr.lib = {
* @return {boolean} The feature's default geometry is of the given type. * @return {boolean} The feature's default geometry is of the given type.
* @this {ol.Feature} * @this {ol.Feature}
*/ */
'geometryType': function(type) { ol.expr.lib[ol.expr.functions.GEOMETRY_TYPE] = function(type) {
var same = false; var same = false;
var geometry = this.getGeometry(); var geometry = this.getGeometry();
if (geometry) { if (geometry) {
same = geometry.getType() === type; same = geometry.getType() === type;
} }
return same; return same;
}
}; };

View File

@@ -9,6 +9,7 @@ goog.require('ol.expr');
goog.require('ol.expr.Literal'); goog.require('ol.expr.Literal');
goog.require('ol.expr.Logical'); goog.require('ol.expr.Logical');
goog.require('ol.expr.LogicalOp'); goog.require('ol.expr.LogicalOp');
goog.require('ol.expr.functions');
goog.require('ol.geom.GeometryType'); goog.require('ol.geom.GeometryType');
goog.require('ol.geom.SharedVertices'); goog.require('ol.geom.SharedVertices');
goog.require('ol.layer.Layer'); goog.require('ol.layer.Layer');
@@ -93,14 +94,14 @@ ol.layer.FeatureCache.prototype.getFeaturesObject = function(opt_expr) {
} else { } else {
// check for geometryType or extent expression // check for geometryType or extent expression
var name = ol.expr.isLibCall(opt_expr); var name = ol.expr.isLibCall(opt_expr);
if (name === 'geometryType') { if (name === ol.expr.functions.GEOMETRY_TYPE) {
var args = /** @type {ol.expr.Call} */ (opt_expr).getArgs(); var args = /** @type {ol.expr.Call} */ (opt_expr).getArgs();
goog.asserts.assert(args.length === 1); goog.asserts.assert(args.length === 1);
goog.asserts.assert(args[0] instanceof ol.expr.Literal); goog.asserts.assert(args[0] instanceof ol.expr.Literal);
var type = /** @type {ol.expr.Literal } */ (args[0]).evaluate(); var type = /** @type {ol.expr.Literal } */ (args[0]).evaluate();
goog.asserts.assertString(type); goog.asserts.assertString(type);
features = this.geometryTypeIndex_[type]; features = this.geometryTypeIndex_[type];
} else if (name === 'extent') { } else if (name === ol.expr.functions.EXTENT) {
var args = /** @type {ol.expr.Call} */ (opt_expr).getArgs(); var args = /** @type {ol.expr.Call} */ (opt_expr).getArgs();
goog.asserts.assert(args.length === 4); goog.asserts.assert(args.length === 4);
var extent = []; var extent = [];
@@ -120,13 +121,13 @@ ol.layer.FeatureCache.prototype.getFeaturesObject = function(opt_expr) {
for (var i = 0; i <= 1; ++i) { for (var i = 0; i <= 1; ++i) {
expr = expressions[i]; expr = expressions[i];
name = ol.expr.isLibCall(expr); name = ol.expr.isLibCall(expr);
if (name === 'geometryType') { if (name === ol.expr.functions.GEOMETRY_TYPE) {
args = /** @type {ol.expr.Call} */ (expr).getArgs(); args = /** @type {ol.expr.Call} */ (expr).getArgs();
goog.asserts.assert(args.length === 1); goog.asserts.assert(args.length === 1);
goog.asserts.assert(args[0] instanceof ol.expr.Literal); goog.asserts.assert(args[0] instanceof ol.expr.Literal);
type = /** @type {ol.expr.Literal } */ (args[0]).evaluate(); type = /** @type {ol.expr.Literal } */ (args[0]).evaluate();
goog.asserts.assertString(type); goog.asserts.assertString(type);
} else if (name === 'extent') { } else if (name === ol.expr.functions.EXTENT) {
args = /** @type {ol.expr.Call} */ (expr).getArgs(); args = /** @type {ol.expr.Call} */ (expr).getArgs();
goog.asserts.assert(args.length === 4); goog.asserts.assert(args.length === 4);
extent = []; extent = [];