integrateShot method
Implementation
@override
BcHitResult integrateShot(BcShot shot, BcTrajectoryRequest request) => using((
arena,
) {
final p = arena<BCLIBCFFI_Shot>();
final req = arena<BCLIBCFFI_TrajectoryRequest>();
final pPtr = arena<ffi.Pointer<BCLIBCFFI_TrajectoryData>>();
final pCount = arena<ffi.Int32>();
final pReason = arena<ffi.Int32>();
final err = arena<BCLIBCFFI_Error>();
shot._fill(p.ref, arena);
req.ref.range_limit_ft = request.rangeLimitFt;
req.ref.range_step_ft = request.rangeStepFt;
req.ref.time_step = request.timeStep;
req.ref.filter_flags = request.filterFlags;
final st = _b.BCLIBCFFI_integrate_shot(p, req, pPtr, pCount, pReason, err);
if (st != 0) _throwFromError(err.ref);
final count = pCount.value;
final rawPtr = pPtr.value;
try {
final records = List<BcTrajectoryData>.generate(
count,
(i) => _trajDataFromNative(rawPtr[i]),
);
return BcHitResult(records, BcTerminationReason.fromValue(pReason.value));
} finally {
if (count > 0) _b.BCLIBCFFI_free_trajectory(rawPtr);
}
});