コード例 #1
0
 private static Pipeline AppendToPipeline(Pipeline pipeline, SpecificationContext context, SetDefinition setDefinition, SpecificationResult result)
 {
     if (setDefinition is SetDefinitionPredecessorChain predecessorChainSet)
     {
         var chain = predecessorChainSet.ToChain();
         var targetSetDefinition = chain.TargetSetDefinition;
         var start  = targetSetDefinition.Label;
         var target = new Label(predecessorChainSet.Role, chain.TargetFactType);
         var path   = new Path(start, target);
         return(pipeline.AddPath(AddPredecessorSteps(path, chain)));
     }
     else if (setDefinition is SetDefinitionJoin joinSet)
     {
         var head = joinSet.Head;
         var tail = joinSet.Tail;
         var sourceSetDefinition = head.TargetSetDefinition;
         var source = sourceSetDefinition.Label;
         var target = joinSet.Label;
         var path   = new Path(source, target);
         return(pipeline.AddPath(PrependSuccessorSteps(AddPredecessorSteps(path, head), tail)));
     }
     else if (setDefinition is SetDefinitionConditional conditionalSet)
     {
         var targetSetDefinition = conditionalSet.Source;
         var start         = targetSetDefinition.Label;
         var childPipeline = CreatePipeline(
             SpecificationContext.Empty
             .With(start, SpecificationParser.InstanceOfFact(targetSetDefinition.Type), targetSetDefinition.Type),
             conditionalSet.Condition.SpecificationResult);
         var conditional = new Conditional(start, conditionalSet.Condition.Exists, childPipeline);
         return(pipeline.AddConditional(conditional));
     }
     else
     {
         throw new NotImplementedException();
     }
 }