69 lines
2.2 KiB
C#
69 lines
2.2 KiB
C#
// <copyright>
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
// </copyright>
|
|
|
|
namespace Microsoft.Activities.Presentation.Xaml
|
|
{
|
|
using System.Collections.Generic;
|
|
|
|
class ViewStateIdManager
|
|
{
|
|
readonly char separatorChar = '_';
|
|
Dictionary<string, int> prefixToIntMap = new Dictionary<string, int>();
|
|
|
|
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;
|
|
}
|
|
};
|
|
}
|