// // Copyright (c) Microsoft Corporation. All rights reserved. // namespace Microsoft.Activities.Presentation.Xaml { using System.Collections.Generic; class ViewStateIdManager { readonly char separatorChar = '_'; Dictionary prefixToIntMap = new Dictionary(); public void UpdateMap(string id) { int separatorLocation = id.LastIndexOf('_'); // If the separator is not found or if the separator is the first or last character // in the id then use id value itself as the prefix. if (separatorLocation == -1 || separatorLocation == 0 || separatorLocation == id.Length - 1) { this.prefixToIntMap[id] = 0; } else { string[] idParts = new string[2]; idParts[0] = id.Substring(0, separatorLocation); idParts[1] = id.Substring(separatorLocation + 1, id.Length - (separatorLocation + 1)); int suffix; if (int.TryParse(idParts[1], out suffix)) { int oldValue; if (this.prefixToIntMap.TryGetValue(idParts[0], out oldValue)) { if (suffix > oldValue) { this.prefixToIntMap[idParts[0]] = suffix; } } else { this.prefixToIntMap[idParts[0]] = suffix; } } else { this.prefixToIntMap[id] = 0; } } } public string GetNewId(string prefix) { int suffix = 0; this.prefixToIntMap.TryGetValue(prefix, out suffix); while (suffix == int.MaxValue) { prefix = prefix + this.separatorChar + suffix; this.prefixToIntMap.TryGetValue(prefix, out suffix); } this.prefixToIntMap[prefix] = ++suffix; return prefix + this.separatorChar + suffix; } }; }