/* CalcBrakingCurves_Pkg::internalOperators::CalculateEBDFootForMRSPorLOA */
L_internal_real_Type_SDM_Types_Pkg CalculateEBDFootForMRSPorLOA_CalcBrakingCurves_Pkg_internalOperators(
  /* CalcBrakingCurves_Pkg::internalOperators::CalculateEBDFootForMRSPorLOA::IsMRSPorLOATarget */ kcg_bool IsMRSPorLOATarget,
  /* CalcBrakingCurves_Pkg::internalOperators::CalculateEBDFootForMRSPorLOA::target */ Target_real_T_TargetManagement_types *target,
  /* CalcBrakingCurves_Pkg::internalOperators::CalculateEBDFootForMRSPorLOA::aSafe */ ASafe_T_CalcBrakingCurves_types *aSafe)
{
  BCAccumulator_type_CalcBrakingCurves_Pkg tmp1;
  kcg_int i;
  ParabolaCurve_T_CalcBrakingCurves_types tmp;
  /* CalcBrakingCurves_Pkg::internalOperators::CalculateEBDFootForMRSPorLOA::_L5 */ BCAccumulator_type_CalcBrakingCurves_Pkg _L5;
  /* CalcBrakingCurves_Pkg::internalOperators::CalculateEBDFootForMRSPorLOA::_L10 */ kcg_bool _L10;
  /* CalcBrakingCurves_Pkg::internalOperators::CalculateEBDFootForMRSPorLOA::Output1 */ L_internal_real_Type_SDM_Types_Pkg Output1;
  
  /* InitilizeAccForEBDFootCalc */
  InitilizeAccForEBDFootCalc_CalcBrakingCurves_Pkg_internalOperators(
    target,
    aSafe,
    &_L5);
  if (IsMRSPorLOATarget) {
    for (i = 0; i < 24; i++) {
      kcg_copy_BCAccumulator_type_CalcBrakingCurves_Pkg(&tmp1, &_L5);
      /* 1 */
      BCFoldOperatorForward_CalcBrakingCurves_Pkg_internalOperators(
        i,
        &tmp1,
        aSafe,
        (*target).speed,
        &_L10,
        &_L5);
      if (!_L10) {
        break;
      }
    }
  }
  /* 1 */
  SortByDistances_CalcBrakingCurves_Pkg_internalOperators(&_L5.BC, &tmp);
  /* 1 */
  getLocationOnCurve_CalcBrakingCurves_types(
    &tmp,
    (*target).speed,
    &_L10,
    &Output1);
  return Output1;
}
/* CalcBrakingCurves_Pkg::CalculateBrakingCurve */
void CalculateBrakingCurve_CalcBrakingCurves_Pkg(
  /* CalcBrakingCurves_Pkg::CalculateBrakingCurve::Asafe */ ASafe_T_CalcBrakingCurves_types *Asafe,
  /* CalcBrakingCurves_Pkg::CalculateBrakingCurve::Target */ Target_real_T_TargetManagement_types *Target,
  /* CalcBrakingCurves_Pkg::CalculateBrakingCurve::d_est_front */ L_internal_real_Type_SDM_Types_Pkg d_est_front,
  /* CalcBrakingCurves_Pkg::CalculateBrakingCurve::cond */ kcg_bool *cond,
  /* CalcBrakingCurves_Pkg::CalculateBrakingCurve::BC */ ParabolaCurve_T_CalcBrakingCurves_types *BC)
{
  /* CalcBrakingCurves_Pkg::CalculateBrakingCurve */
  static BCAccumulator_type_CalcBrakingCurves_Pkg acc;
  /* CalcBrakingCurves_Pkg::CalculateBrakingCurve */
  static kcg_bool cond_iterw;
  static kcg_int i;
  /* CalcBrakingCurves_Pkg::CalculateBrakingCurve::_L19 */
  static BCAccumulator_type_CalcBrakingCurves_Pkg _L19;
  
  *cond = invalid_TargetManagement_types != (*Target).targetType;
  if (*cond) {
    /* InitalValues */
    InitalValues_CalcBrakingCurves_Pkg_internalOperators(Target, Asafe, &_L19);
    for (i = 0; i < 113; i++) {
      kcg_copy_BCAccumulator_type_CalcBrakingCurves_Pkg(&acc, &_L19);
      /* 1 */
      BCFoldOperatorBackward_CalcBrakingCurves_Pkg_internalOperators(
        i,
        &acc,
        Asafe,
        d_est_front,
        &cond_iterw,
        &_L19);
      if (!cond_iterw) {
        break;
      }
    }
  }
  else {
    /* emptyBCAcc */ emptyBCAcc_CalcBrakingCurves_Pkg(&_L19);
  }
  /* SortByDistances */
  SortByDistances_CalcBrakingCurves_Pkg_internalOperators(&_L19.BC, BC);
}