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));
            }
        }
Esempio n. 2
0
        /// <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));
        }