private IWorkshopTree OutputContant(VarIndexAssigner lambdaAssigner, ActionSet actionSet, IWorkshopTree[] parameterValues)
        {
            ReturnHandler returnHandler = new ReturnHandler(
                actionSet,
                ReturnType?.GetGettableAssigner(new AssigningAttributes("lambda", actionSet.IsGlobal, false))
                .GetValue(new GettableAssignerValueInfo(actionSet)
            {
                SetInitialValue = SetInitialValue.DoNotSet,
                Inline          = !MultiplePaths
            }),
                MultiplePaths);

            actionSet = AssignContainedParameters(lambdaAssigner, actionSet, parameterValues).New(returnHandler);

            if (Expression != null)
            {
                returnHandler.ReturnValue(Expression.Parse(actionSet));
            }
            else
            {
                Statement.Translate(actionSet);
            }

            returnHandler.ApplyReturnSkips();

            return(returnHandler.GetReturnedValue());
        }
 public void AddToAssigner(VarIndexAssigner assigner)
 {
     foreach (var parameter in _parameters)
     {
         assigner.Add(parameter.Variable, parameter.Gettable);
     }
 }
 public override void AddObjectVariablesToAssigner(IWorkshopTree reference, VarIndexAssigner assigner)
 {
     assigner.Add(Node_A, DijkstraBase.Node1((Element)reference));
     assigner.Add(Node_B, DijkstraBase.Node2((Element)reference));
     assigner.Add(Attribute_AB, DijkstraBase.Node1Attribute((Element)reference));
     assigner.Add(Attribute_BA, DijkstraBase.Node2Attribute((Element)reference));
 }
示例#4
0
 public override void AddObjectVariablesToAssigner(IWorkshopTree reference, VarIndexAssigner assigner)
 {
     foreach (var p in Properties)
     {
         assigner.Add(p.Var, p.Value.Value);
     }
 }
 private void AddHook(VarIndexAssigner assigner, HookVar hook)
 {
     if (hook.WasSet)
     {
         assigner.Add(hook, (IWorkshopTree)hook.HookValue);
     }
 }
示例#6
0
 public void AddParametersToAssigner(VarIndexAssigner assigner)
 {
     foreach (var parameter in _parameters)
     {
         foreach (var linked in parameter.LinkedVariables)
         {
             assigner.Add(linked, parameter.Gettable);
         }
     }
 }
        /// <summary>Assigns the parameter values to the action set for the constant lambdas.</summary>
        private ActionSet AssignContainedParameters(VarIndexAssigner lambaAssigner, ActionSet actionSet, IWorkshopTree[] parameterValues)
        {
            actionSet = actionSet.ContainVariableAssigner();
            actionSet.IndexAssigner.CopyAll(lambaAssigner);

            for (int i = 0; i < parameterValues.Length; i++)
            {
                actionSet.IndexAssigner.Add(Parameters[i], parameterValues[i]);
            }

            return(actionSet);
        }
示例#8
0
        /// <summary>Assigns the parameter values to the action set for the constant lambdas.</summary>
        private ActionSet AssignContainedParameters(VarIndexAssigner lambaAssigner, ActionSet actionSet, IWorkshopTree[] parameterValues)
        {
            var newSet = actionSet.New(actionSet.IndexAssigner.CreateContained());

            actionSet.IndexAssigner.CopyAll(lambaAssigner);

            for (int i = 0; i < parameterValues.Length; i++)
            {
                newSet.IndexAssigner.Add(Parameters[i], parameterValues[i]);
            }

            return(newSet);
        }
        public override void AddObjectVariablesToAssigner(IWorkshopTree reference, VarIndexAssigner assigner)
        {
            base.AddObjectVariablesToAssigner(reference, assigner);

            // Add hooks to assigner.
            AddHook(assigner, OnPathStartHook);
            AddHook(assigner, OnNodeReachedHook);
            AddHook(assigner, OnPathCompleted);
            AddHook(assigner, IsNodeReachedDeterminer);

            assigner.Add(NodesVar, Nodes.Get()[(Element)reference]);
            assigner.Add(SegmentsVar, Segments.Get()[(Element)reference]);
        }
        public IWorkshopTree Invoke(VarIndexAssigner lambaAssigner, ActionSet actionSet, params IWorkshopTree[] parameterValues)
        {
            switch (LambdaType.LambdaKind)
            {
            // Constant macro
            case LambdaKind.Constant:
                return(OutputContant(lambaAssigner, actionSet, parameterValues));

            // Portable
            case LambdaKind.Portable:
                return(OutputPortable(actionSet, parameterValues));

            // Unknown
            case LambdaKind.Anonymous:
            default:
                throw new NotImplementedException();
            }
        }
示例#11
0
        /// <summary>Outputs a constant block.</summary>
        private IWorkshopTree OutputContantBlock(VarIndexAssigner lambdaAssigner, ActionSet actionSet, IWorkshopTree[] parameterValues)
        {
            ReturnHandler returnHandler = new ReturnHandler(actionSet, "lambda", MultiplePaths);

            actionSet = AssignContainedParameters(lambdaAssigner, actionSet, parameterValues).New(returnHandler);

            if (Expression != null)
            {
                returnHandler.ReturnValue(Expression.Parse(actionSet));
            }
            else
            {
                Statement.Translate(actionSet);
            }

            returnHandler.ApplyReturnSkips();

            return(returnHandler.GetReturnedValue());
        }
示例#12
0
 /// <summary>Outputs a constant macro lambda.</summary>
 private IWorkshopTree OutputConstantMacro(VarIndexAssigner lambaAssigner, ActionSet actionSet, IWorkshopTree[] parameterValues) => Expression.Parse(AssignContainedParameters(lambaAssigner, actionSet, parameterValues));
 public override void AddObjectVariablesToAssigner(ToWorkshop toWorkshop, IWorkshopTree reference, VarIndexAssigner assigner)
 {
     foreach (var p in Properties)
     {
         if (p.Value.Value != null)
         {
             assigner.Add(p.Var, p.Value.Value);
         }
         else
         {
             assigner.Add(p.Var, Element.Null());
         }
     }
 }
示例#14
0
 public void AddParametersToAssigner(VarIndexAssigner assigner)
 {
 }