private static StringManager Quote(StringManager str) { var result = new StringManager(string.Empty); for (int index = 0; index < str.Length; ++index) { if (str.HasPatternAtPosition( new[] { "I" }, index)) result.AppendToBack(new StringManager("C"), 0); else if (str.HasPatternAtPosition( new[] { "C" }, index)) result.AppendToBack(new StringManager("F"), 0); else if (str.HasPatternAtPosition( new[] { "F" }, index)) result.AppendToBack(new StringManager("P"), 0); else if (str.HasPatternAtPosition( new[] { "P" }, index)) result.AppendToBack(new StringManager("IC"), 0); } return result; }
private void Replace(TemplateInfo template, List<StringManager> environment) { var newPrefix = new StringManager(string.Empty); foreach (TemplateItemInfo temp in template) { if (temp.IsBase) { newPrefix.AppendToBack(new StringManager(new string(temp.Symbol, 1)), 0); continue; } if (temp.IsProtect) { if (temp.Reference >= environment.Count) continue; newPrefix.AppendToBack(Protect(temp.Level, environment[temp.Reference]), 0); continue; } if (temp.IsAsNat) { if (temp.Reference >= environment.Count) { newPrefix.AppendToBack(new StringManager(AsNat(0)), 0); continue; } newPrefix.AppendToBack(new StringManager(AsNat(environment[temp.Reference].Length)), 0); continue; } } newPrefix.AppendToBack(_runningDna, _currentIndex); _runningDna = newPrefix; _currentIndex = 0; }
/// <summary> /// Start DNA processing. /// </summary> public void Start() { lock (_runningMutex) { if (_state == RunningState.Running) return; _state = RunningState.Running; } _rnaWriter = new StreamWriter(RnaStream); _runningDna = new StringManager(Prefix); _runningDna.AppendToBack(_sourceDna, 0); _totalCharsOfRna = 0; _totalCommandProcessed = 0; _lastRaisedCharsCountOverEvent = 0; _lastRaisedCommandsCountOverEvent = 0; _currentIndex = 0; _runningThread = new Thread(ProcessDna); _runningThread.Start(); }