protected internal override void Preprocess(int currentDepth)
        {
            if (!Preprocessed)
            {
                if (ObjectBuilder.SequenceOutputID != -1)
                {
                    var nextSequenceNode = Navigator.GetNodeByID(ObjectBuilder.SequenceOutputID);
                    Debug.Assert(nextSequenceNode != null);
                    SequenceOutputs.Add(nextSequenceNode);
                }

                if (ObjectBuilder.SequenceInputID != -1)
                {
                    var sequenceInputNode = Navigator.GetNodeByID(ObjectBuilder.SequenceInputID);
                    Debug.Assert(sequenceInputNode != null);
                    SequenceInputs.Add(sequenceInputNode);
                }

                if (ObjectBuilder.ValueInputID.NodeID != -1)
                {
                    m_inputNode = Navigator.GetNodeByID(ObjectBuilder.ValueInputID.NodeID);
                    Debug.Assert(m_inputNode != null);
                    Inputs.Add(m_inputNode);
                }
            }

            base.Preprocess(currentDepth);
        }
        protected internal override void Preprocess(int currentDepth)
        {
            if (!Preprocessed)
            {
                TryRegisterNode(ObjectBuilder.SequenceInput, SequenceInputs);
                m_valueInput = TryRegisterNode(ObjectBuilder.ValueInput.NodeID, Inputs);

                // Dont add Sequence outputs to general structures
                // and handle them separately.
                foreach (var optionData in ObjectBuilder.Options)
                {
                    if(optionData.SequenceOutput == -1)
                        continue;

                    var node = Navigator.GetNodeByID(optionData.SequenceOutput);
                    if (node != null)
                        m_sequenceOutputs.Add(node);
                }

                // Manually preprocess custom handled nodes
                m_sequenceOutputs.ForEach(node => node.Preprocess(currentDepth + 1));
            }

            base.Preprocess(currentDepth);
        }
        protected internal override void Preprocess(int currentDepth)
        {
            if (!Preprocessed)
            {
                if (ObjectBuilder.SequenceOuputID != -1)
                {
                    // Collect expressions from children                
                    m_nextSequenceNode = Navigator.GetNodeByID(ObjectBuilder.SequenceOuputID);
                    Debug.Assert(m_nextSequenceNode != null);
                    SequenceOutputs.Add(m_nextSequenceNode);
                }

                var sequenceInputNode = Navigator.GetNodeByID(ObjectBuilder.SequenceInputID);
                Debug.Assert(sequenceInputNode != null);
                SequenceInputs.Add(sequenceInputNode);

                if (ObjectBuilder.InputID.NodeID == -1)
                    throw new Exception("Cast node has no input. NodeId: " + ObjectBuilder.ID);

                m_inputNode = Navigator.GetNodeByID(ObjectBuilder.InputID.NodeID);
                Debug.Assert(m_inputNode != null);
                Inputs.Add(m_inputNode);
            }

            base.Preprocess(currentDepth);
        }
