view Implab/Formats/CharAlphabet.cs @ 234:8dd666e6b6bf v2

Added implab nuget spec
author cin
date Thu, 05 Oct 2017 09:21:23 +0300
parents 6fa235c5a760
children 302ca905c19e
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);
        }
    }
}