/// <summary> /// Constructor /// </summary> /// <param name="efsSystem"></param> public Override(EfsSystem efsSystem) : base(efsSystem, "Override") { DefaultFunction = (Parameter)acceptor.getFactory().createParameter(); DefaultFunction.Name = "Default"; DefaultFunction.Type = EFSSystem.AnyType; DefaultFunction.setFather(this); FormalParameters.Add(DefaultFunction); OverrideFunction = (Parameter)acceptor.getFactory().createParameter(); OverrideFunction.Name = "Override"; OverrideFunction.Type = EFSSystem.AnyType; OverrideFunction.setFather(this); FormalParameters.Add(OverrideFunction); Returns = (Function)acceptor.getFactory().createFunction(); Returns.Name = "Override"; Returns.ReturnType = EFSSystem.DoubleType; Returns.setFather(this); Parameter distanceParam = (Parameter)acceptor.getFactory().createParameter(); distanceParam.Name = "Distance"; distanceParam.Type = EFSSystem.DoubleType; distanceParam.setFather(Returns); Returns.appendParameters(distanceParam); Parameter speedParameter = (Parameter)acceptor.getFactory().createParameter(); speedParameter.Name = "Speed"; speedParameter.Type = EFSSystem.DoubleType; speedParameter.setFather(Returns); Returns.appendParameters(speedParameter); }
SerializedProperty IterateOverrides( OverrideFunction overrideFunction, PathFunction pathFunction, EndFunction endFunction) { var overridesProperty = serializedObject.FindProperty("overrides"); for (int i = 0, n = overridesProperty.arraySize; i < n; ++i) { var overrideProperty = overridesProperty.GetArrayElementAtIndex(i); var filterProperty = overrideProperty.FindPropertyRelative("filter"); var filter = filterProperty.stringValue; if (i < _cacheTables.Count) { var table = _cacheTables[i]; if (overrideFunction(overrideProperty, i, n, table.Count)) { foreach (var x in table) { pathFunction(x.Key, x.Value, i); } } } endFunction(overrideProperty); } return(overridesProperty); }
/// <summary> /// Provides the surface of this function if it has been statically defined /// </summary> /// <param name="context">the context used to create the surface</param> /// <param name="explain"></param> /// <returns></returns> public override Surface CreateSurface(InterpretationContext context, ExplanationPart explain) { Surface retVal = null; Surface defaultSurface = createSurfaceForValue(context, context.FindOnStack(DefaultFunction).Value, explain); if (defaultSurface != null) { Surface overrideSurface = createSurfaceForValue(context, context.FindOnStack(OverrideFunction).Value, explain); if (overrideSurface != null) { retVal = defaultSurface.Override(overrideSurface); } else { OverrideFunction.AddError("Cannot create graph for OVERRIDE argument"); } } else { DefaultFunction.AddError("Cannot create graph for DEFAULT argument"); } return(retVal); }