/* TM_TrainToTrack::C_P003_train_compr */
void C_P003_train_compr_TM_TrainToTrack(
  inC_C_P003_train_compr_TM_TrainToTrack *inC,
  outC_C_P003_train_compr_TM_TrainToTrack *outC)
{
  kcg_int tmp;
  /* TM_TrainToTrack::C_P003_train_compr::_L87 */ array_int_165 _L87;
  
  outC->meta.start_addr = 0;
  outC->meta.end_addr = DIM_max_elements_P003_TM_TrainToTrack - 1;
  for (tmp = 0; tmp < 165; tmp++) {
    _L87[tmp] = 0;
  }
  tmp = /* 1 */ CAST_NID_PACKET_to_int_TM_conversions(inC->P001_in.nid_packet);
  (&(&outC->P000_int[0])[0])[0] = tmp;
  (&(&outC->P000_int[0])[0])[1] = /* 1 */
    CAST_L_PACKET_to_int_TM_conversions(inC->P001_in.l_packet);
  (&(&outC->P000_int[0])[0])[2] = /* 1 */
    CAST_N_ITER_to_int_TM_conversions(inC->P001_in.n_iter);
  /* 1 */
  C_P003_flatten_sections_TM_TrainToTrack_lib_internal(
    &inC->P001_in.nid_radio,
    (P003_nid_radio_list_int_t_TM_TrainToTrack *) &(&outC->P000_int[0])[3]);
  kcg_copy_array_int_165(&outC->P000_int[35], &_L87);
  tmp = /* 1 */ EncodeMeta_TM_TrainToTrack(inC->P001_in.nid_packet, 0);
  outC->meta.meta_id = tmp;
}
/* TM_TrainToTrack::C_P011_train_compr */
void C_P011_train_compr_TM_TrainToTrack(
  /* TM_TrainToTrack::C_P011_train_compr::P011_in */ P011_TM_TrainToTrack *P011_in,
  /* TM_TrainToTrack::C_P011_train_compr::P011_int */ P011_TrainTrack_int_TM_TrainToTrack *P011_int)
{
  /* TM_TrainToTrack::C_P011_train_compr */
  static array_int_9 tmp;
  
  (&(&(*P011_int)[0])[0])[0] = /* 1 */
    CAST_NID_PACKET_to_int_TM_conversions((*P011_in).nid_packet);
  (&(&(*P011_int)[0])[0])[1] = /* 1 */
    CAST_L_PACKET_to_int_TM_conversions((*P011_in).l_packet);
  (&(&(*P011_int)[0])[0])[2] = /* 1 */
    CAST_NC_CDTRAIN_to_int_TM_conversions((*P011_in).nc_cdtrain);
  (&(&(*P011_int)[0])[0])[3] = /* 1 */
    CAST_NC_TRAIN_to_int_TM_conversions((*P011_in).nc_train);
  (&(&(*P011_int)[0])[0])[4] = /* 1 */
    CAST_L_TRAIN_to_int_TM_conversions((*P011_in).l_train);
  (&(&(*P011_int)[0])[0])[5] = /* 1 */
    CAST_V_MAXTRAIN_to_int_TM_conversions((*P011_in).v_maxtrain);
  (&(&(*P011_int)[0])[0])[6] = /* 1 */
    CAST_M_LOADINGGAUGE_to_int_TM_conversions((*P011_in).m_loadinggauge);
  (&(&(*P011_int)[0])[0])[7] = /* 1 */
    CAST_M_AXLELOADCAT_to_int_TM_conversions((*P011_in).m_axleloadcat);
  (&(&(*P011_int)[0])[0])[8] = /* 1 */
    CAST_M_AIRTIGHT_to_int_TM_conversions((*P011_in).m_airtight);
  (&(&(*P011_int)[0])[0])[9] = /* 1 */
    CAST_N_AXLE_to_int_TM_conversions((*P011_in).n_axle);
  (&(&(*P011_int)[0])[0])[10] = /* 1 */
    CAST_N_ITER_to_int_TM_conversions((*P011_in).n_iter_voltage);
  /* 1 */
  C_P011_flatten_sections_voltage_TM_TrainToTrack_lib_internal(
    &(*P011_in).voltage_list,
    (P011_voltage_sections_array_flat_t_TM_TrainToTrack *) &tmp[0]);
  (&tmp[8])[0] = /* 2 */
    CAST_N_ITER_to_int_TM_conversions((*P011_in).n_iter_nid_ntc);
  kcg_copy_array_int_9(&(*P011_int)[11], &tmp);
  /* 1 */
  C_P011_flatten_sections_ntc_TM_TrainToTrack_lib_internal(
    &(*P011_in).nid_ntc_list,
    (P011_ntc_list_array_T_TM_TrainToTrack *) &(*P011_int)[20]);
}
/* TM_TrainToTrack::C_P003_train_compr */
void C_P003_train_compr_TM_TrainToTrack(
  /* TM_TrainToTrack::C_P003_train_compr::P003_in */P003_TM_TrainToTrack *P003_in,
  /* TM_TrainToTrack::C_P003_train_compr::P003_int */P003_TrainTrack_int_TM_TrainToTrack *P003_int)
{
  (&(*P003_int)[0])[0] = /* 1 */
    Encode_NID_PACKET_TM_TrainToTrack(
      (*P003_in).valid,
      /* 1 */ CAST_NID_PACKET_to_int_TM_conversions((*P003_in).nid_packet));
  (&(*P003_int)[0])[1] = /* 1 */
    CAST_L_PACKET_to_int_TM_conversions((*P003_in).l_packet);
  (&(*P003_int)[0])[2] = /* 1 */
    CAST_N_ITER_to_int_TM_conversions((*P003_in).n_iter);
  /* 1 */
  C_P003_flatten_sections_TM_TrainToTrack_lib_internal(
    &(*P003_in).nid_radio,
    (P003_nid_radio_list_int_t_TM_TrainToTrack *) &(*P003_int)[3]);
}
/* TM_TrainToTrack::C_compr_P003 */
void C_compr_P003_TM_TrainToTrack(
    /* TM_TrainToTrack::C_compr_P003::P003_int */P003_TrainTrack_int_TM_TrainToTrack *P003_int,
    outC_C_compr_P003_TM_TrainToTrack *outC)
{
    /* TM_TrainToTrack::C_compr_P003::_L94 */ array_int_3 _L94;
    /* TM_TrainToTrack::C_compr_P003::_L105 */ kcg_bool _L105;

    kcg_copy_array_int_3(&_L94, (array_int_3 *) &(*P003_int)[0]);
    _L105 = /* 1 */ Decode_NID_PACKET_TM_TrainToTrack(_L94[0], 3);
    outC->P003_out.valid = _L105;
    if (_L105) {
        /* 1 */
        C_P003_flatten_sections_TM_TrainToTrack_lib_internal(
            (P003_nid_radio_list_t_TM_TrainToTrack *) &(*P003_int)[3],
            &outC->_L89);
    }
    else if (outC->init) {
        kcg_copy_P003_nid_radio_list_int_t_TM_TrainToTrack(
            &outC->_L89,
            (P003_nid_radio_list_int_t_TM_TrainToTrack *)
            &DEFAULT_P003_nid_radio_list_TM_TrainToTrack);
    }
    outC->init = kcg_false;
    kcg_copy_P003_nid_radio_list_t_TM_TrainToTrack(
        &outC->P003_out.nid_radio,
        &outC->_L89);
    outC->P003_out.nid_packet = /* 1 */
        CAST_NID_PACKET_to_int_TM_conversions(
            /* 1 */ Filter_Variable_TM_TrainToTrack(_L105, _L94[0]));
    outC->P003_out.l_packet = /* 1 */
        CAST_L_PACKET_to_int_TM_conversions(
            /* 2 */ Filter_Variable_TM_TrainToTrack(_L105, _L94[1]));
    outC->P003_out.n_iter = /* 1 */
        CAST_N_ITER_to_int_TM_conversions(
            /* 3 */ Filter_Variable_TM_TrainToTrack(_L105, _L94[2]));
}