add method

void add(
  1. Object? id,
  2. Vector v
)

Add v under key id. Encodes on-the-fly into the running code buffer.

Implementation

void add(Object? id, Vector v) {
  if (!_pq.trained) {
    throw StateError('PqIndex.add: call train() first');
  }
  if (v.dim != dim) {
    throw StateError('PqIndex.add: vector dim ${v.dim} != index dim $dim');
  }
  final n = _ids.length;
  final need = (n + 1) * m;
  if (_codes.length < need) {
    var cap = _codes.isEmpty ? 16 * m : _codes.length;
    while (cap < need) {
      cap *= 2;
    }
    final grown = Uint8List(cap);
    grown.setRange(0, n * m, _codes);
    _codes = grown;
  }
  _pq.encodeOne(v.values, _codes, n * m);
  _ids.add(id);
}