/// <summary> Evaluates value for gived qualifier. </summary> /// <typeparam name="T">Return type</typeparam> /// <param name="qualifier">Qualifier: osm tag key</param> /// <param name="converter">Convertrs string to given type</param> /// <returns>Evaluated value</returns> public T Evaluate <T>(string qualifier, Func <string, T> converter) { Assert(); if (!Declarations.ContainsKey(qualifier)) { throw new ArgumentException(String.Format(Strings.StyleDeclarationNotFound, qualifier, _model), qualifier); } var declaration = Declarations[qualifier]; return(declaration.IsEval ? declaration.Evaluator.Walk <T>(_model) : converter(declaration.Value)); }
/// <summary> Evaluates list of values for gived qualifier. </summary> /// <typeparam name="T">Return type</typeparam> /// <param name="qualifier">Qualifier: osm tag key</param> /// <param name="converter">Convertrs string to given type</param> public IEnumerable <T> EvaluateList <T>(string qualifier, Func <string, T> converter) { if (!Declarations.ContainsKey(qualifier)) { return(Enumerable.Empty <T>()); } Declaration declaration; var listDeclaration = Declarations[qualifier] as ListDeclaration; if (listDeclaration != null) { declaration = listDeclaration.Items.First(); return(declaration.Evaluator.Walk <IEnumerable <T> >(_model)); } declaration = Declarations[qualifier]; return(Evaluate(declaration, converter)); }
/// <summary> Evaluates value for gived qualifier. If not possible, returns default. </summary> /// <typeparam name="T">Return type</typeparam> /// <param name="qualifier">Qualifier: osm tag key</param> /// <param name="default">Default value</param> /// <returns>Evaluated value</returns> public T EvaluateDefault <T>(string qualifier, T @default) { Assert(); if (!Declarations.ContainsKey(qualifier)) { return(@default); } var declaration = Declarations[qualifier]; if (declaration.IsEval) { return(declaration.Evaluator.Walk <T>(_model)); } return((T)Convert.ChangeType(declaration.Value, typeof(T))); }