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)); }
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)); }
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); }