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)); }
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)); }
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++; }
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)); }
public ItemList() { segments = new List<ItemSegment>(); current = null; }
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; } }
internal Iterator(ItemList list) { owner = list; pos = 0; current = null; }