Beispiel #4
0
        protected internal override void Preprocess(int currentDepth)
        {
            if (!Preprocessed)
            {
                if (ObjectBuilder.SequenceOuputID != -1)
                {
                    // Collect expressions from children
                    m_nextSequenceNode = Navigator.GetNodeByID(ObjectBuilder.SequenceOuputID);
                    Debug.Assert(m_nextSequenceNode != null);
                    SequenceOutputs.Add(m_nextSequenceNode);
                }

                var sequenceInputNode = Navigator.GetNodeByID(ObjectBuilder.SequenceInputID);
                Debug.Assert(sequenceInputNode != null);
                SequenceInputs.Add(sequenceInputNode);

                if (ObjectBuilder.InputID.NodeID == -1)
                {
                    throw new Exception("Cast node has no input. NodeId: " + ObjectBuilder.ID);
                }

                m_inputNode = Navigator.GetNodeByID(ObjectBuilder.InputID.NodeID);
                Debug.Assert(m_inputNode != null);
                Inputs.Add(m_inputNode);
            }

            base.Preprocess(currentDepth);
        }
        protected internal override void Preprocess(int currentDepth)
        {
            if (!Preprocessed)
            {
                TryRegisterNode(ObjectBuilder.SequenceInput, SequenceInputs);
                m_valueInput = TryRegisterNode(ObjectBuilder.ValueInput.NodeID, Inputs);

                // Dont add Sequence outputs to general structures
                // and handle them separately.
                foreach (var optionData in ObjectBuilder.Options)
                {
                    if (optionData.SequenceOutput == -1)
                    {
                        continue;
                    }

                    var node = Navigator.GetNodeByID(optionData.SequenceOutput);
                    if (node != null)
                    {
                        m_sequenceOutputs.Add(node);
                    }
                }

                // Manually preprocess custom handled nodes
                m_sequenceOutputs.ForEach(node => node.Preprocess(currentDepth + 1));
            }

            base.Preprocess(currentDepth);
        }
        protected internal override void Preprocess(int currentDepth)
        {
            if (!Preprocessed)
            {
                // Read the Input A data
                if (ObjectBuilder.InputAID.NodeID == -1)
                {
                    throw new Exception("Missing inputA in arithmetic node: " + ObjectBuilder.ID);
                }

                m_inputANode = Navigator.GetNodeByID(ObjectBuilder.InputAID.NodeID);
                Debug.Assert(m_inputANode != null);

                // Read the Input B data
                if (ObjectBuilder.InputBID.NodeID != -1)
                {
                    m_inputBNode = Navigator.GetNodeByID(ObjectBuilder.InputBID.NodeID);
                    if (m_inputBNode == null)
                    {
                        throw new Exception("Missing inputB in arithmetic node: " + ObjectBuilder.ID);
                    }
                }

                // Fill in the Output data
                for (int index = 0; index < ObjectBuilder.OutputNodeIDs.Count; index++)
                {
                    if (ObjectBuilder.OutputNodeIDs[index].NodeID == -1)
                    {
                        throw new Exception("-1 output in arithmetic node: " + ObjectBuilder.ID);
                    }

                    var outputNode = Navigator.GetNodeByID(ObjectBuilder.OutputNodeIDs[index].NodeID);
                    Debug.Assert(outputNode != null);

                    Outputs.Add(outputNode);
                }

                // Fill in the Input nodes
                Inputs.Add(m_inputANode);
                // B is not mandatory (null)
                if (m_inputBNode != null)
                {
                    Inputs.Add(m_inputBNode);
                }
            }

            // Base call will take care of the rest
            base.Preprocess(currentDepth);
        }
Beispiel #7
0
        protected internal override void Preprocess(int currentDepth)
        {
            if (!Preprocessed)
            {
                // cache next node, preprocess rest of the graph
                if (ObjectBuilder.SequenceOutputID != -1)
                {
                    m_nextSequenceNode = Navigator.GetNodeByID(ObjectBuilder.SequenceOutputID);
                    Debug.Assert(m_nextSequenceNode != null);
                    SequenceOutputs.Add(m_nextSequenceNode);
                }
            }

            base.Preprocess(currentDepth);
        }
        protected internal override void Preprocess(int currentDepth)
        {
            if (!Preprocessed)
            {
                // cache next node, preprocess rest of the graph
                if(ObjectBuilder.SequenceOutputID != -1)
                {
                    m_nextSequenceNode = Navigator.GetNodeByID(ObjectBuilder.SequenceOutputID);
                    Debug.Assert(m_nextSequenceNode != null);
                    SequenceOutputs.Add(m_nextSequenceNode);
                }
            }

            base.Preprocess(currentDepth);
        }
