integrateShot method

  1. @override
BcHitResult integrateShot(
  1. BcShot shot,
  2. BcTrajectoryRequest request
)
override

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);
  }
});