##// END OF EJS Templates
Merge pull request !2 from ImplabNet v3...
Merge pull request !2 from ImplabNet v3 Changes from branch: V3

File last commit:

r289:95896f882995 v3.0.14 v3
r294:abef3ebaa230 merge default
Show More
CharMap.cs
42 lines | 1.3 KiB | text/x-csharp | CSharpLexer
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;
}
}
}