resolveByPredicate method

Future<List<LSLStreamInfo>> resolveByPredicate({
  1. required String predicate,
  2. double waitTime = 5.0,
  3. int minStreamCount = 0,
})

Resolves streams by a predicate function. The predicate parameter is an XPath 1.0 predicate e.g. name='MyStream' and type='EEG' or starts-with(name, 'My'). The waitTime parameter determines how long to wait for streams to resolve, if the value is 0, the default of forever will be used, and will only return when the minStreamCount is met. The minStreamCount parameter is the minimum number of streams to resolve, it must be greater than 0.

Implementation

Future<List<LSLStreamInfo>> resolveByPredicate({
  required String predicate,
  double waitTime = 5.0,
  int minStreamCount = 0,
}) async {
  if (!created) {
    throw LSLException('Resolver not created');
  }

  final streamCount = lsl_resolve_bypred(
    _streamInfoBuffer!,
    maxStreams,
    predicate.toNativeUtf8(allocator: allocate).cast<Char>(),
    minStreamCount,
    waitTime,
  );
  if (streamCount < 0) {
    throw LSLException('Error resolving streams by predicate: $streamCount');
  }

  final streams = <LSLStreamInfo>[];
  for (var i = 0; i < streamCount; i++) {
    final streamInfo = LSLStreamInfo.fromStreamInfo(_streamInfoBuffer![i]);
    streams.add(streamInfo);
  }
  return streams;
}