public RdpInterleave MakeInterleave (RdpPattern p1, RdpPattern p2) { if (p1.GetHashCode () > p2.GetHashCode ()) { RdpPattern tmp = p1; p1 = p2; p2 = tmp; } Hashtable p1Table = setupTable (typeof (RdpInterleave), p1); if (p1Table [p2] == null) { RdpInterleave i = new RdpInterleave (p1, p2); i.setInternTable (this.patternPool); p1Table [p2] = i; } return (RdpInterleave) p1Table [p2]; }
internal RdpPattern makeBinary (RelaxngGrammar g) { // Flatten patterns. See 4.12. if (patterns.Count == 0) throw new RelaxngException (this, "No pattern contents."); RdpPattern p = ((RelaxngPattern) patterns [0]).Compile (g); if (patterns.Count == 1) return p; for (int i=1; i<patterns.Count; i++) { RdpPattern cp = ((RelaxngPattern) patterns [i]).Compile (g); switch (this.PatternType) { case RelaxngPatternType.Choice: p = new RdpChoice (p, cp); break; case RelaxngPatternType.Group: p = new RdpGroup (p, cp); break; case RelaxngPatternType.Interleave: p = new RdpInterleave (p, cp); break; } } return p; }