public FunctionNameProvider(string filename, INameFactory nameFactory) { Regex r = new Regex("^0x([0-9a-fA-F]*)=(.*)$"); foreach (string s in File.ReadAllLines(filename)) { Match m = r.Match(s); if (m == null || !m.Success) continue; uint functionId = uint.Parse(m.Groups[1].Value, NumberStyles.HexNumber); names.Add(functionId, nameFactory.Create(m.Groups[2].Value)); } }
/// <summary> /// Sync names. Adds new names, updates existing names (unless immutable), and deletes removed names. /// </summary> /// <param name="newNames">New list of names. Cannot be null.</param> /// <param name="nameFactory">Factory for creating new names. Cannot be null.</param> /// <param name="deletedCallback"> /// Callback to be executed after names have been deleted. Can be null. /// </param> /// <param name="editedCallback">Callback to be executed after names have been updated. Can be null.</param> /// <param name="immutable"> /// Whether to treat names as immutable. /// If this is true, names will never be updated - instead, changed names are deleted and recreated. /// </param> /// <returns>Resulted diff for name update. Cannot be null.</returns> public virtual CollectionDiffWithValue <T, T> Sync(IEnumerable <LocalizedStringWithIdContract> newNames, INameFactory <T> nameFactory, Action <T[]> deletedCallback = null, Action <T[]> editedCallback = null, bool immutable = false) { ParamIs.NotNull(() => newNames); ParamIs.NotNull(() => nameFactory); var diff = CollectionHelper.Diff(Names, newNames, (n1, n2) => n1.Id == n2.Id && (!immutable || n1.ContentEquals(n2))); var created = new List <T>(); var edited = new List <T>(); foreach (var n in diff.Removed) { Remove(n); } if (deletedCallback != null) { deletedCallback(diff.Removed); } foreach (var old in diff.Unchanged) { var nameEntry = newNames.First(n => n.Id == old.Id); if (!old.ContentEquals(nameEntry)) { old.Language = nameEntry.Language; old.Value = nameEntry.Value; edited.Add(old); } } if (editedCallback != null) { editedCallback(edited.ToArray()); } foreach (var nameEntry in diff.Added) { var n = nameFactory.CreateName(nameEntry.Value, nameEntry.Language); created.Add(n); } UpdateSortNames(); return(new CollectionDiffWithValue <T, T>(created, diff.Removed, diff.Unchanged, edited)); }