public static RegexNode Add(RegexNode node1, RegexNode node2)
{
if (node1 == null || node2 == null)
{
throw new ArgumentException("Both nodes must be not null.");
}
RegexNodeConcatenation node1AsConcatenation = node1 as RegexNodeConcatenation;
RegexNodeConcatenation node2AsConcatenation = node2 as RegexNodeConcatenation;
if (node1AsConcatenation != null && node2AsConcatenation != null)
{
List<RegexNode> newChildNodes = new List<RegexNode>();
newChildNodes.AddRange(node1AsConcatenation.ChildNodes);
newChildNodes.AddRange(node2AsConcatenation.ChildNodes);
RegexNodeConcatenation result = new RegexNodeConcatenation(newChildNodes);
return result;
}
if (node1AsConcatenation != null)
{
List<RegexNode> newChildNodes = new List<RegexNode>(node1AsConcatenation.ChildNodes);
newChildNodes.Add(node2);
RegexNodeConcatenation result = new RegexNodeConcatenation(newChildNodes);
return result;
}
if (node2AsConcatenation != null)
{
List<RegexNode> newChildNodes = new List<RegexNode>();
newChildNodes.Add(node1);
newChildNodes.AddRange(node2AsConcatenation.ChildNodes);
RegexNodeConcatenation result = new RegexNodeConcatenation(newChildNodes);
return result;
}
return new RegexNodeConcatenation(node1, node2);
}