// Name class analysis internal static bool NamesOverlap(RdpPattern p1, RdpPattern p2, bool checkElements) { if (p1 == p2) { return(true); } RdpAbstractBinary bp1 = p1 as RdpAbstractBinary; if (bp1 != null) { return(NamesOverlap(bp1.LValue, p2, checkElements) || NamesOverlap(bp1.RValue, p2, checkElements)); } RdpOneOrMore rp1 = p1 as RdpOneOrMore; if (rp1 != null) { return(NamesOverlap(rp1.Child, p2, checkElements)); } RdpAttribute ap1 = p1 as RdpAttribute; if (ap1 != null) { return(NamesOverlap(p2, ap1.NameClass, checkElements)); } if (!checkElements) { return(false); } RdpElement ep1 = p1 as RdpElement; if (ep1 != null) { return(NamesOverlap(p2, ep1.NameClass, checkElements)); } return(false); }
// Name class analysis static bool NamesOverlap(RdpPattern p1, RdpNameClass n, bool checkElements) { RdpAbstractBinary bp1 = p1 as RdpAbstractBinary; if (bp1 != null) { return(NamesOverlap(bp1.LValue, n, checkElements) || NamesOverlap(bp1.RValue, n, checkElements)); } RdpOneOrMore rp1 = p1 as RdpOneOrMore; if (rp1 != null) { return(NamesOverlap(rp1.Child, n, checkElements)); } RdpAttribute ap1 = p1 as RdpAttribute; if (ap1 != null) { return(NameClassOverlap(ap1.NameClass, n)); } if (!checkElements) { return(false); } RdpElement ep1 = p1 as RdpElement; if (ep1 != null) { return(NameClassOverlap(ep1.NameClass, n)); } return(false); }