コード例 #1
0
ファイル: LambdaDSL.cs プロジェクト: shekhar249/GraphEngine
        private static FanoutSearchDescriptor ConstructFanoutSearchDescriptor(List <FSDescCallchainElement> fs_callchain)
        {
            FanoutSearchDescriptor fs_desc = ConstructFanoutSearchOrigin(fs_callchain.First());

            for (int idx = 1; idx < fs_callchain.Count; ++idx)
            {
                FSDescCallchainElement visitNode     = fs_callchain[idx];
                FSDescCallchainElement followEdge    = null;
                FanoutSearch.Action    defaultAction = Action.Continue;

                if (visitNode.Method == s_LIKQ_FollowEdge)
                {
                    ThrowIf(++idx >= fs_callchain.Count, "The query expression cannot end with '" + s_LIKQ_FollowEdge + "'", visitNode.SyntaxNode);
                    followEdge = visitNode;
                    visitNode  = fs_callchain[idx];
                    if (visitNode.Method == s_LIKQ_FollowEdge)
                    {
                        // two consequtive FollowEdge, use default traverse action.
                        --idx;
                        visitNode = null;
                    }
                }

                if (idx + 1 >= fs_callchain.Count)
                {
                    // The last element should have default action Action.Return
                    defaultAction = Action.Return;
                }

                ThrowIf(visitNode.Method != s_LIKQ_VisitNode, "Expecting '" + s_LIKQ_VisitNode + "'", visitNode.SyntaxNode);
                fs_desc = ConstructFanoutSearchBody(fs_desc, visitNode, followEdge, defaultAction);
            }

            return(fs_desc);
        }
コード例 #2
0
        public void Test16()
        {
            FanoutSearch.Action a = FanoutSearch.Action.Continue, b = FanoutSearch.Action.Return;

            var paths = KnowledgeGraph.StartFrom(1).VisitNode(_ => a & b);

            paths.ToList();
        }