/* TM_TrainToTrack_lib_internal::C_P011_us_array_ntc */
NID_NTC C_P011_us_array_ntc_TM_TrainToTrack_lib_internal(
    /* TM_TrainToTrack_lib_internal::C_P011_us_array_ntc::flat */kcg_int flat)
{
    /* TM_TrainToTrack_lib_internal::C_P011_us_array_ntc::sections */ NID_NTC sections;

    sections = /* 1 */ CAST_Int_to_NID_NTC_TM_conversions(flat);
    return sections;
}
/* TM_lib_internal::C_P041_us_array */
void C_P041_us_array_TM_lib_internal(
  /* TM_lib_internal::C_P041_us_array::i */kcg_int i,
  /* TM_lib_internal::C_P041_us_array::n_iter_int */kcg_int n_iter_int,
  /* TM_lib_internal::C_P041_us_array::flat */P041_sections_array_flat_T_TM *flat,
  outC_C_P041_us_array_TM_lib_internal *outC)
{
  outC->_L3 = n_iter_int;
  outC->_L5 = i;
  outC->_L33 = outC->_L3 > outC->_L5;
  outC->_L32 = kcg_true;
  outC->_L18 = DIM_P041_n_sections_TM_lib_internal;
  outC->_L16 = outC->_L5 * outC->_L18;
  kcg_copy_P041_sections_array_flat_T_TM(&outC->_L1, flat);
  /* 2 */
  C_P041_extract_el_section_TM_lib_internal(
    outC->_L16,
    &outC->_L1,
    1,
    &outC->Context_2);
  outC->_L19 = outC->Context_2.element;
  /* 1 */ CAST_Int_to_NID_NTC_TM_conversions(outC->_L19, &outC->Context_1);
  outC->_L28 = outC->Context_1.nid_ntc;
  /* 1 */
  C_P041_extract_el_section_TM_lib_internal(
    outC->_L16,
    &outC->_L1,
    2,
    &outC->_1_Context_1);
  outC->_L20 = outC->_1_Context_1.element;
  /* 1 */
  CAST_Int_to_L_ACKLEVELTR_TM_conversions(outC->_L20, &outC->_2_Context_1);
  outC->_L26 = outC->_2_Context_1.l_ackleveltr;
  /* 3 */
  C_P041_extract_el_section_TM_lib_internal(
    outC->_L16,
    &outC->_L1,
    0,
    &outC->Context_3);
  outC->_L15 = outC->Context_3.element;
  /* 1 */ CAST_Int_to_M_LEVELTR_TM_conversions(outC->_L15, &outC->_3_Context_1);
  outC->_L25 = outC->_3_Context_1.m_leveltr;
  outC->cont = outC->_L33;
  outC->_L4.valid = outC->_L32;
  outC->_L4.m_leveltr = outC->_L25;
  outC->_L4.nid_ntc = outC->_L28;
  outC->_L4.l_ackleveltr = outC->_L26;
  kcg_copy_P041_section_enum_T_TM(&outC->sections, &outC->_L4);
}
/* TM_lib_internal::C_P046_us_array */
void C_P046_us_array_TM_lib_internal(
  /* TM_lib_internal::C_P046_us_array::i */ kcg_int i,
  /* TM_lib_internal::C_P046_us_array::n_iter_int */ kcg_int n_iter_int,
  /* TM_lib_internal::C_P046_us_array::flat */ P046_sections_array_flat_T_TM *flat,
  /* TM_lib_internal::C_P046_us_array::cont */ kcg_bool *cont,
  /* TM_lib_internal::C_P046_us_array::sections */ P046_section_enum_T_TM *sections)
{
  /* TM_lib_internal::C_P046_us_array::_L16 */ kcg_int _L16;
  
  (*sections).valid = kcg_true;
  _L16 = i * DIM_P046_n_sections_TM_lib_internal;
  (*sections).m_leveltr = /* 1 */
    CAST_Int_to_M_LEVELTR_TM_conversions(
      /* 1 */ C_P046_extract_el_section_TM_lib_internal(_L16, flat, 0));
  (*sections).nid_ntc = /* 1 */
    CAST_Int_to_NID_NTC_TM_conversions(
      /* 2 */ C_P046_extract_el_section_TM_lib_internal(_L16, flat, 1));
  *cont = n_iter_int > i;
}
/* TM_TrainToTrack::C_compr_P001 */
void C_compr_P001_TM_TrainToTrack(
  /* TM_TrainToTrack::C_compr_P001::P001_in */P001_TrainTrack_int_TM_TrainToTrack *P001_in,
  /* TM_TrainToTrack::C_compr_P001::P001_out */P001_TM_TrainToTrack *P001_out)
{
  kcg_int tmp;
  /* TM_conversions::CAST_Int_to_Q_SCALE::IfBlock1::else */ kcg_bool _1_else_clock_1_IfBlock1;
  /* TM_conversions::CAST_Int_to_Q_SCALE::IfBlock1::else::else */ kcg_bool else_clock_1_IfBlock1;
  /* TM_conversions::CAST_Int_to_Q_SCALE::IfBlock1 */ kcg_bool IfBlock1_clock_1;
  /* TM_TrainToTrack::C_compr_P001::_L88 */ kcg_bool _L88;
  
  _L88 = /* 1 */ Decode_NID_PACKET_TM_TrainToTrack((*P001_in)[0], 1);
  (*P001_out).valid = _L88;
  tmp = /* 3 */ Filter_Variable_TM_TrainToTrack(_L88, (*P001_in)[2]);
  IfBlock1_clock_1 = tmp == INT_Q_SCALE_10cm_TM_conversions;
  (*P001_out).nid_packet = /* 1 */
    Filter_Variable_TM_TrainToTrack(_L88, (*P001_in)[0]);
  (*P001_out).l_packet = /* 2 */
    Filter_Variable_TM_TrainToTrack(_L88, (*P001_in)[1]);
  if (IfBlock1_clock_1) {
    (*P001_out).q_scale = ENUM_Q_SCALE_10cm_TM_conversions;
  }
  else {
    _1_else_clock_1_IfBlock1 = tmp == INT_Q_SCALE_1m_TM_conversions;
    if (_1_else_clock_1_IfBlock1) {
      (*P001_out).q_scale = ENUM_Q_SCALE_1m_TM_conversions;
    }
    else {
      else_clock_1_IfBlock1 = tmp == INT_Q_SCALE_10m_TM_conversions;
      if (else_clock_1_IfBlock1) {
        (*P001_out).q_scale = ENUM_Q_SCALE_10m_TM_conversions;
      }
      else {
        (*P001_out).q_scale = ENUM_Q_SCALE_10cm_TM_conversions;
      }
    }
  }
  (*P001_out).nid_lrbg = /* 1 */
    CAST_Int_to_NID_LRBG_TM_conversions(
      /* 4 */ Filter_Variable_TM_TrainToTrack(_L88, (*P001_in)[3]));
  (*P001_out).nid_prvlrbg = /* 1 */
    CAST_Int_to_NID_PRVLRBG_TM_conversions(
      /* 17 */ Filter_Variable_TM_TrainToTrack(_L88, (*P001_in)[4]));
  (*P001_out).d_lrbg = /* 1 */
    CAST_Int_to_D_LRBG_TM_conversions(
      /* 16 */ Filter_Variable_TM_TrainToTrack(_L88, (*P001_in)[5]));
  (*P001_out).q_dirlrbg = /* 1 */
    CAST_Int_to_Q_DIRLRBG_TM_conversions(
      /* 6 */ Filter_Variable_TM_TrainToTrack(_L88, (*P001_in)[6]));
  (*P001_out).q_dlrbg = /* 1 */
    CAST_Int_to_Q_DRLRBG_TM_conversions(
      /* 5 */ Filter_Variable_TM_TrainToTrack(_L88, (*P001_in)[7]));
  (*P001_out).l_doubtover = /* 1 */
    CAST_Int_to_L_DOUBTOVER_TM_conversions(
      /* 7 */ Filter_Variable_TM_TrainToTrack(_L88, (*P001_in)[8]));
  (*P001_out).l_doubtunder = /* 1 */
    CAST_Int_to_L_DOUBTUNDER_TM_conversions(
      /* 8 */ Filter_Variable_TM_TrainToTrack(_L88, (*P001_in)[9]));
  (*P001_out).q_length = /* 1 */
    CAST_Int_to_Q_LENGTH_TM_conversions(
      /* 9 */ Filter_Variable_TM_TrainToTrack(_L88, (*P001_in)[10]));
  (*P001_out).l_trainint = /* 1 */
    CAST_Int_to_L_TRAININT_TM_conversions(
      /* 10 */ Filter_Variable_TM_TrainToTrack(_L88, (*P001_in)[11]));
  (*P001_out).v_train = /* 1 */
    CAST_Int_to_V_TRAIN_TM_conversions(
      /* 11 */ Filter_Variable_TM_TrainToTrack(_L88, (*P001_in)[12]));
  (*P001_out).q_dirtrain = /* 1 */
    CAST_Int_to_Q_DIRTRAIN_TM_conversions(
      /* 12 */ Filter_Variable_TM_TrainToTrack(_L88, (*P001_in)[13]));
  (*P001_out).m_mode = /* 1 */
    CAST_Int_to_M_MODE_TM_conversions(
      /* 14 */ Filter_Variable_TM_TrainToTrack(_L88, (*P001_in)[14]));
  (*P001_out).m_level = /* 1 */
    CAST_Int_to_M_LEVEL_TM_conversions(
      /* 13 */ Filter_Variable_TM_TrainToTrack(_L88, (*P001_in)[15]));
  (*P001_out).nid_ntc = /* 1 */
    CAST_Int_to_NID_NTC_TM_conversions(
      /* 15 */ Filter_Variable_TM_TrainToTrack(_L88, (*P001_in)[16]));
}