示例#1
0
        public override void Emit(IMapping mapping, byte[] input, ICollection <Symbol> buffer)
        {
            var set = mapping.GetCodeSet(_codeSet);

            buffer.Add(set.GetSymbolForCode(set.StartCode));
            _highMode.Wrap(set, buffer, FlushHelper.CreateFlushEmits(set, input, buffer, Start, Length));
        }
示例#2
0
        public override void Emit(IMapping mapping, byte[] input, ICollection <Symbol> buffer)
        {
            if (_needsChangeOfSet)
            {
                var previousSet = mapping.GetCodeSet(Predecessor.FinalCodeSet);
                var mySet       = mapping.GetCodeSet(FinalCodeSet);
                if (!mySet.SwitchToCode.HasValue)
                {
                    throw new InvalidOperationException($"Cannot switch to {FinalCodeSet} from ");
                }

                buffer.Add(previousSet.GetSymbolForCode(mySet.SwitchToCode.Value));
            }

            var set = mapping.GetCodeSet(FinalCodeSet);

            _highMode.Wrap(set, buffer, FlushHelper.CreateFlushEmits(set, input, buffer, Start, Length));
        }
示例#3
0
        public override void Emit(IMapping mapping, byte[] input, ICollection <Symbol> buffer)
        {
            var previousSet = mapping.GetCodeSet(Predecessor.FinalCodeSet);
            var mySet       = mapping.GetCodeSet(_codeSet);

            if (!previousSet.ShiftOtherCode.HasValue)
            {
                throw new InvalidOperationException($"Cannot switch to {_codeSet} from ");
            }

            var actions = Enumerable.Range(Start, Length).Select(index => new Action(() =>
            {
                buffer.Add(previousSet.GetSymbolForCode(previousSet.ShiftOtherCode.Value));
                buffer.Add(mySet.GetSymbolForCode(input[Start]));
            }));

            _highMode.Wrap(previousSet, buffer, actions);
        }