Example #1
0
            public MatchResult Matches(bool invert, ItemType itemType, ItemSegment item, string[] references)
            {
                string[] groupsInItem = NO_GROUPS;

                for (int i = 0; i < Matchers.Length; i++)
                {
                    IMatcher             matcher = Matchers[i];
                    string               value   = itemType.GetValue(item, i);
                    IEnumerable <string> groups  = matcher.Matches(value, references);
                    if (groups == null)
                    {
                        return(new MatchResult(invert, null));
                    }
                    int ct = groups.Count();
                    if (ct > 0)
                    {
                        var newGroupsInItem = new string[groupsInItem.Length + ct];
                        Array.Copy(groupsInItem, newGroupsInItem, groupsInItem.Length);
                        int j = groupsInItem.Length;
                        foreach (var g in groups)
                        {
                            newGroupsInItem[j++] = g;
                        }
                        groupsInItem = newGroupsInItem;
                    }
                }
                return(new MatchResult(!invert, groupsInItem));
            }
Example #2
0
 public MatchResult Matches(bool invert, ItemType itemType, ItemSegment item, string[] references)
 {
     // In an AnyWhereMatcher, we ignore the pattern's type and just look into each field of the item.
     foreach (var value in item.Values)
     {
         IEnumerable <string> groups = Matchers[0].Matches(value, references);
         if (groups != null)
         {
             return(new MatchResult(!invert, groups.ToArray()));
         }
     }
     return(new MatchResult(invert, null));
 }
Example #3
0
 public void Add(XPathItem item)
 {
     XQueryNavigator nav = item as XQueryNavigator;
     if (nav != null && nav.NodeType == XPathNodeType.Element)
     {
         if (current == null || current.document != nav.Document)
         {
             current = new ElementsSegment(nav.Document);
             segments.Add(current);
         }
         current.Add(nav.Position);
     }
     else
     {
         if (current == null || current.document != null)
         {
             current = new DataSegment();
             segments.Add(current);
         }
         current.Add(item.Clone());
     }
     count++;
 }
Example #4
0
            public MatchResult Matches(bool invert, ItemType itemType, ItemSegment item, string[] references)
            {
                List <string> groupsInItem = null;

                for (int i = 0; i < Matchers.Length; i++)
                {
                    IMatcher             matcher = Matchers[i];
                    string               value   = itemType.GetValue(item, i);
                    IEnumerable <string> groups  = matcher.Matches(value, references);
                    if (groups == null)
                    {
                        return(new MatchResult(invert, null));
                    }
                    if (groups.Any())
                    {
                        if (groupsInItem == null)
                        {
                            groupsInItem = new List <string>(4);
                        }
                        groupsInItem.AddRange(groups);
                    }
                }
                return(new MatchResult(!invert, groupsInItem?.ToArray()));
            }
 public override int GetHashCode()
 {
     return(ItemSegment.GetHashCode());
 }
 public override bool Equals(object obj)
 {
     return(ItemSegment.Equals(((TooltipItem)obj).ItemSegment));
 }
Example #7
0
 public ItemList()
 {
     segments = new List<ItemSegment>();
     current = null;
 }
Example #8
0
 public XPathItem this[int i]
 {
     get
     {
         if (i < pos)
         {
             current = null;
             pos = 0;
         }
         if (current == null)
         {
             index = 0;
             offset = 0;
             if (owner.segments.Count == 0)
                 return null;
             current = owner.segments[0];
             nav = null;
         }
         while (pos < i)
         {
             if (offset == current.Count - 1)
             {
                 index++;
                 if (index == owner.segments.Count)
                     return null;
                 current = owner.segments[index];
                 offset = 0;
                 nav = null;
             }
             else
                 offset++;
             pos++;
         }
         object packedItem = current[offset];
         XPathItem item = packedItem as XPathItem;
         if (item != null)
             return item;
         if (nav == null)
             nav = current.document.CreateNavigator();
         nav.Position = (int)packedItem;
         return nav;
     }
 }
Example #9
0
 internal Iterator(ItemList list)
 {
     owner = list;
     pos = 0;
     current = null;
 }