コード例 #1
0
        public override object VisitRestriction([NotNull] ChatParser.RestrictionContext context)
        {
            if (context.And() != null)
            {
                List <int> lhs = (List <int>)VisitRestriction(context.restriction(0));
                List <int> rhs = (List <int>)VisitRestriction(context.restriction(1));

                return(lhs.Intersect(rhs).ToList());
            }
            else if (context.Or() != null)
            {
                List <int> lhs = (List <int>)VisitRestriction(context.restriction(0));
                List <int> rhs = (List <int>)VisitRestriction(context.restriction(1));
                lhs.AddRange(rhs);
                lhs.Sort();

                return(lhs);
            }
            else if (context.Not() != null)
            {
                long tmp      = LuceneService.DirReader.MaxDoc - 1;
                int  msgCount = 1000000;
                if (msgCount > tmp)
                {
                    msgCount = (int)tmp;
                }

                var numberList  = Enumerable.Range(1, msgCount).ToList();
                var excludeList = (List <int>)VisitRestriction(context.restriction(0));

                return(numberList.Except(excludeList).ToList());
            }
            else if (context.condition() != null)
            {
                return(VisitCondition(context.condition()));
            }
            else
            {
                return(VisitRestriction(context.restriction(0)));
            }
        }
コード例 #2
0
 /// <summary>
 /// Visit a parse tree produced by <see cref="ChatParser.restriction"/>.
 /// <para>
 /// The default implementation returns the result of calling <see cref="AbstractParseTreeVisitor{Result}.VisitChildren(IRuleNode)"/>
 /// on <paramref name="context"/>.
 /// </para>
 /// </summary>
 /// <param name="context">The parse tree.</param>
 /// <return>The visitor result.</return>
 public virtual Result VisitRestriction([NotNull] ChatParser.RestrictionContext context)
 {
     return(VisitChildren(context));
 }