/// <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); }
/// <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); }