CharAlphabet.cs
36 lines
| 1.0 KiB
| text/x-csharp
|
CSharpLexer
cin
|
r165 | using System.Collections.Generic; | ||
cin
|
r164 | using System.Linq; | ||
cin
|
r165 | using Implab.Automaton; | ||
cin
|
r228 | using System; | ||
cin
|
r164 | |||
cin
|
r165 | namespace Implab.Formats { | ||
cin
|
r236 | public class CharAlphabet : IndexedAlphabetBase<char> { | ||
cin
|
r164 | |||
public override int GetSymbolIndex(char symbol) { | ||||
return symbol; | ||||
} | ||||
cin
|
r176 | public IEnumerable<char> InputSymbols { | ||
cin
|
r164 | get { return Enumerable.Range(char.MinValue, char.MaxValue).Cast<char>(); } | ||
} | ||||
cin
|
r228 | |||
public CharMap CreateCharMap() { | ||||
var map = new Dictionary<int, int>(); | ||||
int max = 0, min = char.MaxValue; | ||||
foreach (var p in Mappings) { | ||||
var index = GetSymbolIndex(p.Key); | ||||
max = Math.Max(max, index); | ||||
min = Math.Min(min, index); | ||||
map[index] = p.Value; | ||||
} | ||||
var result = new int[max - min + 1]; | ||||
for (int i = 0; i < result.Length; i++) | ||||
map.TryGetValue(min + i, out result[i]); | ||||
return new CharMap((char)min, result); | ||||
} | ||||
cin
|
r164 | } | ||
} | ||||