Mercurial > pub > ImplabNet
view Implab/Formats/CharMap.cs @ 239:eedf4d834e67 v2
fix
author | cin |
---|---|
date | Wed, 13 Dec 2017 19:54:45 +0300 |
parents | 302ca905c19e |
children |
line wrap: on
line source
using Implab.Automaton; using System; using System.Collections.Generic; using System.Linq; using System.Runtime.CompilerServices; using System.Text; using System.Threading.Tasks; namespace Implab.Formats { public class CharMap : IAlphabet<char> { readonly char m_min; readonly char m_max; readonly int[] m_map; public CharMap(char min, int[] map) { Safe.ArgumentNotNull(map, nameof(map)); Count = map.Max()+1; m_min = min; m_map = map; m_max = (char)(min + map.Length); } public int Count { get; private set; } public bool Contains(char symbol) { return symbol >= m_min && symbol <= m_max && m_map[symbol-m_min] != AutomatonConst.UnclassifiedInput; } public IEnumerable<char> GetSymbols(int cls) { for (var i = 0; i < m_map.Length; i++) if (m_map[i] == cls) yield return (char)(i + m_min); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public int Translate(char symbol) { return symbol >= m_min && symbol <= m_max ? m_map[symbol-m_min] : AutomatonConst.UnclassifiedInput; } } }