Example #1
0
        public void AppendToBack(StringManager anotherStr, int fromIndex)
        {
            _internalString += anotherStr._internalString.Substring(fromIndex);
            _ropeString.AppendToBack(anotherStr._ropeString, fromIndex);

            if (_ropeString.ToString() != _internalString)
                throw new InvalidOperationException("Strings are different!");
        }
Example #2
0
        /// <summary>
        /// Constructor of DNA processor.
        /// </summary>
        /// <param name="inputStream">Input stream with source DNA.</param>
        /// <param name="outputStream">Output stream for produced RNA.</param>
        public DnaRunner(Stream inputStream, Stream outputStream)
        {
            if (inputStream.CanSeek)
                inputStream.Seek(0, SeekOrigin.Begin);

            _sourceDna = new StringManager(new StreamReader(inputStream).ReadToEnd());

            RnaStream = outputStream;

            _state = RunningState.Stoped;
        }
Example #3
0
        public StringManager Substring(int fromIndex, int length)
        {
            var subRopeRope = _ropeString.Substring(fromIndex, length);
            var subRope = new StringManager(string.Empty)
                {
                    _internalString = subRopeRope.ToString(),
                    _ropeString = subRopeRope

                };

            var subStr = new StringManager(_internalString.Substring(fromIndex, length));

            if (subStr.ToString() != subRope.ToString())
                throw new InvalidOperationException("Substring are different!");

            return subRope;
        }
Example #4
0
        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;
        }
Example #5
0
        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;
        }
Example #6
0
        private static StringManager Protect(int level, StringManager str)
        {
            if (level == 0)
                return str;

            return Protect(level - 1, Quote(str));
        }
Example #7
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();
        }