Beispiel #9
0
        protected internal override void Preprocess(int currentDepth)
        {
            if (!Preprocessed)
            {
                // Fill in the sequence inputs
                foreach (var sequenceInput in ObjectBuilder.SequenceInputs)
                {
                    TryRegisterNode(sequenceInput, SequenceInputs);
                }

                // Fill in the sequence output so preprocess sees it
                if (ObjectBuilder.SequenceOutput != -1)
                {
                    m_finishSequence = Navigator.GetNodeByID(ObjectBuilder.SequenceOutput);
                    if (m_finishSequence != null)
                    {
                        SequenceOutputs.Add(m_finishSequence);
                    }
                }

                // Fill in the body node
                if (ObjectBuilder.SequenceBody != -1)
                {
                    m_bodySequence = Navigator.GetNodeByID(ObjectBuilder.SequenceBody);
                    if (m_bodySequence != null)
                    {
                        SequenceOutputs.Add(m_bodySequence);
                    }
                }

                // Fill in the Counter outputs
                foreach (var identifier in ObjectBuilder.CounterValueOutputs)
                {
                    TryRegisterNode(identifier.NodeID, Outputs);
                }

                // Fill in the Inputs
                m_firstInput     = TryRegisterNode(ObjectBuilder.FirstIndexValueInput.NodeID, Inputs);
                m_lastInput      = TryRegisterNode(ObjectBuilder.LastIndexValueInput.NodeID, Inputs);
                m_incrementInput = TryRegisterNode(ObjectBuilder.IncrementValueInput.NodeID, Inputs);
            }

            base.Preprocess(currentDepth);
        }
        protected internal override void Preprocess(int currentDepth)
        {
            if (!Preprocessed)
            {
                // Load true sequence node data
                if (ObjectBuilder.SequenceTrueOutputID != -1)
                {
                    // Sequence outputs can be connected only to one input
                    m_nextTrueSequenceNode = Navigator.GetNodeByID(ObjectBuilder.SequenceTrueOutputID);
                    Debug.Assert(m_nextTrueSequenceNode != null);
                    SequenceOutputs.Add(m_nextTrueSequenceNode);
                }

                // Load false sequence node data
                if (ObjectBuilder.SequnceFalseOutputID != -1)
                {
                    m_nextFalseSequenceNode = Navigator.GetNodeByID(ObjectBuilder.SequnceFalseOutputID);
                    Debug.Assert(m_nextFalseSequenceNode != null);
                    SequenceOutputs.Add(m_nextFalseSequenceNode);
                }

                // Load the sequence input
                if (ObjectBuilder.SequenceInputID != -1)
                {
                    var inputNode = Navigator.GetNodeByID(ObjectBuilder.SequenceInputID);
                    Debug.Assert(inputNode != null);
                    SequenceInputs.Add(inputNode);
                }

                // Load the input node data
                if (ObjectBuilder.InputID.NodeID == -1)
                {
                    throw new Exception("Branching node has no comparer input. NodeID: " + ObjectBuilder.ID);
                }

                m_comparerNode = Navigator.GetNodeByID(ObjectBuilder.InputID.NodeID);
                Debug.Assert(m_comparerNode != null);
                Inputs.Add(m_comparerNode);
            }

            base.Preprocess(currentDepth);
        }
        protected internal override void Preprocess(int currentDepth)
        {
            if (!Preprocessed)
            {
                // Load true sequence node data
                if (ObjectBuilder.SequenceTrueOutputID != -1)
                {
                    // Sequence outputs can be connected only to one input
                    m_nextTrueSequenceNode = Navigator.GetNodeByID(ObjectBuilder.SequenceTrueOutputID);
                    Debug.Assert(m_nextTrueSequenceNode != null);
                    SequenceOutputs.Add(m_nextTrueSequenceNode);
                }

                // Load false sequence node data
                if (ObjectBuilder.SequnceFalseOutputID != -1)
                {
                    m_nextFalseSequenceNode = Navigator.GetNodeByID(ObjectBuilder.SequnceFalseOutputID);
                    Debug.Assert(m_nextFalseSequenceNode != null);
                    SequenceOutputs.Add(m_nextFalseSequenceNode);
                }

                // Load the sequence input
                if (ObjectBuilder.SequenceInputID != -1)
                {
                    var inputNode = Navigator.GetNodeByID(ObjectBuilder.SequenceInputID);
                    Debug.Assert(inputNode != null);
                    SequenceInputs.Add(inputNode);
                }

                // Load the input node data
                if (ObjectBuilder.InputID.NodeID == -1)
                    throw new Exception("Branching node has no comparer input. NodeID: " + ObjectBuilder.ID);

                m_comparerNode = Navigator.GetNodeByID(ObjectBuilder.InputID.NodeID);
                Debug.Assert(m_comparerNode != null);
                Inputs.Add(m_comparerNode);
            }

            base.Preprocess(currentDepth);
        }
        protected internal override void Preprocess(int currentDepth)
        {
            if(!Preprocessed)
            {
                // Read the Input A data
                if (ObjectBuilder.InputAID.NodeID == -1)
                    throw new Exception("Missing inputA in arithmetic node: " + ObjectBuilder.ID);

                m_inputANode = Navigator.GetNodeByID(ObjectBuilder.InputAID.NodeID);
                Debug.Assert(m_inputANode != null);

                // Read the Input B data
                if (ObjectBuilder.InputBID.NodeID == -1)
                    throw new Exception("Missing inputA in arithmetic node: " + ObjectBuilder.ID);

                m_inputBNode = Navigator.GetNodeByID(ObjectBuilder.InputBID.NodeID);
                Debug.Assert(m_inputBNode != null);

                // Fill in the Output data
                for(int index = 0; index < ObjectBuilder.OutputNodeIDs.Count; index++)
                {
                    if (ObjectBuilder.OutputNodeIDs[index].NodeID == -1)
                        throw new Exception("-1 output in arithmetic node: " + ObjectBuilder.ID);

                    var outputNode = Navigator.GetNodeByID(ObjectBuilder.OutputNodeIDs[index].NodeID);
                    Debug.Assert(outputNode != null);

                    Outputs.Add(outputNode);
                }

                // Fill in the Input nodes
                Inputs.Add(m_inputANode);
                Inputs.Add(m_inputBNode);
            }

            // Base call will take care of the rest
            base.Preprocess(currentDepth);
        }
