Example #1
0
 /// <summary>
 /// Add a pattern to the list of patterns that the annotated node matches.
 /// </summary>
 public void AddPattern(OptimizerPatternName pattern)
 {
     Debug.Assert(Enum.IsDefined(typeof(OptimizerPatternName), pattern));
     Debug.Assert((int)pattern < 32);
     Debug.Assert(!_isReadOnly, "This OptimizerPatterns instance is read-only.");
     _patterns |= (1 << (int)pattern);
 }
Example #2
0
        /// <summary>
        /// Create and initialize OptimizerPatterns annotation for the specified node.
        /// </summary>
        public static void Inherit(QilNode ndSrc, QilNode ndDst, OptimizerPatternName pattern)
        {
            OptimizerPatterns annSrc = OptimizerPatterns.Read(ndSrc);

            if (annSrc.MatchesPattern(pattern))
            {
                OptimizerPatterns annDst = OptimizerPatterns.Write(ndDst);
                annDst.AddPattern(pattern);

                // Inherit pattern arguments
                switch (pattern)
                {
                case OptimizerPatternName.Step:
                    annDst.AddArgument(OptimizerPatternArgument.StepNode, annSrc.GetArgument(OptimizerPatternArgument.StepNode));
                    annDst.AddArgument(OptimizerPatternArgument.StepInput, annSrc.GetArgument(OptimizerPatternArgument.StepInput));
                    break;

                case OptimizerPatternName.FilterElements:
                    annDst.AddArgument(OptimizerPatternArgument.ElementQName, annSrc.GetArgument(OptimizerPatternArgument.ElementQName));
                    break;

                case OptimizerPatternName.FilterContentKind:
                    annDst.AddArgument(OptimizerPatternArgument.KindTestType, annSrc.GetArgument(OptimizerPatternArgument.KindTestType));
                    break;

                case OptimizerPatternName.EqualityIndex:
                    annDst.AddArgument(OptimizerPatternArgument.IndexedNodes, annSrc.GetArgument(OptimizerPatternArgument.IndexedNodes));
                    annDst.AddArgument(OptimizerPatternArgument.KeyExpression, annSrc.GetArgument(OptimizerPatternArgument.KeyExpression));
                    break;

                case OptimizerPatternName.DodReverse:
                case OptimizerPatternName.JoinAndDod:
                    annDst.AddArgument(OptimizerPatternArgument.DodStep, annSrc.GetArgument(OptimizerPatternArgument.DodStep));
                    break;

                case OptimizerPatternName.MaxPosition:
                    annDst.AddArgument(OptimizerPatternArgument.MaxPosition, annSrc.GetArgument(OptimizerPatternArgument.MaxPosition));
                    break;

                case OptimizerPatternName.SingleTextRtf:
                    annDst.AddArgument(OptimizerPatternArgument.RtfText, annSrc.GetArgument(OptimizerPatternArgument.RtfText));
                    break;
                }
            }
        }
Example #3
0
 /// <summary>
 /// Return true if the annotated node matches the specified pattern.
 /// </summary>
 public bool MatchesPattern(OptimizerPatternName pattern) {
     Debug.Assert(Enum.IsDefined(typeof(OptimizerPatternName), pattern));
     return (this.patterns & (1 << (int) pattern)) != 0;
 }
Example #4
0
 /// <summary>
 /// Add a pattern to the list of patterns that the annotated node matches.
 /// </summary>
 public void AddPattern(OptimizerPatternName pattern) {
     Debug.Assert(Enum.IsDefined(typeof(OptimizerPatternName), pattern));
     Debug.Assert((int) pattern < 32);
     Debug.Assert(!this.isReadOnly, "This OptimizerPatterns instance is read-only.");
     this.patterns |= (1 << (int) pattern);
 }
Example #5
0
        /// <summary>
        /// Create and initialize OptimizerPatterns annotation for the specified node.
        /// </summary>
        public static void Inherit(QilNode ndSrc, QilNode ndDst, OptimizerPatternName pattern) {
            OptimizerPatterns annSrc = OptimizerPatterns.Read(ndSrc);

            if (annSrc.MatchesPattern(pattern)) {
                OptimizerPatterns annDst = OptimizerPatterns.Write(ndDst);
                annDst.AddPattern(pattern);

                // Inherit pattern arguments
                switch (pattern) {
                    case OptimizerPatternName.Step:
                        annDst.AddArgument(OptimizerPatternArgument.StepNode, annSrc.GetArgument(OptimizerPatternArgument.StepNode));
                        annDst.AddArgument(OptimizerPatternArgument.StepInput, annSrc.GetArgument(OptimizerPatternArgument.StepInput));
                        break;

                    case OptimizerPatternName.FilterElements:
                        annDst.AddArgument(OptimizerPatternArgument.ElementQName, annSrc.GetArgument(OptimizerPatternArgument.ElementQName));
                        break;

                    case OptimizerPatternName.FilterContentKind:
                        annDst.AddArgument(OptimizerPatternArgument.KindTestType, annSrc.GetArgument(OptimizerPatternArgument.KindTestType));
                        break;

                    case OptimizerPatternName.EqualityIndex:
                        annDst.AddArgument(OptimizerPatternArgument.IndexedNodes, annSrc.GetArgument(OptimizerPatternArgument.IndexedNodes));
                        annDst.AddArgument(OptimizerPatternArgument.KeyExpression, annSrc.GetArgument(OptimizerPatternArgument.KeyExpression));
                        break;

                    case OptimizerPatternName.DodReverse:
                    case OptimizerPatternName.JoinAndDod:
                        annDst.AddArgument(OptimizerPatternArgument.DodStep, annSrc.GetArgument(OptimizerPatternArgument.DodStep));
                        break;

                    case OptimizerPatternName.MaxPosition:
                        annDst.AddArgument(OptimizerPatternArgument.MaxPosition, annSrc.GetArgument(OptimizerPatternArgument.MaxPosition));
                        break;

                    case OptimizerPatternName.SingleTextRtf:
                        annDst.AddArgument(OptimizerPatternArgument.RtfText, annSrc.GetArgument(OptimizerPatternArgument.RtfText));
                        break;
                }
            }
        }
Example #6
0
 /// <summary>
 /// Return true if the annotated node matches the specified pattern.
 /// </summary>
 public bool MatchesPattern(OptimizerPatternName pattern)
 {
     Debug.Assert(Enum.IsDefined(typeof(OptimizerPatternName), pattern));
     return((_patterns & (1 << (int)pattern)) != 0);
 }