using System; using System.Collections.Generic; namespace Ingvar.LiveWatch { public class WatchCachedNamesBuilder { public string ArrayItemFormat = "Item[{0}]"; public string DictionaryKeyFormat = "Key {0}"; public string DictionaryValueFormat = "Value {0}"; private Dictionary _arrayItemNames = new(); private Dictionary _dicitonaryKeyNames = new(); private Dictionary _dictionaryValueNames = new(); private Dictionary> _enumToStrings = new(); private Dictionary _intToStrings = new(); private Dictionary _longToStrings = new(); private Dictionary _charToStrings = new(); private string _tempStr; public string GetCollectionItemName(int index) { if (_arrayItemNames.TryGetValue(index, out _tempStr)) { return _tempStr; } _tempStr = string.Format(ArrayItemFormat, index); _arrayItemNames.Add(index, _tempStr); return _tempStr; } public string GetDictionaryKeyName(int hashCode) { if (_dicitonaryKeyNames.TryGetValue(hashCode, out _tempStr)) { return _tempStr; } _tempStr = string.Format(DictionaryKeyFormat, hashCode); _dicitonaryKeyNames.Add(hashCode, _tempStr); return _tempStr; } public string GetDictionaryValueName(int hashCode) { if (_dictionaryValueNames.TryGetValue(hashCode, out _tempStr)) { return _tempStr; } _tempStr = string.Format(DictionaryValueFormat, hashCode); _dictionaryValueNames.Add(hashCode, _tempStr); return _tempStr; } public string GetStringFromEnum(int value) where T : Enum { var intToStrDict = GetIntToStrDict(); if (intToStrDict.TryGetValue(value, out _tempStr)) { return _tempStr; } _tempStr = Enum.GetName(typeof(T), value); intToStrDict.Add(value, _tempStr); return _tempStr; Dictionary GetIntToStrDict() { if (_enumToStrings.TryGetValue(typeof(T), out var dict)) return dict; dict = new Dictionary(); _enumToStrings.Add(typeof(T), dict); return dict; } } public string GetString(int value) { if (_intToStrings.TryGetValue(value, out _tempStr)) { return _tempStr; } _tempStr = value.ToString(); _intToStrings.Add(value, _tempStr); return _tempStr; } public string GetString(long value) { if (_longToStrings.TryGetValue(value, out _tempStr)) { return _tempStr; } _tempStr = value.ToString(); _longToStrings.Add(value, _tempStr); return _tempStr; } public string GetString(char value) { if (_charToStrings.TryGetValue(value, out _tempStr)) { return _tempStr; } _tempStr = value.ToString(); _charToStrings.Add(value, _tempStr); return _tempStr; } } }