parse static method

CodecParseResults parse(
  1. DC data,
  2. int offset,
  3. DistributedConnection? connection,
  4. List<int>? requestSequence, [
  5. TransmissionType? dataType = null,
])
Parse a value Bytes array Zero-indexed offset. Output the number of bytes parsed DistributedConnection is required in case a structure in the array holds items at the other end. DataType, in case the data is not prepended with DataType

Implementation

static CodecParseResults parse(DC data, int offset,
    DistributedConnection? connection, List<int>? requestSequence,
    [TransmissionType? dataType = null]) {
  int len = 0;

  //print("Parse ${offset} ${dataType} ${requestSequence}");

  if (dataType == null) {
    var parsedDataTyped = TransmissionType.parse(data, offset, data.length);
    len = parsedDataTyped.size;
    dataType = parsedDataTyped.type;
    offset = dataType?.offset ?? 0;

    //print("Parse TT ${len} ${parsedDataTyped.type} ${dataType?.offset}");
  } else
    len = dataType.contentLength;

  if (dataType != null) {
    if (dataType.classType == TransmissionTypeClass.Fixed) {
      return CodecParseResults(
          len,
          fixedParsers[dataType.exponent][dataType.index](
              data,
              dataType.offset,
              dataType.contentLength,
              connection,
              requestSequence));
    } else if (dataType.classType == TransmissionTypeClass.Dynamic) {
      return CodecParseResults(
          len,
          dynamicParsers[dataType.index](data, dataType.offset,
              dataType.contentLength, connection, requestSequence));
    } else //if (tt.Class == TransmissionTypeClass.Typed)
    {
      return CodecParseResults(
          len,
          typedParsers[dataType.index](data, dataType.offset,
              dataType.contentLength, connection, requestSequence));
    }
  }

  throw Exception("Can't parse transmission type.");
}