splitInputOrigins method

List<Map<int, int>> splitInputOrigins(
  1. Map<int, int> origins,
  2. int commandsLength
)

Implementation

List<Map<int, int>> splitInputOrigins(
    Map<int, int> origins, int commandsLength) {
  if (origins.isEmpty) {
    return [origins];
  }
  var maxWriteBatchSize = MongoModernMessage.maxWriteBatchSize;
  if (commandsLength <= maxWriteBatchSize) {
    return [origins];
  }
  var ret = <Map<int, int>>[];
  var offset = 0;
  var elementLimit = maxWriteBatchSize - 1;
  var rest = commandsLength;
  Map<int, int> splittedElement;
  var highestKey = 0;
  var highestOperation = 0;
  while (rest > 0) {
    splittedElement = <int, int>{if (offset > 0) 0: highestOperation};
    for (var key in origins.keys) {
      if (key >= offset && key <= elementLimit) {
        if (key > highestKey) {
          highestKey = key;
          highestOperation = origins[key]!;
        }
        splittedElement[key - offset] = origins[key]!;
      }
    }
    offset = elementLimit + 1;
    elementLimit = min(commandsLength, elementLimit + maxWriteBatchSize);
    rest -= maxWriteBatchSize;
    ret.add(splittedElement);
  }

  return ret;
}