using System.Collections.Generic; namespace ICSharpCode.Decompiler.CSharp.Syntax { /// /// A specific role only used for C# tokens /// public sealed class TokenRole : Role { internal readonly static List Tokens = new List(); internal readonly static List TokenLengths = new List(); internal readonly uint TokenIndex; static TokenRole() { // null token Tokens.Add(""); TokenLengths.Add(0); } /// /// Gets the token as string. Note that the token Name and Token value may differ. /// public string Token { get; private set; } /// /// Gets the char length of the token. /// public int Length { get; private set; } public TokenRole(string token) : base(token, CSharpTokenNode.Null) { this.Token = token; this.Length = token.Length; bool found = false; for (int i = 0; i < Tokens.Count; i++) { var existingToken = Tokens[i]; if (existingToken == token) { TokenIndex = (uint)i; found = true; break; } } if (!found) { TokenIndex = (uint)Tokens.Count; Tokens.Add(token); TokenLengths.Add(this.Length); } } } }