public void AddRange(OrderableStrings collection, int outerOrderNumber = 0, OrderResolve resolveMethod = OrderResolve.None) { List <StringEntry> existingEntriesToAdd = null; foreach (var entry in collection._list) { var newEntry = new StringEntry(entry.StringValue, entry.OrderNumber + outerOrderNumber); if (_hashSet.Add(entry.StringValue)) { _list.Add(newEntry); } else if (newEntry.OrderNumber != 0) // make sure to have orderNumber { if (existingEntriesToAdd == null) { existingEntriesToAdd = new List <StringEntry>(); } existingEntriesToAdd.Add(newEntry); } } if (existingEntriesToAdd != null) { Dictionary <string, int> dict = GetStringToOrderNumberDictionary(existingEntriesToAdd); for (int i = 0; i < _list.Count; ++i) { int orderNumber; if (dict.TryGetValue(_list[i].StringValue, out orderNumber)) { if (_list[i].OrderNumber == 0) { _list[i] = new StringEntry(_list[i].StringValue, orderNumber); } else if (_list[i].OrderNumber != orderNumber) { if (resolveMethod == OrderResolve.Less) { if (orderNumber < _list[i].OrderNumber) { _list[i] = new StringEntry(_list[i].StringValue, orderNumber); } } else if (resolveMethod == OrderResolve.Greater) { if (orderNumber > _list[i].OrderNumber) { _list[i] = new StringEntry(_list[i].StringValue, orderNumber); } } else { throw new Error( "Cannot specify 2 different non-zero order number for \"" + _list[i].StringValue + "\": " + _list[i].OrderNumber + " and " + orderNumber); } } } } } }
public void Add(string item, int orderNumber, OrderResolve resolveMethod = OrderResolve.None) { if (_hashSet.Add(item)) { _list.Add(new StringEntry(item, orderNumber)); } else if (orderNumber != 0) { // Make sure to have same number for (int i = 0; i < _list.Count; ++i) { if (_list[i].StringValue == item) { if (_list[i].OrderNumber == 0) { _list[i] = new StringEntry(item, orderNumber); } else if (_list[i].OrderNumber != orderNumber) { if (resolveMethod == OrderResolve.Less) { if (orderNumber < _list[i].OrderNumber) { _list[i] = new StringEntry(item, orderNumber); } } else if (resolveMethod == OrderResolve.Greater) { if (orderNumber > _list[i].OrderNumber) { _list[i] = new StringEntry(item, orderNumber); } } else { throw new Error( "Cannot specify 2 different non-zero order number for \"" + item + "\": " + _list[i].OrderNumber + " and " + orderNumber); } } } } } }