protected internal override void Unmerge(ConfigurationElement sourceElement, ConfigurationElement parentElement, ConfigurationSaveMode updateMode)
{
ConfigurationElementCollection source = (ConfigurationElementCollection)sourceElement;
ConfigurationElementCollection parent = (ConfigurationElementCollection)parentElement;
for (int n = 0; n < source.Count; n++)
{
ConfigurationElement sitem = source.BaseGet(n);
object key = source.GetElementKey(sitem);
ConfigurationElement pitem = parent != null?parent.BaseGet(key) as ConfigurationElement : null;
if (pitem != null && updateMode != ConfigurationSaveMode.Full)
{
ConfigurationElement nitem = CreateNewElementInternal(null);
nitem.Unmerge(sitem, pitem, ConfigurationSaveMode.Minimal);
if (nitem.HasValues())
{
BaseAdd(nitem);
}
}
else
{
ConfigurationElement nitem = CreateNewElementInternal(null);
nitem.Unmerge(sitem, null, ConfigurationSaveMode.Full);
BaseAdd(nitem);
}
}
if (updateMode == ConfigurationSaveMode.Full)
{
EmitClear = true;
}
else if (parent != null)
{
for (int n = 0; n < parent.Count; n++)
{
ConfigurationElement pitem = parent.BaseGet(n);
object key = parent.GetElementKey(pitem);
if (source.IndexOfKey(key) == -1)
{
if (removed == null)
{
removed = new ArrayList();
}
removed.Add(pitem);
}
}
}
}