Example #1
0
            public bool Parse(ITextSegment textSegment)
            {
                Verify.Argument.IsNotNull(textSegment, nameof(textSegment));
                Verify.State.IsFalse(_isCompleted, "Field is already completed.");

                if (_offset == 0 && textSegment.Length > 0)
                {
                    var term = textSegment.PeekChar();
                    if (term == '\n')
                    {
                        textSegment.Skip(1);
                        _isCompleted = true;
                        return(true);
                    }
                }
                if (_offset < 40 && textSegment.Length > 0)
                {
                    int c = Math.Min(textSegment.Length, 40 - _offset);
                    textSegment.MoveTo(_buffer, _offset, c);
                    _offset += c;
                }
                if (_offset == 40 && textSegment.Length > 0)
                {
                    _offset = 0;
                    _hashes.Add(new Hash(_buffer));
                    var separator = textSegment.ReadChar();
                    if (separator == '\n')
                    {
                        _isCompleted = true;
                        return(true);
                    }
                }
                return(false);
            }
Example #2
0
            public bool Parse(ITextSegment textSegment)
            {
                Assert.IsNotNull(textSegment);

                while (textSegment.Length > 0)
                {
                    switch (_offset)
                    {
                    case -3:
                        X = textSegment.ReadChar();
                        ++_offset;
                        break;

                    case -2:
                        Y = textSegment.ReadChar();
                        ++_offset;
                        break;

                    case -1:
                        textSegment.Skip(1);
                        ++_offset;
                        break;

                    case 0:
                        if (ParseFileName(textSegment, _to))
                        {
                            ++_offset;
                            if (X != 'C' && X != 'R')
                            {
                                ++_offset;
                                return(true);
                            }
                        }
                        break;

                    case 1:
                        if (ParseFileName(textSegment, _from))
                        {
                            ++_offset;
                            return(true);
                        }
                        break;
                    }
                }
                return(false);
            }
Example #3
0
            public bool Parse(ITextSegment textSegment)
            {
                Verify.Argument.IsNotNull(textSegment, nameof(textSegment));
                Verify.State.IsFalse(_isCompleted, "Field is already completed.");

                while (textSegment.Length > 0)
                {
                    var c = textSegment.ReadChar();
                    if (c == '\n')
                    {
                        _isCompleted = true;
                        return(true);
                    }
                    int value = c - '0';
                    if (value >= 0 && value <= 9)
                    {
                        _timestamp = _timestamp * 10 + value;
                    }
                }
                return(false);
            }
Example #4
0
            public bool Parse(ITextSegment textSegment)
            {
                Verify.Argument.IsNotNull(textSegment, nameof(textSegment));
                Verify.State.IsFalse(_isCompleted, "Field is already completed.");

                while (textSegment.Length > 0)
                {
                    int separatorIndex = _isSubjectCompleted ?
                                         textSegment.IndexOf('\0') :
                                         textSegment.IndexOfAny(Separators);
                    if (separatorIndex == -1)
                    {
                        if (_isSubjectCompleted)
                        {
                            textSegment.MoveTo(_body, textSegment.Length);
                        }
                        else
                        {
                            if (_separator.Length != 0)
                            {
                                _separator.Dump(_subject);
                            }
                            textSegment.MoveTo(_subject, textSegment.Length);
                        }
                        return(false);
                    }
                    else
                    {
                        if (_isSubjectCompleted)
                        {
                            textSegment.MoveTo(_body, separatorIndex);
                        }
                        else
                        {
                            if (separatorIndex != 0)
                            {
                                if (_separator.Length != 0)
                                {
                                    _separator.Dump(_subject);
                                }
                                textSegment.MoveTo(_subject, separatorIndex);
                            }
                        }
                        var separatorChar = textSegment.ReadChar();
                        switch (separatorChar)
                        {
                        case '\0':
                            RemoveTrailingWhitespace(_subject);
                            if (_isSubjectCompleted)
                            {
                                RemoveTrailingWhitespace(_body);
                            }
                            _isCompleted = true;
                            return(true);

                        case '\r':
                        case '\n':
                            if (_isSubjectCompleted)
                            {
                                _body.Append(separatorChar);
                            }
                            else
                            {
                                if (_separator.Append(separatorChar))
                                {
                                    _isSubjectCompleted = true;
                                    _separator.Reset();
                                }
                            }
                            break;
                        }
                    }
                }
                return(false);
            }