Mercurial > pub > ImplabNet
view Implab/Formats/CharAlphabet.cs @ 275:6fefd5811b9b v3
refactoring
author | cin |
---|---|
date | Fri, 27 Apr 2018 16:57:30 +0300 |
parents | 302ca905c19e |
children |
line wrap: on
line source
using System.Collections.Generic; using System.Linq; using Implab.Automaton; using System; namespace Implab.Formats { public class CharAlphabet : IndexedAlphabetBase<char> { public override int GetSymbolIndex(char symbol) { return symbol; } public IEnumerable<char> InputSymbols { get { return Enumerable.Range(char.MinValue, char.MaxValue).Cast<char>(); } } 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); } } }