/* TargetManagement_pkg::internalOperators::removeOverpassedMRSP */
void removeOverpassedMRSP_TargetManagement_pkg_internalOperators(
  /* TargetManagement_pkg::internalOperators::removeOverpassedMRSP::Targets */ Target_list_MRSP_real_T_TargetManagement_types *Targets,
  /* TargetManagement_pkg::internalOperators::removeOverpassedMRSP::d_max_safe_front */ L_internal_real_Type_SDM_Types_Pkg d_max_safe_front,
  /* TargetManagement_pkg::internalOperators::removeOverpassedMRSP::TargetsOut */ Target_list_MRSP_real_T_TargetManagement_types *TargetsOut,
  /* TargetManagement_pkg::internalOperators::removeOverpassedMRSP::updated */ kcg_bool *updated)
{
  Target_list_MRSP_real_T_TargetManagement_types tmp1;
  kcg_bool tmp;
  kcg_int i;
  /* TargetManagement_pkg::internalOperators::removeOverpassedMRSP::_L6 */ kcg_int _L6;
  
  kcg_copy_Target_list_MRSP_real_T_TargetManagement_types(TargetsOut, Targets);
  if (((*Targets)[0].distance <= d_max_safe_front) & (*Targets)[0].valid) {
    for (i = 0; i < 200; i++) {
      kcg_copy_Target_list_MRSP_real_T_TargetManagement_types(
        &tmp1,
        TargetsOut);
      /* 1 */
      removeOverpassedMRSPint_TargetManagement_pkg_internalOperators(
        &tmp1,
        d_max_safe_front,
        &tmp,
        TargetsOut);
      _L6 = i + 1;
      if (!tmp) {
        break;
      }
    }
  }
  else {
    _L6 = 0;
  }
  *updated = _L6 > 1;
}
/* TargetManagement_pkg::internalOperators::extractTargetsFromMRSP */
void extractTargetsFromMRSP_TargetManagement_pkg_internalOperators(
  /* TargetManagement_pkg::internalOperators::extractTargetsFromMRSP::MRSP */ MRSP_internal_T_TargetManagement_types *MRSP,
  /* TargetManagement_pkg::internalOperators::extractTargetsFromMRSP::TargetsOfMRSP */ extractTargetsMRSPACC_TargetManagement_pkg *TargetsOfMRSP)
{
  kcg_int i;
  extractTargetsMRSPACC_TargetManagement_pkg tmp1;
  kcg_bool tmp;
  /* TargetManagement_pkg::internalOperators::extractTargetsFromMRSP::_L24 */ Target_list_MRSP_real_T_TargetManagement_types _L24;
  
  (*TargetsOfMRSP).lastInsertedTargetIndex = - 1;
  for (i = 0; i < 200; i++) {
    kcg_copy_Target_real_T_TargetManagement_types(
      &_L24[i],
      (Target_real_T_TargetManagement_types *)
        &emptyTargetMRSP_TargetManagement_pkg);
  }
  kcg_copy_Target_list_MRSP_real_T_TargetManagement_types(
    &(*TargetsOfMRSP).targetList,
    &_L24);
  if ((*MRSP)[0].valid) {
    for (i = 0; i < 200; i++) {
      kcg_copy_extractTargetsMRSPACC_TargetManagement_pkg(&tmp1, TargetsOfMRSP);
      /* 1 */
      extractTargetsFromMRSPInt_TargetManagement_pkg_internalOperators(
        i,
        &tmp1,
        MRSP,
        &tmp,
        TargetsOfMRSP);
      if (!tmp) {
        break;
      }
    }
  }
}
/* TargetManagement_pkg::internalOperators::extractTargetsFromMRSPInt */
void extractTargetsFromMRSPInt_TargetManagement_pkg_internalOperators(
  /* TargetManagement_pkg::internalOperators::extractTargetsFromMRSPInt::index */kcg_int index,
  /* TargetManagement_pkg::internalOperators::extractTargetsFromMRSPInt::ACCU */extractTargetsMRSPACC_TargetManagement_pkg *ACCU,
  /* TargetManagement_pkg::internalOperators::extractTargetsFromMRSPInt::MRSP */MRSP_internal_T_TargetManagement_types *MRSP,
  /* TargetManagement_pkg::internalOperators::extractTargetsFromMRSPInt::endCondition */kcg_bool *endCondition,
  /* TargetManagement_pkg::internalOperators::extractTargetsFromMRSPInt::ACCUout */extractTargetsMRSPACC_TargetManagement_pkg *ACCUout)
{
  /* TargetManagement_pkg::internalOperators::extractTargetsFromMRSPInt::_L14 */
  static MRSP_internal_section_T_TargetManagement_types _L14;
  /* TargetManagement_pkg::internalOperators::extractTargetsFromMRSPInt::_L15 */
  static MRSP_internal_section_T_TargetManagement_types _L15;
  /* TargetManagement_pkg::internalOperators::extractTargetsFromMRSPInt::_L34 */
  static kcg_int _L34;
  
  if ((0 <= index + 1) & (index + 1 < 110)) {
    kcg_copy_MRSP_internal_section_T_TargetManagement_types(
      &_L15,
      &(*MRSP)[index + 1]);
  }
  else {
    kcg_copy_MRSP_internal_section_T_TargetManagement_types(
      &_L15,
      (MRSP_internal_section_T_TargetManagement_types *)
        &emptyMRSPSection_TargetManagement_pkg);
  }
  *endCondition = _L15.valid;
  _L34 = 1 + (*ACCU).lastInsertedTargetIndex;
  if ((0 <= index) & (index < 110)) {
    kcg_copy_MRSP_internal_section_T_TargetManagement_types(
      &_L14,
      &(*MRSP)[index]);
  }
  else {
    kcg_copy_MRSP_internal_section_T_TargetManagement_types(
      &_L14,
      (MRSP_internal_section_T_TargetManagement_types *)
        &emptyMRSPSection_TargetManagement_pkg);
  }
  if ((_L14.MRS > _L15.MRS) & _L14.valid & *endCondition) {
    (*ACCUout).lastInsertedTargetIndex = _L34;
    kcg_copy_Target_list_MRSP_real_T_TargetManagement_types(
      &(*ACCUout).targetList,
      &(*ACCU).targetList);
    if ((0 <= _L34) & (_L34 < 110)) {
      (*ACCUout).targetList[_L34].targetType = MRSP_TargetManagement_types;
      (*ACCUout).targetList[_L34].distance = _L15.Loc_Abs;
      (*ACCUout).targetList[_L34].speed = _L15.MRS;
    }
  }
  else {
    kcg_copy_extractTargetsMRSPACC_TargetManagement_pkg(ACCUout, ACCU);
  }
}
/* TargetManagement_pkg::internalOperators::removeOverpassedMRSP */
void removeOverpassedMRSP_TargetManagement_pkg_internalOperators(
  /* TargetManagement_pkg::internalOperators::removeOverpassedMRSP::Targets */ Target_list_MRSP_real_T_TargetManagement_types *Targets,
  /* TargetManagement_pkg::internalOperators::removeOverpassedMRSP::d_max_safe_front */ L_internal_real_Type_SDM_Types_Pkg d_max_safe_front,
  /* TargetManagement_pkg::internalOperators::removeOverpassedMRSP::TargetsOut */ Target_list_MRSP_real_T_TargetManagement_types *TargetsOut,
  /* TargetManagement_pkg::internalOperators::removeOverpassedMRSP::updated */ kcg_bool *updated)
{
  /* TargetManagement_pkg::internalOperators::removeOverpassedMRSP */
  static Target_list_MRSP_real_T_TargetManagement_types acc;
  /* TargetManagement_pkg::internalOperators::removeOverpassedMRSP */
  static kcg_bool cond_iterw;
  static kcg_int i;
  /* TargetManagement_pkg::internalOperators::removeOverpassedMRSP::_L6 */
  static kcg_int _L6;
  
  kcg_copy_Target_list_MRSP_real_T_TargetManagement_types(TargetsOut, Targets);
  if (((*Targets)[0].targetType == MRSP_TargetManagement_types) &
    ((*Targets)[0].distance <= d_max_safe_front)) {
    for (i = 0; i < 200; i++) {
      kcg_copy_Target_list_MRSP_real_T_TargetManagement_types(&acc, TargetsOut);
      /* 1 */
      removeOverpassedMRSPint_TargetManagement_pkg_internalOperators(
        &acc,
        d_max_safe_front,
        &cond_iterw,
        TargetsOut);
      _L6 = i + 1;
      if (!cond_iterw) {
        break;
      }
    }
  }
  else {
    _L6 = 0;
  }
  *updated = _L6 > 1;
}
/* TargetManagement_pkg::internalOperators::removeOverpassedMRSPint */
void removeOverpassedMRSPint_TargetManagement_pkg_internalOperators(
  /* TargetManagement_pkg::internalOperators::removeOverpassedMRSPint::Targets */ Target_list_MRSP_real_T_TargetManagement_types *Targets,
  /* TargetManagement_pkg::internalOperators::removeOverpassedMRSPint::d_safe_max_front */ L_internal_real_Type_SDM_Types_Pkg d_safe_max_front,
  /* TargetManagement_pkg::internalOperators::removeOverpassedMRSPint::Cond */ kcg_bool *Cond,
  /* TargetManagement_pkg::internalOperators::removeOverpassedMRSPint::TargetsReduced */ Target_list_MRSP_real_T_TargetManagement_types *TargetsReduced)
{
  *Cond = (MRSP_TargetManagement_types == (*Targets)[0].targetType) &
    ((*Targets)[0].distance <= d_safe_max_front);
  /* 1 */ if (*Cond) {
    kcg_copy_array_97070(&(*TargetsReduced)[0], (array_97070 *) &(*Targets)[1]);
    kcg_copy_Target_real_T_TargetManagement_types(
      &(&(*TargetsReduced)[199])[0],
      (Target_real_T_TargetManagement_types *)
        &emptyTarget_TargetManagement_pkg);
  }
  else {
    kcg_copy_Target_list_MRSP_real_T_TargetManagement_types(
      TargetsReduced,
      Targets);
  }
}
/* TargetManagement_pkg::TargetManagement */
void TargetManagement_TargetManagement_pkg(
  /* TargetManagement_pkg::TargetManagement::MRSP */ MRSP_internal_T_TargetManagement_types *MRSP,
  /* TargetManagement_pkg::TargetManagement::MRSP_updated */ kcg_bool MRSP_updated,
  /* TargetManagement_pkg::TargetManagement::MA */ MA_section_real_T_TargetManagement_types *MA,
  /* TargetManagement_pkg::TargetManagement::MA_updated */ kcg_bool MA_updated,
  /* TargetManagement_pkg::TargetManagement::trainLocations */ TrainLocations_real_T_SDM_Types_Pkg *trainLocations,
  outC_TargetManagement_TargetManagement_pkg *outC)
{
  /* TargetManagement_pkg::TargetManagement */ Target_list_MRSP_real_T_TargetManagement_types tmp1;
  /* TargetManagement_pkg::TargetManagement */ extractTargetsMRSPACC_TargetManagement_pkg tmp;
  /* TargetManagement_pkg::TargetManagement::_L88 */ kcg_bool _L88;
  kcg_int i;
  
  /* ck_MA_updated */ if (MA_updated) {
    /* 1 */
    calcMATargets_TargetManagement_pkg_internalOperators(
      MA,
      &outC->_L12,
      &outC->_L93);
  }
  else if (outC->init) {
    kcg_copy_Target_real_T_TargetManagement_types(
      &outC->_L93,
      (Target_real_T_TargetManagement_types *)
        &emptyTarget_TargetManagement_pkg);
    kcg_copy_Target_real_T_TargetManagement_types(
      &outC->_L12,
      (Target_real_T_TargetManagement_types *)
        &emptyTarget_TargetManagement_pkg);
  }
  kcg_copy_Target_real_T_TargetManagement_types(
    &outC->targetCollection.EOA_target,
    &outC->_L12);
  kcg_copy_Target_real_T_TargetManagement_types(
    &outC->targetCollection.SvL_LoA_target,
    &outC->_L93);
  /* ck_MRSP_updated */ if (MRSP_updated) {
    /* 1 */
    extractTargetsFromMRSP_TargetManagement_pkg_internalOperators(MRSP, &tmp);
    kcg_copy_Target_list_MRSP_real_T_TargetManagement_types(
      &tmp1,
      &tmp.targetList);
  }
  else /* last_init_ck_MRSPTargetList */ if (outC->init) {
    for (i = 0; i < 110; i++) {
      kcg_copy_Target_real_T_TargetManagement_types(
        &tmp1[i],
        (Target_real_T_TargetManagement_types *)
          &emptyTarget_TargetManagement_pkg);
    }
  }
  else {
    kcg_copy_Target_list_MRSP_real_T_TargetManagement_types(
      &tmp1,
      &outC->rem_MRSPTargetList);
  }
  outC->init = kcg_false;
  /* 1 */
  removeOverpassedMRSP_TargetManagement_pkg_internalOperators(
    &tmp1,
    (*trainLocations).d_maxSafeFrontEndPos,
    &outC->rem_MRSPTargetList,
    &_L88);
  outC->targetCollection.updatedTargetList = MRSP_updated | MA_updated | _L88;
  kcg_copy_Target_list_MRSP_real_T_TargetManagement_types(
    &outC->targetCollection.MRSP_targetList,
    &outC->rem_MRSPTargetList);
}
/* TargetManagement_pkg::TargetManagement */
void TargetManagement_TargetManagement_pkg(
  /* TargetManagement_pkg::TargetManagement::MRSP */MRSP_internal_T_TargetManagement_types *MRSP,
  /* TargetManagement_pkg::TargetManagement::MRSP_updated */kcg_bool MRSP_updated,
  /* TargetManagement_pkg::TargetManagement::MA */MA_section_real_T_TargetManagement_types *MA,
  /* TargetManagement_pkg::TargetManagement::MA_updated */kcg_bool MA_updated,
  /* TargetManagement_pkg::TargetManagement::trainLocations */TrainLocations_real_T_SDM_Types_Pkg *trainLocations,
  outC_TargetManagement_TargetManagement_pkg *outC)
{
  static struct__130782 tmp;
  static kcg_int i;
  static Target_list_MRSP_real_T_TargetManagement_types tmp3;
  static extractTargetsMRSPACC_TargetManagement_pkg tmp2;
  static array__130570 tmp1;
  static array__130570 tmp4;
  /* TargetManagement_pkg::TargetManagement::_L88 */
  static kcg_bool _L88;
  
  if (MA_updated) {
    /* 1 */
    calcMATargets_TargetManagement_pkg_internalOperators(
      MA,
      &outC->_L12,
      &outC->_L93);
  }
  else if (outC->init) {
    kcg_copy_Target_real_T_TargetManagement_types(
      &outC->_L93,
      (Target_real_T_TargetManagement_types *)
        &emptyTarget_TargetManagement_pkg);
    kcg_copy_Target_real_T_TargetManagement_types(
      &outC->_L12,
      (Target_real_T_TargetManagement_types *)
        &emptyTarget_TargetManagement_pkg);
  }
  kcg_copy_Target_real_T_TargetManagement_types(
    &outC->targetCollection.SvL_LoA_target,
    &outC->_L93);
  for (i = 0; i < 110; i++) {
    kcg_copy_Target_real_T_TargetManagement_types(
      &tmp4[i],
      (Target_real_T_TargetManagement_types *)
        &emptyTarget_TargetManagement_pkg);
  }
  if (MRSP_updated) {
    /* 1 */
    extractTargetsFromMRSP_TargetManagement_pkg_internalOperators(MRSP, &tmp2);
    kcg_copy_Target_list_MRSP_real_T_TargetManagement_types(
      &tmp3,
      &tmp2.targetList);
  }
  else {
    if (outC->init) {
      kcg_copy_array__130570(&tmp1, &tmp4);
    }
    else {
      kcg_copy_Target_list_MRSP_real_T_TargetManagement_types(
        &tmp1,
        &outC->rem_MRSPTargetList);
    }
    kcg_copy_array__130570(&tmp.targetList, &tmp1);
    tmp.lastInsertedTargetIndex = - 1;
    kcg_copy_Target_list_MRSP_real_T_TargetManagement_types(
      &tmp3,
      &tmp.targetList);
  }
  /* 1 */
  removeOverpassedMRSP_TargetManagement_pkg_internalOperators(
    &tmp3,
    (*trainLocations).d_maxSafeFrontEndPos,
    &outC->rem_MRSPTargetList,
    &_L88);
  outC->targetCollection.updatedTargetList = MRSP_updated | MA_updated | _L88;
  kcg_copy_Target_list_MRSP_real_T_TargetManagement_types(
    &outC->targetCollection.MRSP_targetList,
    &outC->rem_MRSPTargetList);
  outC->init = kcg_false;
  kcg_copy_Target_real_T_TargetManagement_types(
    &outC->targetCollection.EOA_target,
    &outC->_L12);
}
/* TargetManagement_pkg::TargetManagement */
void TargetManagement_TargetManagement_pkg(
  /* TargetManagement_pkg::TargetManagement::MRSP */ MRSP_internal_T_TargetManagement_types *MRSP,
  /* TargetManagement_pkg::TargetManagement::MRSP_updated */ kcg_bool MRSP_updated,
  /* TargetManagement_pkg::TargetManagement::MA */ MAs_real_T_TargetManagement_types *MA,
  /* TargetManagement_pkg::TargetManagement::MA_updated */ kcg_bool MA_updated,
  /* TargetManagement_pkg::TargetManagement::trainLocations */ TrainLocations_real_T_SDM_Types_Pkg *trainLocations,
  outC_TargetManagement_TargetManagement_pkg *outC)
{
  kcg_int i;
  Target_list_LOA_real_T_TargetManagement_types tmp6;
  extractTargetsLOAACC_TargetManagement_pkg tmp5;
  Target_list_LOA_real_T_TargetManagement_types tmp4;
  Target_list_MRSP_real_T_TargetManagement_types tmp3;
  extractTargetsMRSPACC_TargetManagement_pkg tmp2;
  Target_list_MRSP_real_T_TargetManagement_types tmp1;
  kcg_real tmp;
  /* TargetManagement_pkg::TargetManagement::_L88 */ kcg_bool _L88;
  /* TargetManagement_pkg::TargetManagement::_L92 */ kcg_bool _L92;
  
  if (MA_updated) {
    /* 1 */
    extractLOATargetsFromMA_TargetManagement_pkg_internalOperators(MA, &tmp5);
    kcg_copy_Target_list_LOA_real_T_TargetManagement_types(
      &tmp6,
      &tmp5.targetList);
    /* 1 */
    extractEOASvLTargetFromMA_TargetManagement_pkg_internalOperators(
      MA,
      &outC->_L12,
      &outC->_L93,
      &outC->V_releaseFromMA,
      &outC->V_releaseFromMAValid);
  }
  else {
    if (outC->init) {
      for (i = 0; i < 10; i++) {
        kcg_copy_Target_real_T_TargetManagement_types(
          &tmp4[i],
          (Target_real_T_TargetManagement_types *)
            &emptyTargetLOA_TargetManagement_pkg);
      }
      kcg_copy_Target_real_T_TargetManagement_types(
        &outC->_L12,
        (Target_real_T_TargetManagement_types *)
          &emptyTargetEOA_TargetManagement_pkg);
      kcg_copy_Target_real_T_TargetManagement_types(
        &outC->_L93,
        (Target_real_T_TargetManagement_types *)
          &emptyTargetSvL_TargetManagement_pkg);
      tmp = 0.0;
      outC->V_releaseFromMAValid = kcg_false;
    }
    else {
      kcg_copy_Target_list_LOA_real_T_TargetManagement_types(
        &tmp4,
        &outC->rem_LOATargetList);
      tmp = outC->V_releaseFromMA;
    }
    kcg_copy_Target_list_LOA_real_T_TargetManagement_types(&tmp6, &tmp4);
    outC->V_releaseFromMA = tmp;
  }
  /* 1 */
  removeOverpassedLOA_TargetManagement_pkg_internalOperators(
    &tmp6,
    (*trainLocations).d_maxSafeFrontEndPos,
    &outC->rem_LOATargetList,
    &_L92);
  kcg_copy_Target_list_LOA_real_T_TargetManagement_types(
    &outC->targetCollection.LOA_targetList,
    &outC->rem_LOATargetList);
  if (MRSP_updated) {
    /* 1 */
    extractTargetsFromMRSP_TargetManagement_pkg_internalOperators(MRSP, &tmp2);
    kcg_copy_Target_list_MRSP_real_T_TargetManagement_types(
      &tmp3,
      &tmp2.targetList);
  }
  else {
    if (outC->init) {
      for (i = 0; i < 200; i++) {
        kcg_copy_Target_real_T_TargetManagement_types(
          &tmp1[i],
          (Target_real_T_TargetManagement_types *)
            &emptyTargetMRSP_TargetManagement_pkg);
      }
    }
    else {
      kcg_copy_Target_list_MRSP_real_T_TargetManagement_types(
        &tmp1,
        &outC->rem_MRSPTargetList);
    }
    kcg_copy_Target_list_MRSP_real_T_TargetManagement_types(&tmp3, &tmp1);
  }
  /* 1 */
  removeOverpassedMRSP_TargetManagement_pkg_internalOperators(
    &tmp3,
    (*trainLocations).d_maxSafeFrontEndPos,
    &outC->rem_MRSPTargetList,
    &_L88);
  outC->targetCollection.updatedTargetList = _L92 | MRSP_updated | MA_updated |
    _L88;
  kcg_copy_Target_list_MRSP_real_T_TargetManagement_types(
    &outC->targetCollection.MRSP_targetList,
    &outC->rem_MRSPTargetList);
  kcg_copy_Target_real_T_TargetManagement_types(
    &outC->targetCollection.EOA_target,
    &outC->_L12);
  kcg_copy_Target_real_T_TargetManagement_types(
    &outC->targetCollection.SvL_target,
    &outC->_L93);
  outC->init = kcg_false;
}