parse static method

TransmissionTypeParseResults parse(
  1. DC data,
  2. int offset,
  3. int ends
)

Implementation

static TransmissionTypeParseResults parse(DC data, int offset, int ends) {
  var h = data[offset++];

  var cls = h >> 6;

  if (cls == TransmissionTypeClass.Fixed) {
    var exp = (h & 0x38) >> 3;

    if (exp == 0)
      return TransmissionTypeParseResults(
          1, TransmissionType(h, cls, h & 0x7, 0, exp));

    int cl = (1 << (exp - 1));

    if (ends - offset < cl)
      return TransmissionTypeParseResults(cl - (ends - offset), null);

    return TransmissionTypeParseResults(
        1 + cl, new TransmissionType(h, cls, h & 0x7, offset, cl, exp));
  } else {
    int cll = (h >> 3) & 0x7;

    if (ends - offset < cll)
      return TransmissionTypeParseResults(cll - (ends - offset), null);

    int cl = 0;

    for (var i = 0; i < cll; i++) cl = cl << 8 | data[offset++];

    if (ends - offset < cl)
      return TransmissionTypeParseResults(cl - (ends - offset), null);

    return TransmissionTypeParseResults(
        1 + cl + cll, TransmissionType((h & 0xC7), cls, h & 0x7, offset, cl));
  }
}