add method

  1. @override
int add(
  1. List<int> data,
  2. int offset
)
override

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.
}