Beispiel #13
0
 public void AddSequenceInput(MyVisualSyntaxNode node)
 {
     SequenceInputs.Add(node);
 }
        protected internal override void Preprocess(int currentDepth)
        {
            if (!Preprocessed)
            {
                if (SequenceDependent)
                {
                    // Fill in the sequence output
                    if (ObjectBuilder.SequenceOutputID != -1)
                    {
                        m_sequenceOutputNode = Navigator.GetNodeByID(ObjectBuilder.SequenceOutputID);
                        Debug.Assert(m_sequenceOutputNode != null);
                        SequenceOutputs.Add(m_sequenceOutputNode);
                    }

                    // Fill in the sequence input
                    var sequenceInputNode = Navigator.GetNodeByID(ObjectBuilder.SequenceInputID);
                    Debug.Assert(sequenceInputNode != null);
                    SequenceInputs.Add(sequenceInputNode);
                }
                else
                {
                    // Fill in all the outputs of the node
                    foreach (var identifierList in ObjectBuilder.OutputParametersIDs)
                    {
                        foreach (var identifier in identifierList.Ids)
                        {
                            var node = Navigator.GetNodeByID(identifier.NodeID);
                            Outputs.Add(node);
                        }
                    }
                }

                var parameters = m_methodInfo.GetParameters();
                // Change the capacity to match the OB
                Inputs.Capacity = ObjectBuilder.InputParameterIDs.Count;

                if (ObjectBuilder.Version == 0)
                {
                    //// <<BACKWARDS COMPATIBILITY>>
                    for (int index = 0; index < ObjectBuilder.InputParameterIDs.Count; index++)
                    {
                        // Check for missing mandatory inputs
                        var inputIdentifier = ObjectBuilder.InputParameterIDs[index];
                        // Input parameters
                        var inputNode = Navigator.GetNodeByID(inputIdentifier.NodeID);
                        if (inputNode != null)
                        {
                            Inputs.Add(inputNode);
                            m_parametersToInputs.Add(parameters[index],
                                                     new MyTuple <MyVisualSyntaxNode, MyVariableIdentifier>(inputNode, inputIdentifier));
                        }
                    }
                    //// <<BACKWARDS COMPATIBILITY>>
                }
                else
                {
                    var index = 0;
                    // Skip the first parameter for extension methods.
                    if (m_methodInfo.IsDefined(typeof(ExtensionAttribute), false))
                    {
                        index++;
                    }

                    for (; index < parameters.Length; index++)
                    {
                        var parameter = parameters[index];
                        // Find the node node identifier in the OB
                        var identifier =
                            ObjectBuilder.InputParameterIDs.Find(ident => ident.OriginName == parameter.Name);
                        // Continue for empty records
                        if (string.IsNullOrEmpty(identifier.OriginName))
                        {
                            continue;
                        }

                        // Find node
                        var inputNode = Navigator.GetNodeByID(identifier.NodeID);
                        if (inputNode == null)
                        {
                            if (!parameter.HasDefaultValue)
                            {
                                Debug.Fail("FunctionNode: " + ObjectBuilder.ID + " Input node missing! NodeID: "
                                           + identifier.NodeID + " Function Signature:" + m_methodInfo.Signature() +
                                           " parameter: " + parameter.Name);
                            }

                            continue;
                        }

                        // register data
                        Inputs.Add(inputNode);
                        var t = !m_parametersToInputs.ContainsKey(parameter);
                        m_parametersToInputs.Add(parameter,
                                                 new MyTuple <MyVisualSyntaxNode, MyVariableIdentifier>(inputNode, identifier));
                    }

                    // Add instance input as regular input
                    if (ObjectBuilder.InstanceInputID.NodeID != -1)
                    {
                        m_instance = Navigator.GetNodeByID(ObjectBuilder.InstanceInputID.NodeID);
                        if (m_instance != null)
                        {
                            Inputs.Add(m_instance);
                        }
                    }
                }
            }

            base.Preprocess(currentDepth);
        }
        protected internal override void Preprocess(int currentDepth)
        {
            if (!Preprocessed)
            {
                if (SequenceDependent)
                {
                    // Fill in the sequence output
                    if (ObjectBuilder.SequenceOutputID != -1)
                    {
                        m_sequenceOutputNode = Navigator.GetNodeByID(ObjectBuilder.SequenceOutputID);
                        Debug.Assert(m_sequenceOutputNode != null);
                        SequenceOutputs.Add(m_sequenceOutputNode);
                    }

                    // Fill in the sequence input
                    var sequenceInputNode = Navigator.GetNodeByID(ObjectBuilder.SequenceInputID);
                    Debug.Assert(sequenceInputNode != null);
                    SequenceInputs.Add(sequenceInputNode);
                }
                else
                {
                    // Fill in all the outputs of the node
                    foreach (var identifierList in ObjectBuilder.OutputParametersIDs)
                    {
                        foreach (var identifier in identifierList.Ids)
                        {
                            var node = Navigator.GetNodeByID(identifier.NodeID);
                            Outputs.Add(node);
                        }
                    }
                }

                var parameters = m_methodInfo.GetParameters();
                // Change the capacity to match the OB
                Inputs.Capacity = ObjectBuilder.InputParameterIDs.Count;

                if (ObjectBuilder.Version == 0)
                {
                    //// <<BACKWARDS COMPATIBILITY>>
                    for (int index = 0; index < ObjectBuilder.InputParameterIDs.Count; index++)
                    {
                        // Check for missing mandatory inputs
                        var inputIdentifier = ObjectBuilder.InputParameterIDs[index];
                        // Input parameters
                        var inputNode = Navigator.GetNodeByID(inputIdentifier.NodeID);
                        if (inputNode != null)
                        {
                            Inputs.Add(inputNode);
                            m_parametersToInputs.Add(parameters[index],
                                new MyTuple<MyVisualSyntaxNode, MyVariableIdentifier>(inputNode, inputIdentifier));
                        }
                    }
                    //// <<BACKWARDS COMPATIBILITY>>
                }
                else
                {
                    foreach (var parameter in parameters)
                    {
                        // Find the node node identifier in the OB
                        var identifier =
                            ObjectBuilder.InputParameterIDs.Find(ident => ident.OriginName == parameter.Name);
                        // Continue for empty records
                        if (string.IsNullOrEmpty(identifier.OriginName)) continue;

                        // Find node
                        var inputNode = Navigator.GetNodeByID(identifier.NodeID);
                        if (inputNode == null)
                        {
                            if (!parameter.HasDefaultValue) 
                            { 
                                Debug.Fail("FunctionNode: " + ObjectBuilder.ID + " Input node missing! NodeID: "
                                                    + identifier.NodeID + " Function Signature:" + m_methodInfo.Signature() +
                                                    " parameter: " + parameter.Name);
                            }

                            continue;
                        }

                        // register data
                        Inputs.Add(inputNode);
                        var t = !m_parametersToInputs.ContainsKey(parameter);
                        m_parametersToInputs.Add(parameter,
                            new MyTuple<MyVisualSyntaxNode, MyVariableIdentifier>(inputNode, identifier));
                    }

                    // Add instance input as regular input
                    if (ObjectBuilder.InstanceInputID.NodeID != -1)
                    {
                        m_instance = Navigator.GetNodeByID(ObjectBuilder.InstanceInputID.NodeID);
                        if (m_instance != null)
                            Inputs.Add(m_instance);
                    }
                }
            }

            base.Preprocess(currentDepth);
        }
        protected internal override void Preprocess(int currentDepth)
        {
            if(!Preprocessed)
            {
                if (ObjectBuilder.SequenceOutputID != -1)
                {
                    var nextSequenceNode = Navigator.GetNodeByID(ObjectBuilder.SequenceOutputID);
                    Debug.Assert(nextSequenceNode != null);
                    SequenceOutputs.Add(nextSequenceNode);
                }

                if(ObjectBuilder.SequenceInputID != -1)
                {
                    var sequenceInputNode = Navigator.GetNodeByID(ObjectBuilder.SequenceInputID);
                    Debug.Assert(sequenceInputNode != null);
                    SequenceInputs.Add(sequenceInputNode);
                }

                if (ObjectBuilder.ValueInputID.NodeID != -1)
                {
                    m_inputNode = Navigator.GetNodeByID(ObjectBuilder.ValueInputID.NodeID);
                    Debug.Assert(m_inputNode != null);
                    Inputs.Add(m_inputNode);
                }
            }

            base.Preprocess(currentDepth);
        }
        protected internal override void Preprocess(int currentDepth)
        {
            if (!Preprocessed)
            {
                // Fill in the sequence inputs
                foreach (var sequenceInput in ObjectBuilder.SequenceInputs)
                {
                    TryRegisterNode(sequenceInput, SequenceInputs);
                }

                // Fill in the sequence output so preprocess sees it
                if (ObjectBuilder.SequenceOutput != -1)
                {
                    m_finishSequence = Navigator.GetNodeByID(ObjectBuilder.SequenceOutput);
                    if(m_finishSequence != null)
                        SequenceOutputs.Add(m_finishSequence);
                }

                // Fill in the body node
                if (ObjectBuilder.SequenceBody != -1)
                {
                    m_bodySequence = Navigator.GetNodeByID(ObjectBuilder.SequenceBody);
                    if(m_bodySequence != null)
                        SequenceOutputs.Add(m_bodySequence);
                }

                // Fill in the Counter outputs
                foreach (var identifier in ObjectBuilder.CounterValueOutputs)
                {
                    TryRegisterNode(identifier.NodeID, Outputs);
                }

                // Fill in the Inputs
                m_firstInput = TryRegisterNode(ObjectBuilder.FirstIndexValueInput.NodeID, Inputs);
                m_lastInput = TryRegisterNode(ObjectBuilder.LastIndexValueInput.NodeID, Inputs);
                m_incrementInput = TryRegisterNode(ObjectBuilder.IncrementValueInput.NodeID, Inputs);
            }

            base.Preprocess(currentDepth);
        }
 public void AddSequenceInput(MyVisualSyntaxNode parent)
 {
 }
Beispiel #19
0
 public void AddSequenceInput(MyVisualSyntaxNode parent)
 {
 }
 public void AddSequenceInput(MyVisualSyntaxNode node)
 {
     SequenceInputs.Add(node);
 }