add method
Implementation
@override
int add(List<int> data, int offset) {
if (mode == 0) {
while (offset < data.length && data[offset] <= tokenSpace) {
offset++;
}
if (offset >= data.length) {
return offset; // No more bytes to process.
}
}
for (int o = offset; o < data.length; o++) {
final byte = data[o];
if (mode == 0) {
if (byte == tokenDoubleQuote) {
mode = 1;
} else if (byte == tokenLBrace || byte == tokenLBracket) {
_nesting++;
} else if (byte == tokenRBrace || byte == tokenRBracket) {
if (_nesting == 0) {
_addRange(data, offset, o);
close();
return o; // Return the current offset, which is the next byte of the outer object.
}
_nesting--;
} else if (_nesting == 0 && (byte == tokenComma || byte == tokenColon)) {
_addRange(data, offset, o);
close();
return o; // Return the current offset, which is the next byte of the outer object.
}
} else if (mode == 1) {
if (byte == tokenBackslash) {
mode = 2;
} else if (byte == tokenDoubleQuote) {
mode = 0;
_addRange(data, offset, o + 1);
close();
return o + 1; // Return the next offset after the closing quote.
}
} else if (mode == 2) {
mode = 1;
}
}
_addRange(data, offset, data.length);
return data.length; // All bytes processed, no more items.
}