本文整理汇总了C#中ProtoCore.FunctionGroup.CanGetExactMatchStatics方法的典型用法代码示例。如果您正苦于以下问题:C# FunctionGroup.CanGetExactMatchStatics方法的具体用法?C# FunctionGroup.CanGetExactMatchStatics怎么用?C# FunctionGroup.CanGetExactMatchStatics使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ProtoCore.FunctionGroup
的用法示例。
在下文中一共展示了FunctionGroup.CanGetExactMatchStatics方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C#代码示例。
示例1: ComputeFeps
private void ComputeFeps(
Context context,
List<StackValue> arguments,
FunctionGroup funcGroup,
List<ReplicationInstruction> instructions,
StackFrame stackFrame,
RuntimeCore runtimeCore,
out List<FunctionEndPoint> resolvesFeps,
out List<ReplicationInstruction> replicationInstructions)
{
#region Case 1: Replication guide with exact match
{
FunctionEndPoint fep = GetCompleteMatchFunctionEndPoint(context, arguments, funcGroup, instructions, stackFrame, runtimeCore);
if (fep != null)
{
resolvesFeps = new List<FunctionEndPoint>() { fep };
replicationInstructions = instructions;
return;
}
}
#endregion
var replicationTrials = Replicator.BuildReplicationCombinations(instructions, arguments, runtimeCore);
#region Case 2: Replication and replication guide with exact match
{
//Build the possible ways in which we might replicate
foreach (List<ReplicationInstruction> replicationOption in replicationTrials)
{
List<List<StackValue>> reducedParams = Replicator.ComputeAllReducedParams(arguments, replicationOption, runtimeCore);
HashSet<FunctionEndPoint> lookups;
if (funcGroup.CanGetExactMatchStatics(context, reducedParams, stackFrame, runtimeCore, out lookups))
{
//Otherwise we have a cluster of FEPs that can be used to dispatch the array
resolvesFeps = new List<FunctionEndPoint>(lookups);
replicationInstructions = replicationOption;
return;
}
}
}
#endregion
#region Case 3: Replciation with type conversion
{
FunctionEndPoint compliantTarget = GetCompliantFEP(context, arguments, funcGroup, instructions, stackFrame, runtimeCore);
if (compliantTarget != null)
{
resolvesFeps = new List<FunctionEndPoint>() { compliantTarget };
replicationInstructions = instructions;
return;
}
}
#endregion
#region Case 4: Replication and replication guide with type conversion
{
if (arguments.Any(arg => arg.IsArray))
{
foreach (List<ReplicationInstruction> replicationOption in replicationTrials)
{
FunctionEndPoint compliantTarget = GetCompliantFEP(context, arguments, funcGroup, replicationOption, stackFrame, runtimeCore);
if (compliantTarget != null)
{
resolvesFeps = new List<FunctionEndPoint>() { compliantTarget };
replicationInstructions = replicationOption;
return;
}
}
}
}
#endregion
#region Case 5: Replication and replciation guide with type conversion and array promotion
{
//Add as a first attempt a no-replication, but allowing up-promoting
replicationTrials.Add(new List<ReplicationInstruction>());
foreach (List<ReplicationInstruction> replicationOption in replicationTrials)
{
FunctionEndPoint compliantTarget = GetCompliantFEP(context, arguments, funcGroup, replicationOption, stackFrame, runtimeCore, true);
if (compliantTarget != null)
{
resolvesFeps = new List<FunctionEndPoint>() { compliantTarget };
replicationInstructions = replicationOption;
return;
}
}
}
#endregion
#region Case 6: Replication and replication guide with type conversion and array promotion, and OK if not all convertible
{
foreach (List<ReplicationInstruction> replicationOption in replicationTrials)
{
FunctionEndPoint compliantTarget = GetLooseCompliantFEP(context, arguments, funcGroup, replicationOption, stackFrame, runtimeCore);
if (compliantTarget != null)
{
resolvesFeps = new List<FunctionEndPoint>() { compliantTarget };
//.........这里部分代码省略.........