composeRecordArray<T extends IRecord> static method

DC composeRecordArray<T extends IRecord>(
  1. List<T>? records,
  2. DistributedConnection connection, [
  3. bool prependLength = false
])

Implementation

static DC composeRecordArray<T extends IRecord>(
    List<T>? records, DistributedConnection connection,
    [bool prependLength = false]) {
  if (records == null) // || records.length == 0)
    return prependLength ? new DC(4) : new DC(0);

  var rt = new BinaryList();
  var comparsion = records.length == 0
      ? RecordComparisonResult.Empty
      : compareRecords(null, records[0]);

  //var type = records.getType().GetElementType();
  var isTyped = T == IRecord; // != typeof(IRecord);

  if (isTyped) {
    var template = Warehouse.getTemplateByType(T);

    //if (template != null) {
    // typed array ... no need to add class id , it will be included at the first entry
    rt.addUint8(0x10 | comparsion);
    rt.addGuid(template.classId);
    //} else // something wrong
    //{
    //  throw new Exception("Template for type `${T}` not found.");
    //}

    if (comparsion == RecordComparisonResult.Record)
      rt.addDC(composeRecord(records[0], connection, false, true));

    for (var i = 1; i < records.length; i++) {
      comparsion = compareRecords(records[i - 1], records[i]);

      rt.addUint8(comparsion);

      if (comparsion == RecordComparisonResult.RecordSameType ||
          comparsion == RecordComparisonResult.Record)
        rt.addDC(composeRecord(records[i], connection, false, true));
    }
  } else {
    rt.addUint8(comparsion);

    if (comparsion == RecordComparisonResult.Record)
      rt.addDC(composeRecord(records[0], connection, true, true));

    for (var i = 1; i < records.length; i++) {
      comparsion = compareRecords(records[i - 1], records[i]);

      rt.addUint8(comparsion);

      if (comparsion == RecordComparisonResult.Record)
        rt.addDC(composeRecord(records[i], connection, true, true));
      else if (comparsion == RecordComparisonResult.RecordSameType)
        rt.addDC(composeRecord(records[i], connection, false, true));
    }
  }

  if (prependLength) rt.insertInt32(0, rt.length);

  return rt.toDC();

  // if (records == null || records?.length == 0)
  //   return prependLength ? new DC(4) : new DC(0);

  // var rt = new BinaryList();
  // var comparsion = compareRecords(null, records[0]);

  // rt.addUint8(comparsion);

  // if (comparsion == RecordComparisonResult.Record)
  //   rt.addDC(composeRecord(records[0], connection, true, true));

  // for (var i = 1; i < records.length; i++) {
  //   comparsion = compareRecords(records[i - 1], records[i]);
  //   rt.addUint8(comparsion);

  //   if (comparsion == RecordComparisonResult.Record)
  //     rt.addDC(composeRecord(records[i], connection, true, true));
  //   else if (comparsion == RecordComparisonResult.RecordSameType)
  //     rt.addDC(composeRecord(records[i], connection, false, true));
  // }

  // if (prependLength) rt.insertInt32(0, rt.length);

  // return rt.toDC();
}