protected override void ParseString(string data) {
Clear();
var started = -1;
var key = double.NaN;
var malformed = -1;
var line = 1;
for (var i = 0; i < data.Length; i++) {
switch (data[i]) {
case '\r':
if (i + 1 < data.Length && data[i + 1] == '\n') continue;
malformed = line;
break;
case '|':
if (started != -1) {
if (!double.IsNaN(key) || !FlexibleParser.TryParseDouble(data.Substring(started, i - started), out key)) {
if (malformed == -1) malformed = line;
SkipLine(data, ref i, ref line);
key = double.NaN;
}
started = -1;
}
break;
case '\n':
Finish(Values, data, i, line, ref key, ref started, ref malformed);
line++;
break;
case '/':
if (i + 1 < data.Length && data[i + 1] == '/') goto case ';';
goto default;
case ';':
Finish(Values, data, i, line, ref key, ref started, ref malformed);
SkipLine(data, ref i, ref line);
break;
default:
if (started == -1) started = i;
break;
}
}
Finish(Values, data, data.Length, line, ref key, ref started, ref malformed);
if (malformed != -1) {
ErrorsCatcher?.Catch(this, malformed);
}
}