setBufListSize method

void setBufListSize(
  1. int value
)

Implementation

void setBufListSize(int value) {
  var v = value;
  if (v == 0) v = -1;
  if (v == _bufferCount) return;
  if (v > _bufferCount) {
    // ReAllocMem(FBuffers,(Value+1)*SizeOf) + FillChar(#0)
    while (_buffers.length < v + 1) {
      _buffers.add(null);
    }
    _bufferCount++; // Cause FBuffers[FBufferCount] is already allocated
    try {
      for (var i = _bufferCount; i <= v; i++) {
        _buffers[i] = allocRecordBuffer();
      }
    } catch (_) {
      var i = _bufferCount;
      while (i < v + 1) {
        final b = _buffers[i];
        if (b != null) freeRecordBuffer(b);
        _buffers[i] = null;
        i++;
      }
      rethrow;
    }
  } else {
    if (v > -1 && _activeRecord > v - 1) {
      for (var i = 0; i <= _activeRecord - v; i++) {
        shiftBuffersBackward();
      }
      _activeRecord = v - 1;
    }

    for (var i = v + 1; i <= _bufferCount && i < _buffers.length; i++) {
      final b = _buffers[i];
      if (b != null) freeRecordBuffer(b);
    }
    // FBuffer must stay allocated, to make sure that Activebuffer
    // returns nil (original comment kept as-is)
    if (v == -1) {
      _buffers
        ..clear()
        ..add(null);
    } else {
      while (_buffers.length > v + 1) {
        _buffers.removeLast();
      }
    }
  }
  _bufferCount = v;
  if (v == -1) v = 0;
  if (_recordCount > v) _recordCount = v;
}