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