copyFrom method

void copyFrom(
  1. BufferLine src,
  2. int srcCol,
  3. int dstCol,
  4. int len,
)

Copies len cells from src starting at srcCol to dstCol at this line.

Implementation

void copyFrom(BufferLine src, int srcCol, int dstCol, int len) {
  final requiredLength = dstCol + len;
  if (requiredLength > _length) {
    resize(requiredLength);
  }
  final copiedCombiningCharacters = <int, String>{};
  final copiedUnderlineColors = <int, int>{};
  for (final entry in src._combiningCharacters.entries) {
    if (entry.key < srcCol || entry.key >= srcCol + len) continue;
    copiedCombiningCharacters[dstCol + entry.key - srcCol] = entry.value;
  }
  for (final entry in src._underlineColors.entries) {
    if (entry.key < srcCol || entry.key >= srcCol + len) continue;
    copiedUnderlineColors[dstCol + entry.key - srcCol] = entry.value;
  }

  // data.setRange(
  //   dstCol * _cellSize,
  //   (dstCol + len) * _cellSize,
  //   Uint32List.sublistView(src.data, srcCol * _cellSize, len * _cellSize),
  // );

  var srcOffset = srcCol * _cellSize;
  var dstOffset = dstCol * _cellSize;

  for (var i = 0; i < len * _cellSize; i++) {
    _data[dstOffset++] = src._data[srcOffset++];
  }

  _combiningCharacters.removeWhere(
    (index, _) => index >= dstCol && index < dstCol + len,
  );
  _combiningCharacters.addAll(copiedCombiningCharacters);
  _underlineColors.removeWhere(
    (index, _) => index >= dstCol && index < dstCol + len,
  );
  _underlineColors.addAll(copiedUnderlineColors);
}