differencesAsync method
Future<SetDiffs<E>>
differencesAsync(
- Set<E> other, {
- bool checkEquality = true,
- String? debugName,
- required DiffEquality equality,
- SetDiffAlgorithm? algorithm,
})
Implementation
Future<SetDiffs<E>> differencesAsync(Set<E> other,
{bool checkEquality = true,
String? debugName,
required DiffEquality equality,
SetDiffAlgorithm? algorithm}) async {
try {
algorithm ??= const DefaultSetDiffAlgorithm();
final arguments =
SetDiffArguments<E>.copied(this, other, checkEquality, equality);
final context =
SetDiffContext<E>(algorithm, arguments, debugName: debugName);
final name = "$currentIsolateName: setDiff[${debugName ?? "-"}]";
if (isMainIsolate && this is Iterable<DiffDelegate>) {
final delegateArgs = SetDiffArguments<DiffDelegate>.copied(
this.map((s) => (s as DiffDelegate).delegate),
other.map((s) => (s as DiffDelegate).delegate),
true,
DiffEquality.diffable());
final context = SetDiffContext<DiffDelegate>(algorithm, delegateArgs,
debugName: "$debugName (delegate)");
final diff = await _runAsync(executeSetDiff, context, name: name);
return diff.undelegate(arguments);
} else {
final diff = await _runAsync(executeSetDiff, context, name: name);
return diff.recast<E>(arguments);
}
} catch (e, stack) {
_log.severe("$debugName setDiff $e", e, stack);
rethrow;
}
}