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);
}
}
}
}