mirror of https://github.com/icsharpcode/ILSpy.git
				
				
			
			You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							60 lines
						
					
					
						
							1.2 KiB
						
					
					
				
			
		
		
	
	
							60 lines
						
					
					
						
							1.2 KiB
						
					
					
				using System.Collections.Generic; | 
						|
 | 
						|
namespace ICSharpCode.Decompiler.CSharp.Syntax | 
						|
{ | 
						|
	/// <summary> | 
						|
	/// A specific role only used for C# tokens | 
						|
	/// </summary> | 
						|
	public sealed class TokenRole : Role<CSharpTokenNode> | 
						|
	{ | 
						|
		internal readonly static List<string> Tokens = new List<string> (); | 
						|
		internal readonly static List<int>    TokenLengths = new List<int> (); | 
						|
		internal readonly uint TokenIndex; | 
						|
 | 
						|
		static TokenRole () | 
						|
		{ | 
						|
			// null token | 
						|
			Tokens.Add (""); | 
						|
			TokenLengths.Add (0); | 
						|
		} | 
						|
 | 
						|
		/// <summary> | 
						|
		/// Gets the token as string. Note that the token Name and Token value may differ. | 
						|
		/// </summary> | 
						|
		public string Token { | 
						|
			get; | 
						|
			private set; | 
						|
		} | 
						|
		 | 
						|
		/// <summary> | 
						|
		/// Gets the char length of the token. | 
						|
		/// </summary> | 
						|
		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); | 
						|
			} | 
						|
		} | 
						|
	} | 
						|
} | 
						|
 | 
						|
 |