Newer
Older
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace MasterDevs.ChromeDevTools.ProtocolGenerator
{
class ProtocolMerger
{
public static void Merge(Protocol source, Protocol target)
{
foreach (var domain in source.Domains)
{
if (!target.Domains.Contains(domain, NameEqualityComparer<Domain>.Instance))
{
target.Domains.Add(domain);
}
else
{
Merge(source, domain, target.Domains.Single(t => NameEqualityComparer<Domain>.Instance.Equals(domain, t)));
static void Merge(Protocol protocol, Domain source, Domain target)
Merge(protocol, source, source.Commands, target.Commands);
Merge(protocol, source, source.Events, target.Events);
Merge(protocol, source, source.Types, target.Types);
}
static void Merge<T>(Protocol protocol, Domain domain, Collection<T> source, Collection<T> target)
where T : ProtocolItem
{
foreach (var item in source)
if (!target.Contains(item, NameEqualityComparer<T>.Instance))
var targetItem = target.Single(t => NameEqualityComparer<T>.Instance.Equals(item, t));
Console.WriteLine($"{protocol.Alias};{domain.Name};{item.Name};{item};{targetItem};{typeof(T).Name}");
foreach (var v in item.SupportedBy)
}
}
}
}
}
}
}