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