// This C++ source file was generated by the TTCN-3 compiler
// of the TTCN-3 Test Executor version 11.1.0
// The generation of user and time information were disabled by the -D flag.

// Copyright (c) 2000-2025 Ericsson Telecom AB

// Do not edit this file unless you know what you are doing.

/* Including header files */

#include "MobileL3_RRM_Types.hh"

namespace MobileL3__RRM__Types {

/* Literal string constants */

const unsigned char bs_7_bits[] = { 0 },
bs_52_bits[] = { 144 },
bs_45_bits[] = { 80 },
bs_44_bits[] = { 176 },
bs_29_bits[] = { 112 },
bs_21_bits[] = { 240 },
bs_49_bits[] = { 8 },
bs_30_bits[] = { 136 },
bs_24_bits[] = { 72 },
bs_51_bits[] = { 200 },
bs_50_bits[] = { 40 },
bs_26_bits[] = { 104 },
bs_25_bits[] = { 232 },
bs_8_bits[] = { 4 },
bs_46_bits[] = { 132 },
bs_12_bits[] = { 68 },
bs_47_bits[] = { 68 },
bs_48_bits[] = { 36 },
bs_23_bits[] = { 100 },
bs_22_bits[] = { 228 },
bs_20_bits[] = { 20 },
bs_17_bits[] = { 148 },
bs_53_bits[] = { 84 },
bs_42_bits[] = { 212 },
bs_19_bits[] = { 52 },
bs_43_bits[] = { 180 },
bs_5_bits[] = { 116 },
bs_41_bits[] = { 116 },
bs_18_bits[] = { 244 },
bs_40_bits[] = { 12 },
bs_15_bits[] = { 140 },
bs_14_bits[] = { 76 },
bs_16_bits[] = { 204 },
bs_27_bits[] = { 44 },
bs_39_bits[] = { 172 },
bs_28_bits[] = { 108 },
bs_31_bits[] = { 28 },
bs_37_bits[] = { 220 },
bs_32_bits[] = { 18 },
bs_56_bits[] = { 146 },
bs_33_bits[] = { 82 },
bs_54_bits[] = { 50 },
bs_55_bits[] = { 178 },
bs_57_bits[] = { 114 },
bs_9_bits[] = { 6 },
bs_34_bits[] = { 6 },
bs_35_bits[] = { 70 },
bs_58_bits[] = { 198 },
bs_59_bits[] = { 38 },
bs_36_bits[] = { 166 },
bs_60_bits[] = { 102 },
bs_38_bits[] = { 150 },
bs_0_bits[] = { 1 },
bs_2_bits[] = { 1 },
bs_1_bits[] = { 9 },
bs_10_bits[] = { 5 },
bs_4_bits[] = { 5 },
bs_13_bits[] = { 13 },
bs_3_bits[] = { 3 },
bs_6_bits[] = { 11 },
bs_11_bits[] = { 7 };
extern const BITSTRING bs_7(3, bs_7_bits),
bs_52(8, bs_52_bits),
bs_45(8, bs_45_bits),
bs_44(8, bs_44_bits),
bs_29(8, bs_29_bits),
bs_21(8, bs_21_bits),
bs_49(8, bs_49_bits),
bs_30(8, bs_30_bits),
bs_24(8, bs_24_bits),
bs_51(8, bs_51_bits),
bs_50(8, bs_50_bits),
bs_26(8, bs_26_bits),
bs_25(8, bs_25_bits),
bs_8(3, bs_8_bits),
bs_46(8, bs_46_bits),
bs_12(7, bs_12_bits),
bs_47(8, bs_47_bits),
bs_48(8, bs_48_bits),
bs_23(8, bs_23_bits),
bs_22(8, bs_22_bits),
bs_20(8, bs_20_bits),
bs_17(8, bs_17_bits),
bs_53(8, bs_53_bits),
bs_42(8, bs_42_bits),
bs_19(8, bs_19_bits),
bs_43(8, bs_43_bits),
bs_5(7, bs_5_bits),
bs_41(8, bs_41_bits),
bs_18(8, bs_18_bits),
bs_40(8, bs_40_bits),
bs_15(8, bs_15_bits),
bs_14(8, bs_14_bits),
bs_16(8, bs_16_bits),
bs_27(8, bs_27_bits),
bs_39(8, bs_39_bits),
bs_28(8, bs_28_bits),
bs_31(8, bs_31_bits),
bs_37(8, bs_37_bits),
bs_32(8, bs_32_bits),
bs_56(8, bs_56_bits),
bs_33(8, bs_33_bits),
bs_54(8, bs_54_bits),
bs_55(8, bs_55_bits),
bs_57(8, bs_57_bits),
bs_9(3, bs_9_bits),
bs_34(8, bs_34_bits),
bs_35(8, bs_35_bits),
bs_58(8, bs_58_bits),
bs_59(8, bs_59_bits),
bs_36(8, bs_36_bits),
bs_60(8, bs_60_bits),
bs_38(8, bs_38_bits),
bs_0(1, bs_0_bits),
bs_2(4, bs_2_bits),
bs_1(4, bs_1_bits),
bs_10(3, bs_10_bits),
bs_4(4, bs_4_bits),
bs_13(4, bs_13_bits),
bs_3(4, bs_3_bits),
bs_6(4, bs_6_bits),
bs_11(3, bs_11_bits);
const unsigned char os_21_octets[] = { 1 },
os_36_octets[] = { 2 },
os_22_octets[] = { 3 },
os_23_octets[] = { 4 },
os_3_octets[] = { 5 },
os_5_octets[] = { 16 },
os_7_octets[] = { 17 },
os_35_octets[] = { 18 },
os_8_octets[] = { 19 },
os_9_octets[] = { 20 },
os_10_octets[] = { 21 },
os_11_octets[] = { 22 },
os_12_octets[] = { 23 },
os_13_octets[] = { 24 },
os_16_octets[] = { 25 },
os_17_octets[] = { 28 },
os_18_octets[] = { 29 },
os_19_octets[] = { 30 },
os_34_octets[] = { 32 },
os_20_octets[] = { 33 },
os_41_octets[] = { 49 },
os_42_octets[] = { 50 },
os_43_octets[] = { 51 },
os_39_octets[] = { 81 },
os_4_octets[] = { 98 },
os_6_octets[] = { 99 },
os_14_octets[] = { 100 },
os_15_octets[] = { 102 },
os_40_octets[] = { 103 },
os_37_octets[] = { 105 },
os_2_octets[] = { 109 },
os_24_octets[] = { 110 },
os_0_octets[] = { 114 },
os_25_octets[] = { 115 },
os_26_octets[] = { 116 },
os_27_octets[] = { 117 },
os_28_octets[] = { 118 },
os_29_octets[] = { 119 },
os_30_octets[] = { 120 },
os_31_octets[] = { 121 },
os_32_octets[] = { 122 },
os_33_octets[] = { 123 },
os_1_octets[] = { 124 },
os_38_octets[] = { 125 };
extern const OCTETSTRING os_21(1, os_21_octets),
os_36(1, os_36_octets),
os_22(1, os_22_octets),
os_23(1, os_23_octets),
os_3(1, os_3_octets),
os_5(1, os_5_octets),
os_7(1, os_7_octets),
os_35(1, os_35_octets),
os_8(1, os_8_octets),
os_9(1, os_9_octets),
os_10(1, os_10_octets),
os_11(1, os_11_octets),
os_12(1, os_12_octets),
os_13(1, os_13_octets),
os_16(1, os_16_octets),
os_17(1, os_17_octets),
os_18(1, os_18_octets),
os_19(1, os_19_octets),
os_34(1, os_34_octets),
os_20(1, os_20_octets),
os_41(1, os_41_octets),
os_42(1, os_42_octets),
os_43(1, os_43_octets),
os_39(1, os_39_octets),
os_4(1, os_4_octets),
os_6(1, os_6_octets),
os_14(1, os_14_octets),
os_15(1, os_15_octets),
os_40(1, os_40_octets),
os_37(1, os_37_octets),
os_2(1, os_2_octets),
os_24(1, os_24_octets),
os_0(1, os_0_octets),
os_25(1, os_25_octets),
os_26(1, os_26_octets),
os_27(1, os_27_octets),
os_28(1, os_28_octets),
os_29(1, os_29_octets),
os_30(1, os_30_octets),
os_31(1, os_31_octets),
os_32(1, os_32_octets),
os_33(1, os_33_octets),
os_1(1, os_1_octets),
os_38(1, os_38_octets);
const unsigned char module_checksum[] = { 0xa7, 0x88, 0xa6, 0x46, 0xc7, 0x93, 0x5b, 0xdb, 0x9d, 0x2f, 0x74, 0xbb, 0x8c, 0x6c, 0x71, 0xe9 };

/* Global variable definitions */

const XERdescriptor_t       BARange__TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int BARange__TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int BARange__TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t BARange__TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, BARange__TLV_elementIdentifier_oer_ext_arr_, 0, BARange__TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t BARange__TLV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.BARange_TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &BARange__TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &BARange__TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING BARange__TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t BARange__TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       BARange__TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t BARange__TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t BARange__TLV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.BARange_TLV.lengthIndicator", &INTEGER_ber_, &BARange__TLV_lengthIndicator_raw_, &INTEGER_text_, &BARange__TLV_lengthIndicator_xer_, &INTEGER_json_, &BARange__TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING BARange__TLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       BARange__TLV_numberOfRanges_xer_ = { {"numberOfRanges>\n", "numberOfRanges>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int BARange__TLV_numberOfRanges_oer_ext_arr_[0] = {};
const int BARange__TLV_numberOfRanges_oer_p_[0] = {};
const TTCN_OERdescriptor_t BARange__TLV_numberOfRanges_oer_ = { -1, TRUE, 1, FALSE, 0, 0, BARange__TLV_numberOfRanges_oer_ext_arr_, 0, BARange__TLV_numberOfRanges_oer_p_};
const TTCN_Typedescriptor_t BARange__TLV_numberOfRanges_descr_ = { "@MobileL3_RRM_Types.BARange_TLV.numberOfRanges", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &BARange__TLV_numberOfRanges_xer_, &OCTETSTRING_json_, &BARange__TLV_numberOfRanges_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING BARange__TLV_numberOfRanges_default_coding("RAW");
const XERdescriptor_t       BARange__TLV_ranges_xer_ = { {"ranges>\n", "ranges>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int BARange__TLV_ranges_oer_ext_arr_[0] = {};
const int BARange__TLV_ranges_oer_p_[0] = {};
const TTCN_OERdescriptor_t BARange__TLV_ranges_oer_ = { -1, TRUE, -1, FALSE, 0, 0, BARange__TLV_ranges_oer_ext_arr_, 0, BARange__TLV_ranges_oer_p_};
const TTCN_Typedescriptor_t BARange__TLV_ranges_descr_ = { "@MobileL3_RRM_Types.BARange_TLV.ranges", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &BARange__TLV_ranges_xer_, &OCTETSTRING_json_, &BARange__TLV_ranges_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING BARange__TLV_ranges_default_coding("RAW");
const TTCN_RAWdescriptor_t BARange__TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for BARange__TLV
const TTCN_Typedescriptor_t BARange__TLV_descr_ = { "@MobileL3_RRM_Types.BARange_TLV", NULL, &BARange__TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING BARange__TLV_default_coding("RAW");
const XERdescriptor_t       CellChannelDescription__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int CellChannelDescription__TV_elementIdentifier_oer_ext_arr_[0] = {};
const int CellChannelDescription__TV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t CellChannelDescription__TV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, CellChannelDescription__TV_elementIdentifier_oer_ext_arr_, 0, CellChannelDescription__TV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t CellChannelDescription__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.CellChannelDescription_TV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &CellChannelDescription__TV_elementIdentifier_xer_, &OCTETSTRING_json_, &CellChannelDescription__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CellChannelDescription__TV_elementIdentifier_default_coding("RAW");
const XERdescriptor_t       CellChannelDescription__TV_octet2__17_xer_ = { {"octet2_17>\n", "octet2_17>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int CellChannelDescription__TV_octet2__17_oer_ext_arr_[0] = {};
const int CellChannelDescription__TV_octet2__17_oer_p_[0] = {};
const TTCN_OERdescriptor_t CellChannelDescription__TV_octet2__17_oer_ = { -1, TRUE, 16, FALSE, 0, 0, CellChannelDescription__TV_octet2__17_oer_ext_arr_, 0, CellChannelDescription__TV_octet2__17_oer_p_};
const TTCN_Typedescriptor_t CellChannelDescription__TV_octet2__17_descr_ = { "@MobileL3_RRM_Types.CellChannelDescription_TV.octet2_17", &OCTETSTRING_ber_, &General__Types::OCT16_raw_, &OCTETSTRING_text_, &CellChannelDescription__TV_octet2__17_xer_, &OCTETSTRING_json_, &CellChannelDescription__TV_octet2__17_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CellChannelDescription__TV_octet2__17_default_coding("RAW");
const TTCN_RAWdescriptor_t CellChannelDescription__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for CellChannelDescription__TV
const TTCN_Typedescriptor_t CellChannelDescription__TV_descr_ = { "@MobileL3_RRM_Types.CellChannelDescription_TV", NULL, &CellChannelDescription__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CellChannelDescription__TV_default_coding("RAW");
const XERdescriptor_t       BAListPref__TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int BAListPref__TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int BAListPref__TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t BAListPref__TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, BAListPref__TLV_elementIdentifier_oer_ext_arr_, 0, BAListPref__TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t BAListPref__TLV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.BAListPref_TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &BAListPref__TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &BAListPref__TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING BAListPref__TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t BAListPref__TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       BAListPref__TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t BAListPref__TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t BAListPref__TLV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.BAListPref_TLV.lengthIndicator", &INTEGER_ber_, &BAListPref__TLV_lengthIndicator_raw_, &INTEGER_text_, &BAListPref__TLV_lengthIndicator_xer_, &INTEGER_json_, &BAListPref__TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING BAListPref__TLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       BAListPref__TLV_range__bafreq__info_xer_ = { {"range_bafreq_info>\n", "range_bafreq_info>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int BAListPref__TLV_range__bafreq__info_oer_ext_arr_[0] = {};
const int BAListPref__TLV_range__bafreq__info_oer_p_[0] = {};
const TTCN_OERdescriptor_t BAListPref__TLV_range__bafreq__info_oer_ = { -1, TRUE, -1, FALSE, 0, 0, BAListPref__TLV_range__bafreq__info_oer_ext_arr_, 0, BAListPref__TLV_range__bafreq__info_oer_p_};
const TTCN_Typedescriptor_t BAListPref__TLV_range__bafreq__info_descr_ = { "@MobileL3_RRM_Types.BAListPref_TLV.range_bafreq_info", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &BAListPref__TLV_range__bafreq__info_xer_, &OCTETSTRING_json_, &BAListPref__TLV_range__bafreq__info_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING BAListPref__TLV_range__bafreq__info_default_coding("RAW");
const TTCN_RAWdescriptor_t BAListPref__TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for BAListPref__TLV
const TTCN_Typedescriptor_t BAListPref__TLV_descr_ = { "@MobileL3_RRM_Types.BAListPref_TLV", NULL, &BAListPref__TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING BAListPref__TLV_default_coding("RAW");
const XERdescriptor_t       UTRANFrequencyList__TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int UTRANFrequencyList__TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int UTRANFrequencyList__TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t UTRANFrequencyList__TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, UTRANFrequencyList__TLV_elementIdentifier_oer_ext_arr_, 0, UTRANFrequencyList__TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t UTRANFrequencyList__TLV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.UTRANFrequencyList_TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &UTRANFrequencyList__TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &UTRANFrequencyList__TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UTRANFrequencyList__TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t UTRANFrequencyList__TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       UTRANFrequencyList__TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UTRANFrequencyList__TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UTRANFrequencyList__TLV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.UTRANFrequencyList_TLV.lengthIndicator", &INTEGER_ber_, &UTRANFrequencyList__TLV_lengthIndicator_raw_, &INTEGER_text_, &UTRANFrequencyList__TLV_lengthIndicator_xer_, &INTEGER_json_, &UTRANFrequencyList__TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UTRANFrequencyList__TLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       UTRANFrequencyList__TLV_fdd__tdd_xer_ = { {"fdd_tdd>\n", "fdd_tdd>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int UTRANFrequencyList__TLV_fdd__tdd_oer_ext_arr_[0] = {};
const int UTRANFrequencyList__TLV_fdd__tdd_oer_p_[0] = {};
const TTCN_OERdescriptor_t UTRANFrequencyList__TLV_fdd__tdd_oer_ = { -1, TRUE, -1, FALSE, 0, 0, UTRANFrequencyList__TLV_fdd__tdd_oer_ext_arr_, 0, UTRANFrequencyList__TLV_fdd__tdd_oer_p_};
const TTCN_Typedescriptor_t UTRANFrequencyList__TLV_fdd__tdd_descr_ = { "@MobileL3_RRM_Types.UTRANFrequencyList_TLV.fdd_tdd", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &UTRANFrequencyList__TLV_fdd__tdd_xer_, &OCTETSTRING_json_, &UTRANFrequencyList__TLV_fdd__tdd_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UTRANFrequencyList__TLV_fdd__tdd_default_coding("RAW");
const TTCN_RAWdescriptor_t UTRANFrequencyList__TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for UTRANFrequencyList__TLV
const TTCN_Typedescriptor_t UTRANFrequencyList__TLV_descr_ = { "@MobileL3_RRM_Types.UTRANFrequencyList_TLV", NULL, &UTRANFrequencyList__TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UTRANFrequencyList__TLV_default_coding("RAW");
const XERdescriptor_t       CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_elementIdentifier_oer_ext_arr_[0] = {};
const int CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_elementIdentifier_oer_ext_arr_, 0, CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_elementIdentifier_xer_, &OCTETSTRING_json_, &CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE.lengthIndicator", &INTEGER_ber_, &CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_lengthIndicator_raw_, &INTEGER_text_, &CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_lengthIndicator_xer_, &INTEGER_json_, &CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_cellSelectionIndicatorValue_xer_ = { {"cellSelectionIndicatorValue>\n", "cellSelectionIndicatorValue>\n"}, {29, 29}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_cellSelectionIndicatorValue_oer_ext_arr_[0] = {};
const int CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_cellSelectionIndicatorValue_oer_p_[0] = {};
const TTCN_OERdescriptor_t CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_cellSelectionIndicatorValue_oer_ = { -1, TRUE, -1, FALSE, 0, 0, CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_cellSelectionIndicatorValue_oer_ext_arr_, 0, CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_cellSelectionIndicatorValue_oer_p_};
const TTCN_Typedescriptor_t CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_cellSelectionIndicatorValue_descr_ = { "@MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE.cellSelectionIndicatorValue", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_cellSelectionIndicatorValue_xer_, &OCTETSTRING_json_, &CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_cellSelectionIndicatorValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_cellSelectionIndicatorValue_default_coding("RAW");
const TTCN_RAWdescriptor_t CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE
const TTCN_Typedescriptor_t CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_descr_ = { "@MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE", NULL, &CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_default_coding("RAW");
const XERdescriptor_t       CellDescription__V_bcc_xer_ = { {"bcc>\n", "bcc>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t CellDescription__V_bcc_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t CellDescription__V_bcc_descr_ = { "@MobileL3_RRM_Types.CellDescription_V.bcc", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &CellDescription__V_bcc_xer_, &BITSTRING_json_, &CellDescription__V_bcc_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CellDescription__V_bcc_default_coding("RAW");
const XERdescriptor_t       CellDescription__V_ncc_xer_ = { {"ncc>\n", "ncc>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t CellDescription__V_ncc_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t CellDescription__V_ncc_descr_ = { "@MobileL3_RRM_Types.CellDescription_V.ncc", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &CellDescription__V_ncc_xer_, &BITSTRING_json_, &CellDescription__V_ncc_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CellDescription__V_ncc_default_coding("RAW");
const XERdescriptor_t       CellDescription__V_BCCHArfcn__HighPart_xer_ = { {"BCCHArfcn_HighPart>\n", "BCCHArfcn_HighPart>\n"}, {20, 20}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t CellDescription__V_BCCHArfcn__HighPart_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t CellDescription__V_BCCHArfcn__HighPart_descr_ = { "@MobileL3_RRM_Types.CellDescription_V.BCCHArfcn_HighPart", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &CellDescription__V_BCCHArfcn__HighPart_xer_, &BITSTRING_json_, &CellDescription__V_BCCHArfcn__HighPart_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CellDescription__V_BCCHArfcn__HighPart_default_coding("RAW");
const XERdescriptor_t       CellDescription__V_BCCHArfcn__LowPart_xer_ = { {"BCCHArfcn_LowPart>\n", "BCCHArfcn_LowPart>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int CellDescription__V_BCCHArfcn__LowPart_oer_ext_arr_[0] = {};
const int CellDescription__V_BCCHArfcn__LowPart_oer_p_[0] = {};
const TTCN_OERdescriptor_t CellDescription__V_BCCHArfcn__LowPart_oer_ = { -1, TRUE, 1, FALSE, 0, 0, CellDescription__V_BCCHArfcn__LowPart_oer_ext_arr_, 0, CellDescription__V_BCCHArfcn__LowPart_oer_p_};
const TTCN_Typedescriptor_t CellDescription__V_BCCHArfcn__LowPart_descr_ = { "@MobileL3_RRM_Types.CellDescription_V.BCCHArfcn_LowPart", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &CellDescription__V_BCCHArfcn__LowPart_xer_, &OCTETSTRING_json_, &CellDescription__V_BCCHArfcn__LowPart_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CellDescription__V_BCCHArfcn__LowPart_default_coding("RAW");
const TTCN_RAWdescriptor_t CellDescription__V_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for CellDescription__V
const TTCN_Typedescriptor_t CellDescription__V_descr_ = { "@MobileL3_RRM_Types.CellDescription_V", NULL, &CellDescription__V_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CellDescription__V_default_coding("RAW");
const XERdescriptor_t       ChannelDescription__V_timeslotNumber_xer_ = { {"timeslotNumber>\n", "timeslotNumber>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ChannelDescription__V_timeslotNumber_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ChannelDescription__V_timeslotNumber_descr_ = { "@MobileL3_RRM_Types.ChannelDescription_V.timeslotNumber", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &ChannelDescription__V_timeslotNumber_xer_, &BITSTRING_json_, &ChannelDescription__V_timeslotNumber_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription__V_timeslotNumber_default_coding("RAW");
const XERdescriptor_t       ChannelDescription__V_channelTypeandTDMAOffset_xer_ = { {"channelTypeandTDMAOffset>\n", "channelTypeandTDMAOffset>\n"}, {26, 26}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ChannelDescription__V_channelTypeandTDMAOffset_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ChannelDescription__V_channelTypeandTDMAOffset_descr_ = { "@MobileL3_RRM_Types.ChannelDescription_V.channelTypeandTDMAOffset", &BITSTRING_ber_, &General__Types::BIT5_raw_, NULL, &ChannelDescription__V_channelTypeandTDMAOffset_xer_, &BITSTRING_json_, &ChannelDescription__V_channelTypeandTDMAOffset_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription__V_channelTypeandTDMAOffset_default_coding("RAW");
const XERdescriptor_t       ChannelDescription__V_octet3_xer_ = { {"octet3>\n", "octet3>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ChannelDescription__V_octet3_oer_ext_arr_[0] = {};
const int ChannelDescription__V_octet3_oer_p_[0] = {};
const TTCN_OERdescriptor_t ChannelDescription__V_octet3_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ChannelDescription__V_octet3_oer_ext_arr_, 0, ChannelDescription__V_octet3_oer_p_};
const TTCN_Typedescriptor_t ChannelDescription__V_octet3_descr_ = { "@MobileL3_RRM_Types.ChannelDescription_V.octet3", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ChannelDescription__V_octet3_xer_, &OCTETSTRING_json_, &ChannelDescription__V_octet3_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription__V_octet3_default_coding("RAW");
const XERdescriptor_t       ChannelDescription__V_octet4_xer_ = { {"octet4>\n", "octet4>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ChannelDescription__V_octet4_oer_ext_arr_[0] = {};
const int ChannelDescription__V_octet4_oer_p_[0] = {};
const TTCN_OERdescriptor_t ChannelDescription__V_octet4_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ChannelDescription__V_octet4_oer_ext_arr_, 0, ChannelDescription__V_octet4_oer_p_};
const TTCN_Typedescriptor_t ChannelDescription__V_octet4_descr_ = { "@MobileL3_RRM_Types.ChannelDescription_V.octet4", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ChannelDescription__V_octet4_xer_, &OCTETSTRING_json_, &ChannelDescription__V_octet4_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription__V_octet4_default_coding("RAW");
const TTCN_RAWdescriptor_t ChannelDescription__V_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ChannelDescription__V
const TTCN_Typedescriptor_t ChannelDescription__V_descr_ = { "@MobileL3_RRM_Types.ChannelDescription_V", NULL, &ChannelDescription__V_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription__V_default_coding("RAW");
const XERdescriptor_t       ChannelDescription__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ChannelDescription__TV_elementIdentifier_oer_ext_arr_[0] = {};
const int ChannelDescription__TV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t ChannelDescription__TV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ChannelDescription__TV_elementIdentifier_oer_ext_arr_, 0, ChannelDescription__TV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t ChannelDescription__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.ChannelDescription_TV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ChannelDescription__TV_elementIdentifier_xer_, &OCTETSTRING_json_, &ChannelDescription__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription__TV_elementIdentifier_default_coding("RAW");
const XERdescriptor_t       ChannelDescription__TV_timeslotNumber_xer_ = { {"timeslotNumber>\n", "timeslotNumber>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ChannelDescription__TV_timeslotNumber_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ChannelDescription__TV_timeslotNumber_descr_ = { "@MobileL3_RRM_Types.ChannelDescription_TV.timeslotNumber", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &ChannelDescription__TV_timeslotNumber_xer_, &BITSTRING_json_, &ChannelDescription__TV_timeslotNumber_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription__TV_timeslotNumber_default_coding("RAW");
const XERdescriptor_t       ChannelDescription__TV_channelTypeandTDMAOffset_xer_ = { {"channelTypeandTDMAOffset>\n", "channelTypeandTDMAOffset>\n"}, {26, 26}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ChannelDescription__TV_channelTypeandTDMAOffset_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ChannelDescription__TV_channelTypeandTDMAOffset_descr_ = { "@MobileL3_RRM_Types.ChannelDescription_TV.channelTypeandTDMAOffset", &BITSTRING_ber_, &General__Types::BIT5_raw_, NULL, &ChannelDescription__TV_channelTypeandTDMAOffset_xer_, &BITSTRING_json_, &ChannelDescription__TV_channelTypeandTDMAOffset_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription__TV_channelTypeandTDMAOffset_default_coding("RAW");
const XERdescriptor_t       ChannelDescription__TV_octet3_xer_ = { {"octet3>\n", "octet3>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ChannelDescription__TV_octet3_oer_ext_arr_[0] = {};
const int ChannelDescription__TV_octet3_oer_p_[0] = {};
const TTCN_OERdescriptor_t ChannelDescription__TV_octet3_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ChannelDescription__TV_octet3_oer_ext_arr_, 0, ChannelDescription__TV_octet3_oer_p_};
const TTCN_Typedescriptor_t ChannelDescription__TV_octet3_descr_ = { "@MobileL3_RRM_Types.ChannelDescription_TV.octet3", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ChannelDescription__TV_octet3_xer_, &OCTETSTRING_json_, &ChannelDescription__TV_octet3_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription__TV_octet3_default_coding("RAW");
const XERdescriptor_t       ChannelDescription__TV_octet4_xer_ = { {"octet4>\n", "octet4>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ChannelDescription__TV_octet4_oer_ext_arr_[0] = {};
const int ChannelDescription__TV_octet4_oer_p_[0] = {};
const TTCN_OERdescriptor_t ChannelDescription__TV_octet4_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ChannelDescription__TV_octet4_oer_ext_arr_, 0, ChannelDescription__TV_octet4_oer_p_};
const TTCN_Typedescriptor_t ChannelDescription__TV_octet4_descr_ = { "@MobileL3_RRM_Types.ChannelDescription_TV.octet4", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ChannelDescription__TV_octet4_xer_, &OCTETSTRING_json_, &ChannelDescription__TV_octet4_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription__TV_octet4_default_coding("RAW");
const TTCN_RAWdescriptor_t ChannelDescription__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ChannelDescription__TV
const TTCN_Typedescriptor_t ChannelDescription__TV_descr_ = { "@MobileL3_RRM_Types.ChannelDescription_TV", NULL, &ChannelDescription__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription__TV_default_coding("RAW");
const XERdescriptor_t       ChannelDescription2__V_timeslotNumber_xer_ = { {"timeslotNumber>\n", "timeslotNumber>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ChannelDescription2__V_timeslotNumber_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ChannelDescription2__V_timeslotNumber_descr_ = { "@MobileL3_RRM_Types.ChannelDescription2_V.timeslotNumber", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &ChannelDescription2__V_timeslotNumber_xer_, &BITSTRING_json_, &ChannelDescription2__V_timeslotNumber_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription2__V_timeslotNumber_default_coding("RAW");
const XERdescriptor_t       ChannelDescription2__V_channelTypeandTDMAOffset_xer_ = { {"channelTypeandTDMAOffset>\n", "channelTypeandTDMAOffset>\n"}, {26, 26}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ChannelDescription2__V_channelTypeandTDMAOffset_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ChannelDescription2__V_channelTypeandTDMAOffset_descr_ = { "@MobileL3_RRM_Types.ChannelDescription2_V.channelTypeandTDMAOffset", &BITSTRING_ber_, &General__Types::BIT5_raw_, NULL, &ChannelDescription2__V_channelTypeandTDMAOffset_xer_, &BITSTRING_json_, &ChannelDescription2__V_channelTypeandTDMAOffset_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription2__V_channelTypeandTDMAOffset_default_coding("RAW");
const XERdescriptor_t       ChannelDescription2__V_octet3_xer_ = { {"octet3>\n", "octet3>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ChannelDescription2__V_octet3_oer_ext_arr_[0] = {};
const int ChannelDescription2__V_octet3_oer_p_[0] = {};
const TTCN_OERdescriptor_t ChannelDescription2__V_octet3_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ChannelDescription2__V_octet3_oer_ext_arr_, 0, ChannelDescription2__V_octet3_oer_p_};
const TTCN_Typedescriptor_t ChannelDescription2__V_octet3_descr_ = { "@MobileL3_RRM_Types.ChannelDescription2_V.octet3", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ChannelDescription2__V_octet3_xer_, &OCTETSTRING_json_, &ChannelDescription2__V_octet3_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription2__V_octet3_default_coding("RAW");
const XERdescriptor_t       ChannelDescription2__V_octet4_xer_ = { {"octet4>\n", "octet4>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ChannelDescription2__V_octet4_oer_ext_arr_[0] = {};
const int ChannelDescription2__V_octet4_oer_p_[0] = {};
const TTCN_OERdescriptor_t ChannelDescription2__V_octet4_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ChannelDescription2__V_octet4_oer_ext_arr_, 0, ChannelDescription2__V_octet4_oer_p_};
const TTCN_Typedescriptor_t ChannelDescription2__V_octet4_descr_ = { "@MobileL3_RRM_Types.ChannelDescription2_V.octet4", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ChannelDescription2__V_octet4_xer_, &OCTETSTRING_json_, &ChannelDescription2__V_octet4_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription2__V_octet4_default_coding("RAW");
const TTCN_RAWdescriptor_t ChannelDescription2__V_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ChannelDescription2__V
const TTCN_Typedescriptor_t ChannelDescription2__V_descr_ = { "@MobileL3_RRM_Types.ChannelDescription2_V", NULL, &ChannelDescription2__V_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription2__V_default_coding("RAW");
const XERdescriptor_t       ChannelDescription2__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ChannelDescription2__TV_elementIdentifier_oer_ext_arr_[0] = {};
const int ChannelDescription2__TV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t ChannelDescription2__TV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ChannelDescription2__TV_elementIdentifier_oer_ext_arr_, 0, ChannelDescription2__TV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t ChannelDescription2__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.ChannelDescription2_TV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ChannelDescription2__TV_elementIdentifier_xer_, &OCTETSTRING_json_, &ChannelDescription2__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription2__TV_elementIdentifier_default_coding("RAW");
const XERdescriptor_t       ChannelDescription2__TV_timeslotNumber_xer_ = { {"timeslotNumber>\n", "timeslotNumber>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ChannelDescription2__TV_timeslotNumber_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ChannelDescription2__TV_timeslotNumber_descr_ = { "@MobileL3_RRM_Types.ChannelDescription2_TV.timeslotNumber", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &ChannelDescription2__TV_timeslotNumber_xer_, &BITSTRING_json_, &ChannelDescription2__TV_timeslotNumber_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription2__TV_timeslotNumber_default_coding("RAW");
const XERdescriptor_t       ChannelDescription2__TV_channelTypeandTDMAOffset_xer_ = { {"channelTypeandTDMAOffset>\n", "channelTypeandTDMAOffset>\n"}, {26, 26}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ChannelDescription2__TV_channelTypeandTDMAOffset_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ChannelDescription2__TV_channelTypeandTDMAOffset_descr_ = { "@MobileL3_RRM_Types.ChannelDescription2_TV.channelTypeandTDMAOffset", &BITSTRING_ber_, &General__Types::BIT5_raw_, NULL, &ChannelDescription2__TV_channelTypeandTDMAOffset_xer_, &BITSTRING_json_, &ChannelDescription2__TV_channelTypeandTDMAOffset_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription2__TV_channelTypeandTDMAOffset_default_coding("RAW");
const XERdescriptor_t       ChannelDescription2__TV_octet3_xer_ = { {"octet3>\n", "octet3>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ChannelDescription2__TV_octet3_oer_ext_arr_[0] = {};
const int ChannelDescription2__TV_octet3_oer_p_[0] = {};
const TTCN_OERdescriptor_t ChannelDescription2__TV_octet3_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ChannelDescription2__TV_octet3_oer_ext_arr_, 0, ChannelDescription2__TV_octet3_oer_p_};
const TTCN_Typedescriptor_t ChannelDescription2__TV_octet3_descr_ = { "@MobileL3_RRM_Types.ChannelDescription2_TV.octet3", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ChannelDescription2__TV_octet3_xer_, &OCTETSTRING_json_, &ChannelDescription2__TV_octet3_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription2__TV_octet3_default_coding("RAW");
const XERdescriptor_t       ChannelDescription2__TV_octet4_xer_ = { {"octet4>\n", "octet4>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ChannelDescription2__TV_octet4_oer_ext_arr_[0] = {};
const int ChannelDescription2__TV_octet4_oer_p_[0] = {};
const TTCN_OERdescriptor_t ChannelDescription2__TV_octet4_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ChannelDescription2__TV_octet4_oer_ext_arr_, 0, ChannelDescription2__TV_octet4_oer_p_};
const TTCN_Typedescriptor_t ChannelDescription2__TV_octet4_descr_ = { "@MobileL3_RRM_Types.ChannelDescription2_TV.octet4", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ChannelDescription2__TV_octet4_xer_, &OCTETSTRING_json_, &ChannelDescription2__TV_octet4_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription2__TV_octet4_default_coding("RAW");
const TTCN_RAWdescriptor_t ChannelDescription2__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ChannelDescription2__TV
const TTCN_Typedescriptor_t ChannelDescription2__TV_descr_ = { "@MobileL3_RRM_Types.ChannelDescription2_TV", NULL, &ChannelDescription2__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription2__TV_default_coding("RAW");
const XERdescriptor_t       ChannelDescription3__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ChannelDescription3__TV_elementIdentifier_oer_ext_arr_[0] = {};
const int ChannelDescription3__TV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t ChannelDescription3__TV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ChannelDescription3__TV_elementIdentifier_oer_ext_arr_, 0, ChannelDescription3__TV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t ChannelDescription3__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.ChannelDescription3_TV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ChannelDescription3__TV_elementIdentifier_xer_, &OCTETSTRING_json_, &ChannelDescription3__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription3__TV_elementIdentifier_default_coding("RAW");
const XERdescriptor_t       ChannelDescription3__TV_octet2_xer_ = { {"octet2>\n", "octet2>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ChannelDescription3__TV_octet2_oer_ext_arr_[0] = {};
const int ChannelDescription3__TV_octet2_oer_p_[0] = {};
const TTCN_OERdescriptor_t ChannelDescription3__TV_octet2_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ChannelDescription3__TV_octet2_oer_ext_arr_, 0, ChannelDescription3__TV_octet2_oer_p_};
const TTCN_Typedescriptor_t ChannelDescription3__TV_octet2_descr_ = { "@MobileL3_RRM_Types.ChannelDescription3_TV.octet2", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ChannelDescription3__TV_octet2_xer_, &OCTETSTRING_json_, &ChannelDescription3__TV_octet2_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription3__TV_octet2_default_coding("RAW");
const XERdescriptor_t       ChannelDescription3__TV_octet3_xer_ = { {"octet3>\n", "octet3>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ChannelDescription3__TV_octet3_oer_ext_arr_[0] = {};
const int ChannelDescription3__TV_octet3_oer_p_[0] = {};
const TTCN_OERdescriptor_t ChannelDescription3__TV_octet3_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ChannelDescription3__TV_octet3_oer_ext_arr_, 0, ChannelDescription3__TV_octet3_oer_p_};
const TTCN_Typedescriptor_t ChannelDescription3__TV_octet3_descr_ = { "@MobileL3_RRM_Types.ChannelDescription3_TV.octet3", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ChannelDescription3__TV_octet3_xer_, &OCTETSTRING_json_, &ChannelDescription3__TV_octet3_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription3__TV_octet3_default_coding("RAW");
const TTCN_RAWdescriptor_t ChannelDescription3__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ChannelDescription3__TV
const TTCN_Typedescriptor_t ChannelDescription3__TV_descr_ = { "@MobileL3_RRM_Types.ChannelDescription3_TV", NULL, &ChannelDescription3__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelDescription3__TV_default_coding("RAW");
const XERdescriptor_t       ChannelMode__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ChannelMode__TV_elementIdentifier_oer_ext_arr_[0] = {};
const int ChannelMode__TV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t ChannelMode__TV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ChannelMode__TV_elementIdentifier_oer_ext_arr_, 0, ChannelMode__TV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t ChannelMode__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.ChannelMode_TV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ChannelMode__TV_elementIdentifier_xer_, &OCTETSTRING_json_, &ChannelMode__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelMode__TV_elementIdentifier_default_coding("RAW");
const XERdescriptor_t       ChannelMode__TV_mode_xer_ = { {"mode>\n", "mode>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ChannelMode__TV_mode_oer_ext_arr_[0] = {};
const int ChannelMode__TV_mode_oer_p_[0] = {};
const TTCN_OERdescriptor_t ChannelMode__TV_mode_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ChannelMode__TV_mode_oer_ext_arr_, 0, ChannelMode__TV_mode_oer_p_};
const TTCN_Typedescriptor_t ChannelMode__TV_mode_descr_ = { "@MobileL3_RRM_Types.ChannelMode_TV.mode", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ChannelMode__TV_mode_xer_, &OCTETSTRING_json_, &ChannelMode__TV_mode_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelMode__TV_mode_default_coding("RAW");
const TTCN_RAWdescriptor_t ChannelMode__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ChannelMode__TV
const TTCN_Typedescriptor_t ChannelMode__TV_descr_ = { "@MobileL3_RRM_Types.ChannelMode_TV", NULL, &ChannelMode__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelMode__TV_default_coding("RAW");
const XERdescriptor_t       ChannelMode__V_mode_xer_ = { {"mode>\n", "mode>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ChannelMode__V_mode_oer_ext_arr_[0] = {};
const int ChannelMode__V_mode_oer_p_[0] = {};
const TTCN_OERdescriptor_t ChannelMode__V_mode_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ChannelMode__V_mode_oer_ext_arr_, 0, ChannelMode__V_mode_oer_p_};
const TTCN_Typedescriptor_t ChannelMode__V_mode_descr_ = { "@MobileL3_RRM_Types.ChannelMode_V.mode", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ChannelMode__V_mode_xer_, &OCTETSTRING_json_, &ChannelMode__V_mode_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelMode__V_mode_default_coding("RAW");
const TTCN_RAWdescriptor_t ChannelMode__V_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ChannelMode__V
const TTCN_Typedescriptor_t ChannelMode__V_descr_ = { "@MobileL3_RRM_Types.ChannelMode_V", NULL, &ChannelMode__V_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelMode__V_default_coding("RAW");
const XERdescriptor_t       ChannelMode2__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ChannelMode2__TV_elementIdentifier_oer_ext_arr_[0] = {};
const int ChannelMode2__TV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t ChannelMode2__TV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ChannelMode2__TV_elementIdentifier_oer_ext_arr_, 0, ChannelMode2__TV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t ChannelMode2__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.ChannelMode2_TV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ChannelMode2__TV_elementIdentifier_xer_, &OCTETSTRING_json_, &ChannelMode2__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelMode2__TV_elementIdentifier_default_coding("RAW");
const XERdescriptor_t       ChannelMode2__TV_mode_xer_ = { {"mode>\n", "mode>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ChannelMode2__TV_mode_oer_ext_arr_[0] = {};
const int ChannelMode2__TV_mode_oer_p_[0] = {};
const TTCN_OERdescriptor_t ChannelMode2__TV_mode_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ChannelMode2__TV_mode_oer_ext_arr_, 0, ChannelMode2__TV_mode_oer_p_};
const TTCN_Typedescriptor_t ChannelMode2__TV_mode_descr_ = { "@MobileL3_RRM_Types.ChannelMode2_TV.mode", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ChannelMode2__TV_mode_xer_, &OCTETSTRING_json_, &ChannelMode2__TV_mode_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelMode2__TV_mode_default_coding("RAW");
const TTCN_RAWdescriptor_t ChannelMode2__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ChannelMode2__TV
const TTCN_Typedescriptor_t ChannelMode2__TV_descr_ = { "@MobileL3_RRM_Types.ChannelMode2_TV", NULL, &ChannelMode2__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelMode2__TV_default_coding("RAW");
const TTCN_RAWdescriptor_t UTRAN__Classmark__LV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       UTRAN__Classmark__LV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UTRAN__Classmark__LV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UTRAN__Classmark__LV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.UTRAN_Classmark_LV.lengthIndicator", &INTEGER_ber_, &UTRAN__Classmark__LV_lengthIndicator_raw_, &INTEGER_text_, &UTRAN__Classmark__LV_lengthIndicator_xer_, &INTEGER_json_, &UTRAN__Classmark__LV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UTRAN__Classmark__LV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       UTRAN__Classmark__LV_uTRAN__ClassmarkValue_xer_ = { {"uTRAN_ClassmarkValue>\n", "uTRAN_ClassmarkValue>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int UTRAN__Classmark__LV_uTRAN__ClassmarkValue_oer_ext_arr_[0] = {};
const int UTRAN__Classmark__LV_uTRAN__ClassmarkValue_oer_p_[0] = {};
const TTCN_OERdescriptor_t UTRAN__Classmark__LV_uTRAN__ClassmarkValue_oer_ = { -1, TRUE, -1, FALSE, 0, 0, UTRAN__Classmark__LV_uTRAN__ClassmarkValue_oer_ext_arr_, 0, UTRAN__Classmark__LV_uTRAN__ClassmarkValue_oer_p_};
const TTCN_Typedescriptor_t UTRAN__Classmark__LV_uTRAN__ClassmarkValue_descr_ = { "@MobileL3_RRM_Types.UTRAN_Classmark_LV.uTRAN_ClassmarkValue", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &UTRAN__Classmark__LV_uTRAN__ClassmarkValue_xer_, &OCTETSTRING_json_, &UTRAN__Classmark__LV_uTRAN__ClassmarkValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UTRAN__Classmark__LV_uTRAN__ClassmarkValue_default_coding("RAW");
const TTCN_RAWdescriptor_t UTRAN__Classmark__LV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for UTRAN__Classmark__LV
const TTCN_Typedescriptor_t UTRAN__Classmark__LV_descr_ = { "@MobileL3_RRM_Types.UTRAN_Classmark_LV", NULL, &UTRAN__Classmark__LV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UTRAN__Classmark__LV_default_coding("RAW");
const XERdescriptor_t       ClassmarkEnquiryMask__TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ClassmarkEnquiryMask__TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int ClassmarkEnquiryMask__TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t ClassmarkEnquiryMask__TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ClassmarkEnquiryMask__TLV_elementIdentifier_oer_ext_arr_, 0, ClassmarkEnquiryMask__TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t ClassmarkEnquiryMask__TLV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ClassmarkEnquiryMask__TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &ClassmarkEnquiryMask__TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ClassmarkEnquiryMask__TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t ClassmarkEnquiryMask__TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       ClassmarkEnquiryMask__TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ClassmarkEnquiryMask__TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ClassmarkEnquiryMask__TLV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV.lengthIndicator", &INTEGER_ber_, &ClassmarkEnquiryMask__TLV_lengthIndicator_raw_, &INTEGER_text_, &ClassmarkEnquiryMask__TLV_lengthIndicator_xer_, &INTEGER_json_, &ClassmarkEnquiryMask__TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ClassmarkEnquiryMask__TLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       ClassmarkEnquiryMask__TLV_valuePart_xer_ = { {"valuePart>\n", "valuePart>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ClassmarkEnquiryMask__TLV_valuePart_oer_ext_arr_[0] = {};
const int ClassmarkEnquiryMask__TLV_valuePart_oer_p_[0] = {};
const TTCN_OERdescriptor_t ClassmarkEnquiryMask__TLV_valuePart_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ClassmarkEnquiryMask__TLV_valuePart_oer_ext_arr_, 0, ClassmarkEnquiryMask__TLV_valuePart_oer_p_};
const TTCN_Typedescriptor_t ClassmarkEnquiryMask__TLV_valuePart_descr_ = { "@MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV.valuePart", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ClassmarkEnquiryMask__TLV_valuePart_xer_, &OCTETSTRING_json_, &ClassmarkEnquiryMask__TLV_valuePart_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ClassmarkEnquiryMask__TLV_valuePart_default_coding("RAW");
const TTCN_RAWdescriptor_t ClassmarkEnquiryMask__TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ClassmarkEnquiryMask__TLV
const TTCN_Typedescriptor_t ClassmarkEnquiryMask__TLV_descr_ = { "@MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV", NULL, &ClassmarkEnquiryMask__TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ClassmarkEnquiryMask__TLV_default_coding("RAW");
const TTCN_RAWdescriptor_t GERAN__IU__ModeClassmark__LV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       GERAN__IU__ModeClassmark__LV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t GERAN__IU__ModeClassmark__LV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t GERAN__IU__ModeClassmark__LV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV.lengthIndicator", &INTEGER_ber_, &GERAN__IU__ModeClassmark__LV_lengthIndicator_raw_, &INTEGER_text_, &GERAN__IU__ModeClassmark__LV_lengthIndicator_xer_, &INTEGER_json_, &GERAN__IU__ModeClassmark__LV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING GERAN__IU__ModeClassmark__LV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       GERAN__IU__ModeClassmark__LV_valuePart_xer_ = { {"valuePart>\n", "valuePart>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int GERAN__IU__ModeClassmark__LV_valuePart_oer_ext_arr_[0] = {};
const int GERAN__IU__ModeClassmark__LV_valuePart_oer_p_[0] = {};
const TTCN_OERdescriptor_t GERAN__IU__ModeClassmark__LV_valuePart_oer_ = { -1, TRUE, 1, FALSE, 0, 0, GERAN__IU__ModeClassmark__LV_valuePart_oer_ext_arr_, 0, GERAN__IU__ModeClassmark__LV_valuePart_oer_p_};
const TTCN_Typedescriptor_t GERAN__IU__ModeClassmark__LV_valuePart_descr_ = { "@MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV.valuePart", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &GERAN__IU__ModeClassmark__LV_valuePart_xer_, &OCTETSTRING_json_, &GERAN__IU__ModeClassmark__LV_valuePart_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING GERAN__IU__ModeClassmark__LV_valuePart_default_coding("RAW");
const TTCN_RAWdescriptor_t GERAN__IU__ModeClassmark__LV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for GERAN__IU__ModeClassmark__LV
const TTCN_Typedescriptor_t GERAN__IU__ModeClassmark__LV_descr_ = { "@MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV", NULL, &GERAN__IU__ModeClassmark__LV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING GERAN__IU__ModeClassmark__LV_default_coding("RAW");
const XERdescriptor_t       ChannelNeeded__TV_channel1_xer_ = { {"channel1>\n", "channel1>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ChannelNeeded__TV_channel1_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ChannelNeeded__TV_channel1_descr_ = { "@MobileL3_RRM_Types.ChannelNeeded_TV.channel1", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &ChannelNeeded__TV_channel1_xer_, &BITSTRING_json_, &ChannelNeeded__TV_channel1_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelNeeded__TV_channel1_default_coding("RAW");
const XERdescriptor_t       ChannelNeeded__TV_channel2_xer_ = { {"channel2>\n", "channel2>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ChannelNeeded__TV_channel2_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ChannelNeeded__TV_channel2_descr_ = { "@MobileL3_RRM_Types.ChannelNeeded_TV.channel2", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &ChannelNeeded__TV_channel2_xer_, &BITSTRING_json_, &ChannelNeeded__TV_channel2_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelNeeded__TV_channel2_default_coding("RAW");
const XERdescriptor_t       ChannelNeeded__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ChannelNeeded__TV_elementIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ChannelNeeded__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.ChannelNeeded_TV.elementIdentifier", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &ChannelNeeded__TV_elementIdentifier_xer_, &BITSTRING_json_, &ChannelNeeded__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelNeeded__TV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t ChannelNeeded__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ChannelNeeded__TV
const TTCN_Typedescriptor_t ChannelNeeded__TV_descr_ = { "@MobileL3_RRM_Types.ChannelNeeded_TV", NULL, &ChannelNeeded__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelNeeded__TV_default_coding("RAW");
const XERdescriptor_t       ChannelNeeded__V_channel1_xer_ = { {"channel1>\n", "channel1>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ChannelNeeded__V_channel1_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ChannelNeeded__V_channel1_descr_ = { "@MobileL3_RRM_Types.ChannelNeeded_V.channel1", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &ChannelNeeded__V_channel1_xer_, &BITSTRING_json_, &ChannelNeeded__V_channel1_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelNeeded__V_channel1_default_coding("RAW");
const XERdescriptor_t       ChannelNeeded__V_channel2_xer_ = { {"channel2>\n", "channel2>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ChannelNeeded__V_channel2_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ChannelNeeded__V_channel2_descr_ = { "@MobileL3_RRM_Types.ChannelNeeded_V.channel2", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &ChannelNeeded__V_channel2_xer_, &BITSTRING_json_, &ChannelNeeded__V_channel2_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelNeeded__V_channel2_default_coding("RAW");
const TTCN_RAWdescriptor_t ChannelNeeded__V_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ChannelNeeded__V
const TTCN_Typedescriptor_t ChannelNeeded__V_descr_ = { "@MobileL3_RRM_Types.ChannelNeeded_V", NULL, &ChannelNeeded__V_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelNeeded__V_default_coding("RAW");
const TTCN_RAWdescriptor_t ChannelRequestDescription2__LV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       ChannelRequestDescription2__LV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ChannelRequestDescription2__LV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ChannelRequestDescription2__LV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.ChannelRequestDescription2_LV.lengthIndicator", &INTEGER_ber_, &ChannelRequestDescription2__LV_lengthIndicator_raw_, &INTEGER_text_, &ChannelRequestDescription2__LV_lengthIndicator_xer_, &INTEGER_json_, &ChannelRequestDescription2__LV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelRequestDescription2__LV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       ChannelRequestDescription2__LV_valuePart_xer_ = { {"valuePart>\n", "valuePart>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ChannelRequestDescription2__LV_valuePart_oer_ext_arr_[0] = {};
const int ChannelRequestDescription2__LV_valuePart_oer_p_[0] = {};
const TTCN_OERdescriptor_t ChannelRequestDescription2__LV_valuePart_oer_ = { -1, TRUE, -1, FALSE, 0, 0, ChannelRequestDescription2__LV_valuePart_oer_ext_arr_, 0, ChannelRequestDescription2__LV_valuePart_oer_p_};
const TTCN_Typedescriptor_t ChannelRequestDescription2__LV_valuePart_descr_ = { "@MobileL3_RRM_Types.ChannelRequestDescription2_LV.valuePart", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &ChannelRequestDescription2__LV_valuePart_xer_, &OCTETSTRING_json_, &ChannelRequestDescription2__LV_valuePart_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelRequestDescription2__LV_valuePart_default_coding("RAW");
const TTCN_RAWdescriptor_t ChannelRequestDescription2__LV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ChannelRequestDescription2__LV
const TTCN_Typedescriptor_t ChannelRequestDescription2__LV_descr_ = { "@MobileL3_RRM_Types.ChannelRequestDescription2_LV", NULL, &ChannelRequestDescription2__LV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ChannelRequestDescription2__LV_default_coding("RAW");
const XERdescriptor_t       CipherModeSetting__TV_sC_xer_ = { {"sC>\n", "sC>\n"}, {4, 4}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t CipherModeSetting__TV_sC_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t CipherModeSetting__TV_sC_descr_ = { "@MobileL3_RRM_Types.CipherModeSetting_TV.sC", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &CipherModeSetting__TV_sC_xer_, &BITSTRING_json_, &CipherModeSetting__TV_sC_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CipherModeSetting__TV_sC_default_coding("RAW");
const XERdescriptor_t       CipherModeSetting__TV_algorithmIdentifier_xer_ = { {"algorithmIdentifier>\n", "algorithmIdentifier>\n"}, {21, 21}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t CipherModeSetting__TV_algorithmIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t CipherModeSetting__TV_algorithmIdentifier_descr_ = { "@MobileL3_RRM_Types.CipherModeSetting_TV.algorithmIdentifier", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &CipherModeSetting__TV_algorithmIdentifier_xer_, &BITSTRING_json_, &CipherModeSetting__TV_algorithmIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CipherModeSetting__TV_algorithmIdentifier_default_coding("RAW");
const XERdescriptor_t       CipherModeSetting__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t CipherModeSetting__TV_elementIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t CipherModeSetting__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.CipherModeSetting_TV.elementIdentifier", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &CipherModeSetting__TV_elementIdentifier_xer_, &BITSTRING_json_, &CipherModeSetting__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CipherModeSetting__TV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t CipherModeSetting__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for CipherModeSetting__TV
const TTCN_Typedescriptor_t CipherModeSetting__TV_descr_ = { "@MobileL3_RRM_Types.CipherModeSetting_TV", NULL, &CipherModeSetting__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CipherModeSetting__TV_default_coding("RAW");
const XERdescriptor_t       CipherModeSetting__V_sC_xer_ = { {"sC>\n", "sC>\n"}, {4, 4}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t CipherModeSetting__V_sC_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t CipherModeSetting__V_sC_descr_ = { "@MobileL3_RRM_Types.CipherModeSetting_V.sC", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &CipherModeSetting__V_sC_xer_, &BITSTRING_json_, &CipherModeSetting__V_sC_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CipherModeSetting__V_sC_default_coding("RAW");
const XERdescriptor_t       CipherModeSetting__V_algorithmIdentifier_xer_ = { {"algorithmIdentifier>\n", "algorithmIdentifier>\n"}, {21, 21}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t CipherModeSetting__V_algorithmIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t CipherModeSetting__V_algorithmIdentifier_descr_ = { "@MobileL3_RRM_Types.CipherModeSetting_V.algorithmIdentifier", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &CipherModeSetting__V_algorithmIdentifier_xer_, &BITSTRING_json_, &CipherModeSetting__V_algorithmIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CipherModeSetting__V_algorithmIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t CipherModeSetting__V_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for CipherModeSetting__V
const TTCN_Typedescriptor_t CipherModeSetting__V_descr_ = { "@MobileL3_RRM_Types.CipherModeSetting_V", NULL, &CipherModeSetting__V_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CipherModeSetting__V_default_coding("RAW");
const XERdescriptor_t       CipherModeResponse__TV_cR_xer_ = { {"cR>\n", "cR>\n"}, {4, 4}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t CipherModeResponse__TV_cR_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t CipherModeResponse__TV_cR_descr_ = { "@MobileL3_RRM_Types.CipherModeResponse_TV.cR", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &CipherModeResponse__TV_cR_xer_, &BITSTRING_json_, &CipherModeResponse__TV_cR_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CipherModeResponse__TV_cR_default_coding("RAW");
const XERdescriptor_t       CipherModeResponse__TV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t CipherModeResponse__TV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t CipherModeResponse__TV_spare_descr_ = { "@MobileL3_RRM_Types.CipherModeResponse_TV.spare", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &CipherModeResponse__TV_spare_xer_, &BITSTRING_json_, &CipherModeResponse__TV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CipherModeResponse__TV_spare_default_coding("RAW");
const XERdescriptor_t       CipherModeResponse__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t CipherModeResponse__TV_elementIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t CipherModeResponse__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.CipherModeResponse_TV.elementIdentifier", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &CipherModeResponse__TV_elementIdentifier_xer_, &BITSTRING_json_, &CipherModeResponse__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CipherModeResponse__TV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t CipherModeResponse__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for CipherModeResponse__TV
const TTCN_Typedescriptor_t CipherModeResponse__TV_descr_ = { "@MobileL3_RRM_Types.CipherModeResponse_TV", NULL, &CipherModeResponse__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CipherModeResponse__TV_default_coding("RAW");
const XERdescriptor_t       CipherModeResponse__V_cR_xer_ = { {"cR>\n", "cR>\n"}, {4, 4}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t CipherModeResponse__V_cR_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t CipherModeResponse__V_cR_descr_ = { "@MobileL3_RRM_Types.CipherModeResponse_V.cR", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &CipherModeResponse__V_cR_xer_, &BITSTRING_json_, &CipherModeResponse__V_cR_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CipherModeResponse__V_cR_default_coding("RAW");
const XERdescriptor_t       CipherModeResponse__V_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t CipherModeResponse__V_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t CipherModeResponse__V_spare_descr_ = { "@MobileL3_RRM_Types.CipherModeResponse_V.spare", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &CipherModeResponse__V_spare_xer_, &BITSTRING_json_, &CipherModeResponse__V_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CipherModeResponse__V_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t CipherModeResponse__V_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for CipherModeResponse__V
const TTCN_Typedescriptor_t CipherModeResponse__V_descr_ = { "@MobileL3_RRM_Types.CipherModeResponse_V", NULL, &CipherModeResponse__V_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CipherModeResponse__V_default_coding("RAW");
const TTCN_RAWdescriptor_t DTM__InformationDetails__LV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       DTM__InformationDetails__LV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t DTM__InformationDetails__LV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t DTM__InformationDetails__LV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.DTM_InformationDetails_LV.lengthIndicator", &INTEGER_ber_, &DTM__InformationDetails__LV_lengthIndicator_raw_, &INTEGER_text_, &DTM__InformationDetails__LV_lengthIndicator_xer_, &INTEGER_json_, &DTM__InformationDetails__LV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DTM__InformationDetails__LV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       DTM__InformationDetails__LV_valuePart_xer_ = { {"valuePart>\n", "valuePart>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int DTM__InformationDetails__LV_valuePart_oer_ext_arr_[0] = {};
const int DTM__InformationDetails__LV_valuePart_oer_p_[0] = {};
const TTCN_OERdescriptor_t DTM__InformationDetails__LV_valuePart_oer_ = { -1, TRUE, -1, FALSE, 0, 0, DTM__InformationDetails__LV_valuePart_oer_ext_arr_, 0, DTM__InformationDetails__LV_valuePart_oer_p_};
const TTCN_Typedescriptor_t DTM__InformationDetails__LV_valuePart_descr_ = { "@MobileL3_RRM_Types.DTM_InformationDetails_LV.valuePart", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &DTM__InformationDetails__LV_valuePart_xer_, &OCTETSTRING_json_, &DTM__InformationDetails__LV_valuePart_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DTM__InformationDetails__LV_valuePart_default_coding("RAW");
const TTCN_RAWdescriptor_t DTM__InformationDetails__LV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for DTM__InformationDetails__LV
const TTCN_Typedescriptor_t DTM__InformationDetails__LV_descr_ = { "@MobileL3_RRM_Types.DTM_InformationDetails_LV", NULL, &DTM__InformationDetails__LV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DTM__InformationDetails__LV_default_coding("RAW");
const XERdescriptor_t       DynamicARFCN__Mapping__TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int DynamicARFCN__Mapping__TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int DynamicARFCN__Mapping__TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t DynamicARFCN__Mapping__TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, DynamicARFCN__Mapping__TLV_elementIdentifier_oer_ext_arr_, 0, DynamicARFCN__Mapping__TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t DynamicARFCN__Mapping__TLV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &DynamicARFCN__Mapping__TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &DynamicARFCN__Mapping__TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DynamicARFCN__Mapping__TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t DynamicARFCN__Mapping__TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       DynamicARFCN__Mapping__TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t DynamicARFCN__Mapping__TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t DynamicARFCN__Mapping__TLV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV.lengthIndicator", &INTEGER_ber_, &DynamicARFCN__Mapping__TLV_lengthIndicator_raw_, &INTEGER_text_, &DynamicARFCN__Mapping__TLV_lengthIndicator_xer_, &INTEGER_json_, &DynamicARFCN__Mapping__TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DynamicARFCN__Mapping__TLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       DynamicARFCN__Mapping__TLV_valuePart_xer_ = { {"valuePart>\n", "valuePart>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int DynamicARFCN__Mapping__TLV_valuePart_oer_ext_arr_[0] = {};
const int DynamicARFCN__Mapping__TLV_valuePart_oer_p_[0] = {};
const TTCN_OERdescriptor_t DynamicARFCN__Mapping__TLV_valuePart_oer_ = { -1, TRUE, -1, FALSE, 0, 0, DynamicARFCN__Mapping__TLV_valuePart_oer_ext_arr_, 0, DynamicARFCN__Mapping__TLV_valuePart_oer_p_};
const TTCN_Typedescriptor_t DynamicARFCN__Mapping__TLV_valuePart_descr_ = { "@MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV.valuePart", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &DynamicARFCN__Mapping__TLV_valuePart_xer_, &OCTETSTRING_json_, &DynamicARFCN__Mapping__TLV_valuePart_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DynamicARFCN__Mapping__TLV_valuePart_default_coding("RAW");
const TTCN_RAWdescriptor_t DynamicARFCN__Mapping__TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for DynamicARFCN__Mapping__TLV
const TTCN_Typedescriptor_t DynamicARFCN__Mapping__TLV_descr_ = { "@MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV", NULL, &DynamicARFCN__Mapping__TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DynamicARFCN__Mapping__TLV_default_coding("RAW");
const XERdescriptor_t       FrequencyChannelSequence__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int FrequencyChannelSequence__TV_elementIdentifier_oer_ext_arr_[0] = {};
const int FrequencyChannelSequence__TV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t FrequencyChannelSequence__TV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, FrequencyChannelSequence__TV_elementIdentifier_oer_ext_arr_, 0, FrequencyChannelSequence__TV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t FrequencyChannelSequence__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.FrequencyChannelSequence_TV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &FrequencyChannelSequence__TV_elementIdentifier_xer_, &OCTETSTRING_json_, &FrequencyChannelSequence__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FrequencyChannelSequence__TV_elementIdentifier_default_coding("RAW");
const XERdescriptor_t       FrequencyChannelSequence__TV_lowestARFCN_xer_ = { {"lowestARFCN>\n", "lowestARFCN>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t FrequencyChannelSequence__TV_lowestARFCN_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t FrequencyChannelSequence__TV_lowestARFCN_descr_ = { "@MobileL3_RRM_Types.FrequencyChannelSequence_TV.lowestARFCN", &BITSTRING_ber_, &General__Types::BIT7_raw_, NULL, &FrequencyChannelSequence__TV_lowestARFCN_xer_, &BITSTRING_json_, &FrequencyChannelSequence__TV_lowestARFCN_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FrequencyChannelSequence__TV_lowestARFCN_default_coding("RAW");
const XERdescriptor_t       FrequencyChannelSequence__TV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t FrequencyChannelSequence__TV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t FrequencyChannelSequence__TV_spare_descr_ = { "@MobileL3_RRM_Types.FrequencyChannelSequence_TV.spare", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &FrequencyChannelSequence__TV_spare_xer_, &BITSTRING_json_, &FrequencyChannelSequence__TV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FrequencyChannelSequence__TV_spare_default_coding("RAW");
const XERdescriptor_t       FrequencyChannelSequence__TV_incSkipARFCN02_xer_ = { {"incSkipARFCN02>\n", "incSkipARFCN02>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t FrequencyChannelSequence__TV_incSkipARFCN02_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t FrequencyChannelSequence__TV_incSkipARFCN02_descr_ = { "@MobileL3_RRM_Types.FrequencyChannelSequence_TV.incSkipARFCN02", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &FrequencyChannelSequence__TV_incSkipARFCN02_xer_, &BITSTRING_json_, &FrequencyChannelSequence__TV_incSkipARFCN02_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FrequencyChannelSequence__TV_incSkipARFCN02_default_coding("RAW");
const XERdescriptor_t       FrequencyChannelSequence__TV_incSkipARFCN01_xer_ = { {"incSkipARFCN01>\n", "incSkipARFCN01>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t FrequencyChannelSequence__TV_incSkipARFCN01_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t FrequencyChannelSequence__TV_incSkipARFCN01_descr_ = { "@MobileL3_RRM_Types.FrequencyChannelSequence_TV.incSkipARFCN01", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &FrequencyChannelSequence__TV_incSkipARFCN01_xer_, &BITSTRING_json_, &FrequencyChannelSequence__TV_incSkipARFCN01_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FrequencyChannelSequence__TV_incSkipARFCN01_default_coding("RAW");
const XERdescriptor_t       FrequencyChannelSequence__TV_incSkipARFCN04_xer_ = { {"incSkipARFCN04>\n", "incSkipARFCN04>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t FrequencyChannelSequence__TV_incSkipARFCN04_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t FrequencyChannelSequence__TV_incSkipARFCN04_descr_ = { "@MobileL3_RRM_Types.FrequencyChannelSequence_TV.incSkipARFCN04", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &FrequencyChannelSequence__TV_incSkipARFCN04_xer_, &BITSTRING_json_, &FrequencyChannelSequence__TV_incSkipARFCN04_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FrequencyChannelSequence__TV_incSkipARFCN04_default_coding("RAW");
const XERdescriptor_t       FrequencyChannelSequence__TV_incSkipARFCN03_xer_ = { {"incSkipARFCN03>\n", "incSkipARFCN03>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t FrequencyChannelSequence__TV_incSkipARFCN03_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t FrequencyChannelSequence__TV_incSkipARFCN03_descr_ = { "@MobileL3_RRM_Types.FrequencyChannelSequence_TV.incSkipARFCN03", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &FrequencyChannelSequence__TV_incSkipARFCN03_xer_, &BITSTRING_json_, &FrequencyChannelSequence__TV_incSkipARFCN03_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FrequencyChannelSequence__TV_incSkipARFCN03_default_coding("RAW");
const XERdescriptor_t       FrequencyChannelSequence__TV_incSkipARFCN06_xer_ = { {"incSkipARFCN06>\n", "incSkipARFCN06>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t FrequencyChannelSequence__TV_incSkipARFCN06_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t FrequencyChannelSequence__TV_incSkipARFCN06_descr_ = { "@MobileL3_RRM_Types.FrequencyChannelSequence_TV.incSkipARFCN06", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &FrequencyChannelSequence__TV_incSkipARFCN06_xer_, &BITSTRING_json_, &FrequencyChannelSequence__TV_incSkipARFCN06_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FrequencyChannelSequence__TV_incSkipARFCN06_default_coding("RAW");
const XERdescriptor_t       FrequencyChannelSequence__TV_incSkipARFCN05_xer_ = { {"incSkipARFCN05>\n", "incSkipARFCN05>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t FrequencyChannelSequence__TV_incSkipARFCN05_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t FrequencyChannelSequence__TV_incSkipARFCN05_descr_ = { "@MobileL3_RRM_Types.FrequencyChannelSequence_TV.incSkipARFCN05", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &FrequencyChannelSequence__TV_incSkipARFCN05_xer_, &BITSTRING_json_, &FrequencyChannelSequence__TV_incSkipARFCN05_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FrequencyChannelSequence__TV_incSkipARFCN05_default_coding("RAW");
const XERdescriptor_t       FrequencyChannelSequence__TV_incSkipARFCN08_xer_ = { {"incSkipARFCN08>\n", "incSkipARFCN08>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t FrequencyChannelSequence__TV_incSkipARFCN08_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t FrequencyChannelSequence__TV_incSkipARFCN08_descr_ = { "@MobileL3_RRM_Types.FrequencyChannelSequence_TV.incSkipARFCN08", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &FrequencyChannelSequence__TV_incSkipARFCN08_xer_, &BITSTRING_json_, &FrequencyChannelSequence__TV_incSkipARFCN08_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FrequencyChannelSequence__TV_incSkipARFCN08_default_coding("RAW");
const XERdescriptor_t       FrequencyChannelSequence__TV_incSkipARFCN07_xer_ = { {"incSkipARFCN07>\n", "incSkipARFCN07>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t FrequencyChannelSequence__TV_incSkipARFCN07_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t FrequencyChannelSequence__TV_incSkipARFCN07_descr_ = { "@MobileL3_RRM_Types.FrequencyChannelSequence_TV.incSkipARFCN07", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &FrequencyChannelSequence__TV_incSkipARFCN07_xer_, &BITSTRING_json_, &FrequencyChannelSequence__TV_incSkipARFCN07_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FrequencyChannelSequence__TV_incSkipARFCN07_default_coding("RAW");
const XERdescriptor_t       FrequencyChannelSequence__TV_incSkipARFCN10_xer_ = { {"incSkipARFCN10>\n", "incSkipARFCN10>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t FrequencyChannelSequence__TV_incSkipARFCN10_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t FrequencyChannelSequence__TV_incSkipARFCN10_descr_ = { "@MobileL3_RRM_Types.FrequencyChannelSequence_TV.incSkipARFCN10", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &FrequencyChannelSequence__TV_incSkipARFCN10_xer_, &BITSTRING_json_, &FrequencyChannelSequence__TV_incSkipARFCN10_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FrequencyChannelSequence__TV_incSkipARFCN10_default_coding("RAW");
const XERdescriptor_t       FrequencyChannelSequence__TV_incSkipARFCN09_xer_ = { {"incSkipARFCN09>\n", "incSkipARFCN09>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t FrequencyChannelSequence__TV_incSkipARFCN09_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t FrequencyChannelSequence__TV_incSkipARFCN09_descr_ = { "@MobileL3_RRM_Types.FrequencyChannelSequence_TV.incSkipARFCN09", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &FrequencyChannelSequence__TV_incSkipARFCN09_xer_, &BITSTRING_json_, &FrequencyChannelSequence__TV_incSkipARFCN09_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FrequencyChannelSequence__TV_incSkipARFCN09_default_coding("RAW");
const XERdescriptor_t       FrequencyChannelSequence__TV_incSkipARFCN12_xer_ = { {"incSkipARFCN12>\n", "incSkipARFCN12>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t FrequencyChannelSequence__TV_incSkipARFCN12_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t FrequencyChannelSequence__TV_incSkipARFCN12_descr_ = { "@MobileL3_RRM_Types.FrequencyChannelSequence_TV.incSkipARFCN12", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &FrequencyChannelSequence__TV_incSkipARFCN12_xer_, &BITSTRING_json_, &FrequencyChannelSequence__TV_incSkipARFCN12_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FrequencyChannelSequence__TV_incSkipARFCN12_default_coding("RAW");
const XERdescriptor_t       FrequencyChannelSequence__TV_incSkipARFCN11_xer_ = { {"incSkipARFCN11>\n", "incSkipARFCN11>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t FrequencyChannelSequence__TV_incSkipARFCN11_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t FrequencyChannelSequence__TV_incSkipARFCN11_descr_ = { "@MobileL3_RRM_Types.FrequencyChannelSequence_TV.incSkipARFCN11", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &FrequencyChannelSequence__TV_incSkipARFCN11_xer_, &BITSTRING_json_, &FrequencyChannelSequence__TV_incSkipARFCN11_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FrequencyChannelSequence__TV_incSkipARFCN11_default_coding("RAW");
const XERdescriptor_t       FrequencyChannelSequence__TV_incSkipARFCN14_xer_ = { {"incSkipARFCN14>\n", "incSkipARFCN14>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t FrequencyChannelSequence__TV_incSkipARFCN14_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t FrequencyChannelSequence__TV_incSkipARFCN14_descr_ = { "@MobileL3_RRM_Types.FrequencyChannelSequence_TV.incSkipARFCN14", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &FrequencyChannelSequence__TV_incSkipARFCN14_xer_, &BITSTRING_json_, &FrequencyChannelSequence__TV_incSkipARFCN14_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FrequencyChannelSequence__TV_incSkipARFCN14_default_coding("RAW");
const XERdescriptor_t       FrequencyChannelSequence__TV_incSkipARFCN13_xer_ = { {"incSkipARFCN13>\n", "incSkipARFCN13>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t FrequencyChannelSequence__TV_incSkipARFCN13_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t FrequencyChannelSequence__TV_incSkipARFCN13_descr_ = { "@MobileL3_RRM_Types.FrequencyChannelSequence_TV.incSkipARFCN13", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &FrequencyChannelSequence__TV_incSkipARFCN13_xer_, &BITSTRING_json_, &FrequencyChannelSequence__TV_incSkipARFCN13_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FrequencyChannelSequence__TV_incSkipARFCN13_default_coding("RAW");
const XERdescriptor_t       FrequencyChannelSequence__TV_incSkipARFCN16_xer_ = { {"incSkipARFCN16>\n", "incSkipARFCN16>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t FrequencyChannelSequence__TV_incSkipARFCN16_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t FrequencyChannelSequence__TV_incSkipARFCN16_descr_ = { "@MobileL3_RRM_Types.FrequencyChannelSequence_TV.incSkipARFCN16", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &FrequencyChannelSequence__TV_incSkipARFCN16_xer_, &BITSTRING_json_, &FrequencyChannelSequence__TV_incSkipARFCN16_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FrequencyChannelSequence__TV_incSkipARFCN16_default_coding("RAW");
const XERdescriptor_t       FrequencyChannelSequence__TV_incSkipARFCN15_xer_ = { {"incSkipARFCN15>\n", "incSkipARFCN15>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t FrequencyChannelSequence__TV_incSkipARFCN15_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t FrequencyChannelSequence__TV_incSkipARFCN15_descr_ = { "@MobileL3_RRM_Types.FrequencyChannelSequence_TV.incSkipARFCN15", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &FrequencyChannelSequence__TV_incSkipARFCN15_xer_, &BITSTRING_json_, &FrequencyChannelSequence__TV_incSkipARFCN15_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FrequencyChannelSequence__TV_incSkipARFCN15_default_coding("RAW");
const TTCN_RAWdescriptor_t FrequencyChannelSequence__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for FrequencyChannelSequence__TV
const TTCN_Typedescriptor_t FrequencyChannelSequence__TV_descr_ = { "@MobileL3_RRM_Types.FrequencyChannelSequence_TV", NULL, &FrequencyChannelSequence__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FrequencyChannelSequence__TV_default_coding("RAW");
const TTCN_Typedescriptor_t& FrequencyList__TLV_descr_ = MobileL3__CommonIE__Types::Type4__TLV_descr_;
UNIVERSAL_CHARSTRING FrequencyList__TLV_default_coding("RAW");
const XERdescriptor_t       FrequencyShortList__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int FrequencyShortList__TV_elementIdentifier_oer_ext_arr_[0] = {};
const int FrequencyShortList__TV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t FrequencyShortList__TV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, FrequencyShortList__TV_elementIdentifier_oer_ext_arr_, 0, FrequencyShortList__TV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t FrequencyShortList__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.FrequencyShortList_TV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &FrequencyShortList__TV_elementIdentifier_xer_, &OCTETSTRING_json_, &FrequencyShortList__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FrequencyShortList__TV_elementIdentifier_default_coding("RAW");
const XERdescriptor_t       FrequencyShortList__TV_frequencyShortListValue_xer_ = { {"frequencyShortListValue>\n", "frequencyShortListValue>\n"}, {25, 25}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int FrequencyShortList__TV_frequencyShortListValue_oer_ext_arr_[0] = {};
const int FrequencyShortList__TV_frequencyShortListValue_oer_p_[0] = {};
const TTCN_OERdescriptor_t FrequencyShortList__TV_frequencyShortListValue_oer_ = { -1, TRUE, 9, FALSE, 0, 0, FrequencyShortList__TV_frequencyShortListValue_oer_ext_arr_, 0, FrequencyShortList__TV_frequencyShortListValue_oer_p_};
const TTCN_Typedescriptor_t FrequencyShortList__TV_frequencyShortListValue_descr_ = { "@MobileL3_RRM_Types.FrequencyShortList_TV.frequencyShortListValue", &OCTETSTRING_ber_, &General__Types::OCT9_raw_, &OCTETSTRING_text_, &FrequencyShortList__TV_frequencyShortListValue_xer_, &OCTETSTRING_json_, &FrequencyShortList__TV_frequencyShortListValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FrequencyShortList__TV_frequencyShortListValue_default_coding("RAW");
const TTCN_RAWdescriptor_t FrequencyShortList__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for FrequencyShortList__TV
const TTCN_Typedescriptor_t FrequencyShortList__TV_descr_ = { "@MobileL3_RRM_Types.FrequencyShortList_TV", NULL, &FrequencyShortList__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FrequencyShortList__TV_default_coding("RAW");
const XERdescriptor_t       GroupChannelDescription__TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int GroupChannelDescription__TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int GroupChannelDescription__TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t GroupChannelDescription__TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, GroupChannelDescription__TLV_elementIdentifier_oer_ext_arr_, 0, GroupChannelDescription__TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t GroupChannelDescription__TLV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.GroupChannelDescription_TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &GroupChannelDescription__TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &GroupChannelDescription__TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING GroupChannelDescription__TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t GroupChannelDescription__TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       GroupChannelDescription__TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t GroupChannelDescription__TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t GroupChannelDescription__TLV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.GroupChannelDescription_TLV.lengthIndicator", &INTEGER_ber_, &GroupChannelDescription__TLV_lengthIndicator_raw_, &INTEGER_text_, &GroupChannelDescription__TLV_lengthIndicator_xer_, &INTEGER_json_, &GroupChannelDescription__TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING GroupChannelDescription__TLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       GroupChannelDescription__TLV_tN_xer_ = { {"tN>\n", "tN>\n"}, {4, 4}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t GroupChannelDescription__TLV_tN_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t GroupChannelDescription__TLV_tN_descr_ = { "@MobileL3_RRM_Types.GroupChannelDescription_TLV.tN", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &GroupChannelDescription__TLV_tN_xer_, &BITSTRING_json_, &GroupChannelDescription__TLV_tN_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING GroupChannelDescription__TLV_tN_default_coding("RAW");
const XERdescriptor_t       GroupChannelDescription__TLV_channelType__tDMAoffset_xer_ = { {"channelType_tDMAoffset>\n", "channelType_tDMAoffset>\n"}, {24, 24}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t GroupChannelDescription__TLV_channelType__tDMAoffset_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t GroupChannelDescription__TLV_channelType__tDMAoffset_descr_ = { "@MobileL3_RRM_Types.GroupChannelDescription_TLV.channelType_tDMAoffset", &BITSTRING_ber_, &General__Types::BIT5_raw_, NULL, &GroupChannelDescription__TLV_channelType__tDMAoffset_xer_, &BITSTRING_json_, &GroupChannelDescription__TLV_channelType__tDMAoffset_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING GroupChannelDescription__TLV_channelType__tDMAoffset_default_coding("RAW");
const XERdescriptor_t       GroupChannelDescription__TLV_oct4__13_xer_ = { {"oct4_13>\n", "oct4_13>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int GroupChannelDescription__TLV_oct4__13_oer_ext_arr_[0] = {};
const int GroupChannelDescription__TLV_oct4__13_oer_p_[0] = {};
const TTCN_OERdescriptor_t GroupChannelDescription__TLV_oct4__13_oer_ = { -1, TRUE, -1, FALSE, 0, 0, GroupChannelDescription__TLV_oct4__13_oer_ext_arr_, 0, GroupChannelDescription__TLV_oct4__13_oer_p_};
const TTCN_Typedescriptor_t GroupChannelDescription__TLV_oct4__13_descr_ = { "@MobileL3_RRM_Types.GroupChannelDescription_TLV.oct4_13", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &GroupChannelDescription__TLV_oct4__13_xer_, &OCTETSTRING_json_, &GroupChannelDescription__TLV_oct4__13_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING GroupChannelDescription__TLV_oct4__13_default_coding("RAW");
const TTCN_RAWdescriptor_t GroupChannelDescription__TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for GroupChannelDescription__TLV
const TTCN_Typedescriptor_t GroupChannelDescription__TLV_descr_ = { "@MobileL3_RRM_Types.GroupChannelDescription_TLV", NULL, &GroupChannelDescription__TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING GroupChannelDescription__TLV_default_coding("RAW");
const TTCN_RAWdescriptor_t GPRS__BroadcastInformation__LV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       GPRS__BroadcastInformation__LV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t GPRS__BroadcastInformation__LV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t GPRS__BroadcastInformation__LV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.GPRS_BroadcastInformation_LV.lengthIndicator", &INTEGER_ber_, &GPRS__BroadcastInformation__LV_lengthIndicator_raw_, &INTEGER_text_, &GPRS__BroadcastInformation__LV_lengthIndicator_xer_, &INTEGER_json_, &GPRS__BroadcastInformation__LV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING GPRS__BroadcastInformation__LV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       GPRS__BroadcastInformation__LV_gPRS__BroadcastInformationValue_xer_ = { {"gPRS_BroadcastInformationValue>\n", "gPRS_BroadcastInformationValue>\n"}, {32, 32}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int GPRS__BroadcastInformation__LV_gPRS__BroadcastInformationValue_oer_ext_arr_[0] = {};
const int GPRS__BroadcastInformation__LV_gPRS__BroadcastInformationValue_oer_p_[0] = {};
const TTCN_OERdescriptor_t GPRS__BroadcastInformation__LV_gPRS__BroadcastInformationValue_oer_ = { -1, TRUE, -1, FALSE, 0, 0, GPRS__BroadcastInformation__LV_gPRS__BroadcastInformationValue_oer_ext_arr_, 0, GPRS__BroadcastInformation__LV_gPRS__BroadcastInformationValue_oer_p_};
const TTCN_Typedescriptor_t GPRS__BroadcastInformation__LV_gPRS__BroadcastInformationValue_descr_ = { "@MobileL3_RRM_Types.GPRS_BroadcastInformation_LV.gPRS_BroadcastInformationValue", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &GPRS__BroadcastInformation__LV_gPRS__BroadcastInformationValue_xer_, &OCTETSTRING_json_, &GPRS__BroadcastInformation__LV_gPRS__BroadcastInformationValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING GPRS__BroadcastInformation__LV_gPRS__BroadcastInformationValue_default_coding("RAW");
const TTCN_RAWdescriptor_t GPRS__BroadcastInformation__LV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for GPRS__BroadcastInformation__LV
const TTCN_Typedescriptor_t GPRS__BroadcastInformation__LV_descr_ = { "@MobileL3_RRM_Types.GPRS_BroadcastInformation_LV", NULL, &GPRS__BroadcastInformation__LV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING GPRS__BroadcastInformation__LV_default_coding("RAW");
const XERdescriptor_t       Enhanced__DTM__CS__Release__Indication_iND_xer_ = { {"iND>\n", "iND>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t Enhanced__DTM__CS__Release__Indication_iND_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t Enhanced__DTM__CS__Release__Indication_iND_descr_ = { "@MobileL3_RRM_Types.Enhanced_DTM_CS_Release_Indication.iND", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &Enhanced__DTM__CS__Release__Indication_iND_xer_, &BITSTRING_json_, &Enhanced__DTM__CS__Release__Indication_iND_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING Enhanced__DTM__CS__Release__Indication_iND_default_coding("RAW");
const XERdescriptor_t       Enhanced__DTM__CS__Release__Indication_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t Enhanced__DTM__CS__Release__Indication_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t Enhanced__DTM__CS__Release__Indication_spare_descr_ = { "@MobileL3_RRM_Types.Enhanced_DTM_CS_Release_Indication.spare", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &Enhanced__DTM__CS__Release__Indication_spare_xer_, &BITSTRING_json_, &Enhanced__DTM__CS__Release__Indication_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING Enhanced__DTM__CS__Release__Indication_spare_default_coding("RAW");
const XERdescriptor_t       Enhanced__DTM__CS__Release__Indication_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t Enhanced__DTM__CS__Release__Indication_elementIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t Enhanced__DTM__CS__Release__Indication_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.Enhanced_DTM_CS_Release_Indication.elementIdentifier", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &Enhanced__DTM__CS__Release__Indication_elementIdentifier_xer_, &BITSTRING_json_, &Enhanced__DTM__CS__Release__Indication_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING Enhanced__DTM__CS__Release__Indication_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t Enhanced__DTM__CS__Release__Indication_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for Enhanced__DTM__CS__Release__Indication
const TTCN_Typedescriptor_t Enhanced__DTM__CS__Release__Indication_descr_ = { "@MobileL3_RRM_Types.Enhanced_DTM_CS_Release_Indication", NULL, &Enhanced__DTM__CS__Release__Indication_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING Enhanced__DTM__CS__Release__Indication_default_coding("RAW");
const XERdescriptor_t       Group__Channel__Description__2__TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int Group__Channel__Description__2__TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int Group__Channel__Description__2__TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t Group__Channel__Description__2__TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, Group__Channel__Description__2__TLV_elementIdentifier_oer_ext_arr_, 0, Group__Channel__Description__2__TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t Group__Channel__Description__2__TLV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.Group_Channel_Description_2_TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &Group__Channel__Description__2__TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &Group__Channel__Description__2__TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING Group__Channel__Description__2__TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t Group__Channel__Description__2__TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       Group__Channel__Description__2__TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t Group__Channel__Description__2__TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t Group__Channel__Description__2__TLV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.Group_Channel_Description_2_TLV.lengthIndicator", &INTEGER_ber_, &Group__Channel__Description__2__TLV_lengthIndicator_raw_, &INTEGER_text_, &Group__Channel__Description__2__TLV_lengthIndicator_xer_, &INTEGER_json_, &Group__Channel__Description__2__TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING Group__Channel__Description__2__TLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       Group__Channel__Description__2__TLV_tN_xer_ = { {"tN>\n", "tN>\n"}, {4, 4}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t Group__Channel__Description__2__TLV_tN_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t Group__Channel__Description__2__TLV_tN_descr_ = { "@MobileL3_RRM_Types.Group_Channel_Description_2_TLV.tN", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &Group__Channel__Description__2__TLV_tN_xer_, &BITSTRING_json_, &Group__Channel__Description__2__TLV_tN_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING Group__Channel__Description__2__TLV_tN_default_coding("RAW");
const XERdescriptor_t       Group__Channel__Description__2__TLV_channelTypeandTDMAOffset_xer_ = { {"channelTypeandTDMAOffset>\n", "channelTypeandTDMAOffset>\n"}, {26, 26}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t Group__Channel__Description__2__TLV_channelTypeandTDMAOffset_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t Group__Channel__Description__2__TLV_channelTypeandTDMAOffset_descr_ = { "@MobileL3_RRM_Types.Group_Channel_Description_2_TLV.channelTypeandTDMAOffset", &BITSTRING_ber_, &General__Types::BIT5_raw_, NULL, &Group__Channel__Description__2__TLV_channelTypeandTDMAOffset_xer_, &BITSTRING_json_, &Group__Channel__Description__2__TLV_channelTypeandTDMAOffset_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING Group__Channel__Description__2__TLV_channelTypeandTDMAOffset_default_coding("RAW");
const TTCN_RAWdescriptor_t Group__Channel__Description__2__TLV_tSC_raw_ = {3,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,3,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       Group__Channel__Description__2__TLV_tSC_xer_ = { {"tSC>\n", "tSC>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t Group__Channel__Description__2__TLV_tSC_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t Group__Channel__Description__2__TLV_tSC_descr_ = { "@MobileL3_RRM_Types.Group_Channel_Description_2_TLV.tSC", &BITSTRING_ber_, &Group__Channel__Description__2__TLV_tSC_raw_, NULL, &Group__Channel__Description__2__TLV_tSC_xer_, &BITSTRING_json_, &Group__Channel__Description__2__TLV_tSC_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING Group__Channel__Description__2__TLV_tSC_default_coding("RAW");
const TTCN_RAWdescriptor_t Group__Channel__Description__2__TLV_spare_raw_ = {1,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       Group__Channel__Description__2__TLV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t Group__Channel__Description__2__TLV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t Group__Channel__Description__2__TLV_spare_descr_ = { "@MobileL3_RRM_Types.Group_Channel_Description_2_TLV.spare", &BITSTRING_ber_, &Group__Channel__Description__2__TLV_spare_raw_, NULL, &Group__Channel__Description__2__TLV_spare_xer_, &BITSTRING_json_, &Group__Channel__Description__2__TLV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING Group__Channel__Description__2__TLV_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t Group__Channel__Description__2__TLV_mAIO_raw_ = {6,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,6,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       Group__Channel__Description__2__TLV_mAIO_xer_ = { {"mAIO>\n", "mAIO>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t Group__Channel__Description__2__TLV_mAIO_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t Group__Channel__Description__2__TLV_mAIO_descr_ = { "@MobileL3_RRM_Types.Group_Channel_Description_2_TLV.mAIO", &BITSTRING_ber_, &Group__Channel__Description__2__TLV_mAIO_raw_, NULL, &Group__Channel__Description__2__TLV_mAIO_xer_, &BITSTRING_json_, &Group__Channel__Description__2__TLV_mAIO_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING Group__Channel__Description__2__TLV_mAIO_default_coding("RAW");
const TTCN_RAWdescriptor_t Group__Channel__Description__2__TLV_hSN_raw_ = {6,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,6,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       Group__Channel__Description__2__TLV_hSN_xer_ = { {"hSN>\n", "hSN>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t Group__Channel__Description__2__TLV_hSN_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t Group__Channel__Description__2__TLV_hSN_descr_ = { "@MobileL3_RRM_Types.Group_Channel_Description_2_TLV.hSN", &BITSTRING_ber_, &Group__Channel__Description__2__TLV_hSN_raw_, NULL, &Group__Channel__Description__2__TLV_hSN_xer_, &BITSTRING_json_, &Group__Channel__Description__2__TLV_hSN_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING Group__Channel__Description__2__TLV_hSN_default_coding("RAW");
const TTCN_RAWdescriptor_t Group__Channel__Description__2__TLV_frequencyShortList_raw_ = {64,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,8,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       Group__Channel__Description__2__TLV_frequencyShortList_xer_ = { {"frequencyShortList>\n", "frequencyShortList>\n"}, {20, 20}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int Group__Channel__Description__2__TLV_frequencyShortList_oer_ext_arr_[0] = {};
const int Group__Channel__Description__2__TLV_frequencyShortList_oer_p_[0] = {};
const TTCN_OERdescriptor_t Group__Channel__Description__2__TLV_frequencyShortList_oer_ = { -1, TRUE, 8, FALSE, 0, 0, Group__Channel__Description__2__TLV_frequencyShortList_oer_ext_arr_, 0, Group__Channel__Description__2__TLV_frequencyShortList_oer_p_};
const TTCN_Typedescriptor_t Group__Channel__Description__2__TLV_frequencyShortList_descr_ = { "@MobileL3_RRM_Types.Group_Channel_Description_2_TLV.frequencyShortList", &OCTETSTRING_ber_, &Group__Channel__Description__2__TLV_frequencyShortList_raw_, &OCTETSTRING_text_, &Group__Channel__Description__2__TLV_frequencyShortList_xer_, &OCTETSTRING_json_, &Group__Channel__Description__2__TLV_frequencyShortList_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING Group__Channel__Description__2__TLV_frequencyShortList_default_coding("RAW");
const TTCN_RAWdescriptor_t Group__Channel__Description__2__TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for Group__Channel__Description__2__TLV
const TTCN_Typedescriptor_t Group__Channel__Description__2__TLV_descr_ = { "@MobileL3_RRM_Types.Group_Channel_Description_2_TLV", NULL, &Group__Channel__Description__2__TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING Group__Channel__Description__2__TLV_default_coding("RAW");
const XERdescriptor_t       HandoverReference__V_handoverReferenceValue_xer_ = { {"handoverReferenceValue>\n", "handoverReferenceValue>\n"}, {24, 24}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int HandoverReference__V_handoverReferenceValue_oer_ext_arr_[0] = {};
const int HandoverReference__V_handoverReferenceValue_oer_p_[0] = {};
const TTCN_OERdescriptor_t HandoverReference__V_handoverReferenceValue_oer_ = { -1, TRUE, 1, FALSE, 0, 0, HandoverReference__V_handoverReferenceValue_oer_ext_arr_, 0, HandoverReference__V_handoverReferenceValue_oer_p_};
const TTCN_Typedescriptor_t HandoverReference__V_handoverReferenceValue_descr_ = { "@MobileL3_RRM_Types.HandoverReference_V.handoverReferenceValue", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &HandoverReference__V_handoverReferenceValue_xer_, &OCTETSTRING_json_, &HandoverReference__V_handoverReferenceValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING HandoverReference__V_handoverReferenceValue_default_coding("RAW");
const TTCN_RAWdescriptor_t HandoverReference__V_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for HandoverReference__V
const TTCN_Typedescriptor_t HandoverReference__V_descr_ = { "@MobileL3_RRM_Types.HandoverReference_V", NULL, &HandoverReference__V_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING HandoverReference__V_default_coding("RAW");
const TTCN_Typedescriptor_t& MobileAllocation__TLV_descr_ = MobileL3__CommonIE__Types::Type4__TLV_descr_;
UNIVERSAL_CHARSTRING MobileAllocation__TLV_default_coding("RAW");
const TTCN_Typedescriptor_t& MobileAllocation__LV_descr_ = MobileL3__CommonIE__Types::Type4__LV_descr_;
UNIVERSAL_CHARSTRING MobileAllocation__LV_default_coding("RAW");
const XERdescriptor_t       MobileTimeDifference__TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int MobileTimeDifference__TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int MobileTimeDifference__TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t MobileTimeDifference__TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, MobileTimeDifference__TLV_elementIdentifier_oer_ext_arr_, 0, MobileTimeDifference__TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t MobileTimeDifference__TLV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.MobileTimeDifference_TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &MobileTimeDifference__TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &MobileTimeDifference__TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MobileTimeDifference__TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t MobileTimeDifference__TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MobileTimeDifference__TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MobileTimeDifference__TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MobileTimeDifference__TLV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.MobileTimeDifference_TLV.lengthIndicator", &INTEGER_ber_, &MobileTimeDifference__TLV_lengthIndicator_raw_, &INTEGER_text_, &MobileTimeDifference__TLV_lengthIndicator_xer_, &INTEGER_json_, &MobileTimeDifference__TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MobileTimeDifference__TLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       MobileTimeDifference__TLV_mobileTimeDifferenceAndSpare_xer_ = { {"mobileTimeDifferenceAndSpare>\n", "mobileTimeDifferenceAndSpare>\n"}, {30, 30}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int MobileTimeDifference__TLV_mobileTimeDifferenceAndSpare_oer_ext_arr_[0] = {};
const int MobileTimeDifference__TLV_mobileTimeDifferenceAndSpare_oer_p_[0] = {};
const TTCN_OERdescriptor_t MobileTimeDifference__TLV_mobileTimeDifferenceAndSpare_oer_ = { -1, TRUE, 3, FALSE, 0, 0, MobileTimeDifference__TLV_mobileTimeDifferenceAndSpare_oer_ext_arr_, 0, MobileTimeDifference__TLV_mobileTimeDifferenceAndSpare_oer_p_};
const TTCN_Typedescriptor_t MobileTimeDifference__TLV_mobileTimeDifferenceAndSpare_descr_ = { "@MobileL3_RRM_Types.MobileTimeDifference_TLV.mobileTimeDifferenceAndSpare", &OCTETSTRING_ber_, &General__Types::OCT3_raw_, &OCTETSTRING_text_, &MobileTimeDifference__TLV_mobileTimeDifferenceAndSpare_xer_, &OCTETSTRING_json_, &MobileTimeDifference__TLV_mobileTimeDifferenceAndSpare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MobileTimeDifference__TLV_mobileTimeDifferenceAndSpare_default_coding("RAW");
const TTCN_RAWdescriptor_t MobileTimeDifference__TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MobileTimeDifference__TLV
const TTCN_Typedescriptor_t MobileTimeDifference__TLV_descr_ = { "@MobileL3_RRM_Types.MobileTimeDifference_TLV", NULL, &MobileTimeDifference__TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MobileTimeDifference__TLV_default_coding("RAW");
const XERdescriptor_t       RRM__OCT1__5_xer_ = { {"RRM_OCT1_5>\n", "RRM_OCT1_5>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RRM__OCT1__5_oer_ext_arr_[0] = {};
const int RRM__OCT1__5_oer_p_[0] = {};
const TTCN_OERdescriptor_t RRM__OCT1__5_oer_ = { -1, TRUE, -1, FALSE, 0, 0, RRM__OCT1__5_oer_ext_arr_, 0, RRM__OCT1__5_oer_p_};
const TTCN_Typedescriptor_t RRM__OCT1__5_descr_ = { "@MobileL3_RRM_Types.RRM_OCT1_5", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &RRM__OCT1__5_xer_, &OCTETSTRING_json_, &RRM__OCT1__5_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RRM__OCT1__5_default_coding("RAW");
const XERdescriptor_t       MultiRateConfiguration__TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int MultiRateConfiguration__TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int MultiRateConfiguration__TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t MultiRateConfiguration__TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, MultiRateConfiguration__TLV_elementIdentifier_oer_ext_arr_, 0, MultiRateConfiguration__TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t MultiRateConfiguration__TLV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.MultiRateConfiguration_TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &MultiRateConfiguration__TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &MultiRateConfiguration__TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultiRateConfiguration__TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t MultiRateConfiguration__TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MultiRateConfiguration__TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultiRateConfiguration__TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultiRateConfiguration__TLV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.MultiRateConfiguration_TLV.lengthIndicator", &INTEGER_ber_, &MultiRateConfiguration__TLV_lengthIndicator_raw_, &INTEGER_text_, &MultiRateConfiguration__TLV_lengthIndicator_xer_, &INTEGER_json_, &MultiRateConfiguration__TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultiRateConfiguration__TLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       MultiRateConfiguration__TLV_startMode_xer_ = { {"startMode>\n", "startMode>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultiRateConfiguration__TLV_startMode_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultiRateConfiguration__TLV_startMode_descr_ = { "@MobileL3_RRM_Types.MultiRateConfiguration_TLV.startMode", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &MultiRateConfiguration__TLV_startMode_xer_, &BITSTRING_json_, &MultiRateConfiguration__TLV_startMode_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultiRateConfiguration__TLV_startMode_default_coding("RAW");
const XERdescriptor_t       MultiRateConfiguration__TLV_spare3__1_xer_ = { {"spare3_1>\n", "spare3_1>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultiRateConfiguration__TLV_spare3__1_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultiRateConfiguration__TLV_spare3__1_descr_ = { "@MobileL3_RRM_Types.MultiRateConfiguration_TLV.spare3_1", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &MultiRateConfiguration__TLV_spare3__1_xer_, &BITSTRING_json_, &MultiRateConfiguration__TLV_spare3__1_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultiRateConfiguration__TLV_spare3__1_default_coding("RAW");
const XERdescriptor_t       MultiRateConfiguration__TLV_iCMI_xer_ = { {"iCMI>\n", "iCMI>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultiRateConfiguration__TLV_iCMI_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultiRateConfiguration__TLV_iCMI_descr_ = { "@MobileL3_RRM_Types.MultiRateConfiguration_TLV.iCMI", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &MultiRateConfiguration__TLV_iCMI_xer_, &BITSTRING_json_, &MultiRateConfiguration__TLV_iCMI_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultiRateConfiguration__TLV_iCMI_default_coding("RAW");
const XERdescriptor_t       MultiRateConfiguration__TLV_nSCB_xer_ = { {"nSCB>\n", "nSCB>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultiRateConfiguration__TLV_nSCB_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultiRateConfiguration__TLV_nSCB_descr_ = { "@MobileL3_RRM_Types.MultiRateConfiguration_TLV.nSCB", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &MultiRateConfiguration__TLV_nSCB_xer_, &BITSTRING_json_, &MultiRateConfiguration__TLV_nSCB_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultiRateConfiguration__TLV_nSCB_default_coding("RAW");
const XERdescriptor_t       MultiRateConfiguration__TLV_multirateSpeechVersion_xer_ = { {"multirateSpeechVersion>\n", "multirateSpeechVersion>\n"}, {24, 24}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultiRateConfiguration__TLV_multirateSpeechVersion_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultiRateConfiguration__TLV_multirateSpeechVersion_descr_ = { "@MobileL3_RRM_Types.MultiRateConfiguration_TLV.multirateSpeechVersion", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &MultiRateConfiguration__TLV_multirateSpeechVersion_xer_, &BITSTRING_json_, &MultiRateConfiguration__TLV_multirateSpeechVersion_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultiRateConfiguration__TLV_multirateSpeechVersion_default_coding("RAW");
const XERdescriptor_t       MultiRateConfiguration__TLV_params_xer_ = { {"params>\n", "params>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int MultiRateConfiguration__TLV_params_oer_ext_arr_[0] = {};
const int MultiRateConfiguration__TLV_params_oer_p_[0] = {};
const TTCN_OERdescriptor_t MultiRateConfiguration__TLV_params_oer_ = { -1, TRUE, -1, FALSE, 0, 0, MultiRateConfiguration__TLV_params_oer_ext_arr_, 0, MultiRateConfiguration__TLV_params_oer_p_};
const TTCN_Typedescriptor_t MultiRateConfiguration__TLV_params_descr_ = { "@MobileL3_RRM_Types.MultiRateConfiguration_TLV.params", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &MultiRateConfiguration__TLV_params_xer_, &OCTETSTRING_json_, &MultiRateConfiguration__TLV_params_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultiRateConfiguration__TLV_params_default_coding("RAW");
const TTCN_RAWdescriptor_t MultiRateConfiguration__TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MultiRateConfiguration__TLV
const TTCN_Typedescriptor_t MultiRateConfiguration__TLV_descr_ = { "@MobileL3_RRM_Types.MultiRateConfiguration_TLV", NULL, &MultiRateConfiguration__TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultiRateConfiguration__TLV_default_coding("RAW");
const XERdescriptor_t       MultislotAllocation__octet3__11_dA1__7_xer_ = { {"dA1_7>\n", "dA1_7>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultislotAllocation__octet3__11_dA1__7_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultislotAllocation__octet3__11_dA1__7_descr_ = { "@MobileL3_RRM_Types.MultislotAllocation_octet3_11.dA1_7", &BITSTRING_ber_, &General__Types::BIT7_raw_, NULL, &MultislotAllocation__octet3__11_dA1__7_xer_, &BITSTRING_json_, &MultislotAllocation__octet3__11_dA1__7_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotAllocation__octet3__11_dA1__7_default_coding("RAW");
const XERdescriptor_t       MultislotAllocation__octet3__11_ext1_xer_ = { {"ext1>\n", "ext1>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultislotAllocation__octet3__11_ext1_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultislotAllocation__octet3__11_ext1_descr_ = { "@MobileL3_RRM_Types.MultislotAllocation_octet3_11.ext1", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &MultislotAllocation__octet3__11_ext1_xer_, &BITSTRING_json_, &MultislotAllocation__octet3__11_ext1_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotAllocation__octet3__11_ext1_default_coding("RAW");
const XERdescriptor_t       MultislotAllocation__octet3__11_uA1__7_xer_ = { {"uA1_7>\n", "uA1_7>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultislotAllocation__octet3__11_uA1__7_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultislotAllocation__octet3__11_uA1__7_descr_ = { "@MobileL3_RRM_Types.MultislotAllocation_octet3_11.uA1_7", &BITSTRING_ber_, &General__Types::BIT7_raw_, NULL, &MultislotAllocation__octet3__11_uA1__7_xer_, &BITSTRING_json_, &MultislotAllocation__octet3__11_uA1__7_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotAllocation__octet3__11_uA1__7_default_coding("RAW");
const XERdescriptor_t       MultislotAllocation__octet3__11_ext2_xer_ = { {"ext2>\n", "ext2>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultislotAllocation__octet3__11_ext2_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultislotAllocation__octet3__11_ext2_descr_ = { "@MobileL3_RRM_Types.MultislotAllocation_octet3_11.ext2", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &MultislotAllocation__octet3__11_ext2_xer_, &BITSTRING_json_, &MultislotAllocation__octet3__11_ext2_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotAllocation__octet3__11_ext2_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotAllocation__octet3__11_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_YES,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MultislotAllocation__octet3__11
const TTCN_Typedescriptor_t MultislotAllocation__octet3__11_descr_ = { "@MobileL3_RRM_Types.MultislotAllocation_octet3_11", NULL, &MultislotAllocation__octet3__11_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const XERdescriptor_t       MultislotAllocation__octet3__11_channelset_xer_ = { {"channelset>\n", "channelset>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int MultislotAllocation__octet3__11_channelset_oer_ext_arr_[0] = {};
const int MultislotAllocation__octet3__11_channelset_oer_p_[0] = {};
const TTCN_OERdescriptor_t MultislotAllocation__octet3__11_channelset_oer_ = { -1, TRUE, -1, FALSE, 0, 0, MultislotAllocation__octet3__11_channelset_oer_ext_arr_, 0, MultislotAllocation__octet3__11_channelset_oer_p_};
const TTCN_Typedescriptor_t MultislotAllocation__octet3__11_channelset_descr_ = { "@MobileL3_RRM_Types.MultislotAllocation_octet3_11.channelset", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &MultislotAllocation__octet3__11_channelset_xer_, &OCTETSTRING_json_, &MultislotAllocation__octet3__11_channelset_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotAllocation__octet3__11_channelset_default_coding("RAW");
UNIVERSAL_CHARSTRING MultislotAllocation__octet3__11_default_coding("RAW");
const XERdescriptor_t       MultislotAllocation__TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int MultislotAllocation__TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int MultislotAllocation__TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t MultislotAllocation__TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, MultislotAllocation__TLV_elementIdentifier_oer_ext_arr_, 0, MultislotAllocation__TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t MultislotAllocation__TLV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.MultislotAllocation_TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &MultislotAllocation__TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &MultislotAllocation__TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotAllocation__TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotAllocation__TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MultislotAllocation__TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultislotAllocation__TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultislotAllocation__TLV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.MultislotAllocation_TLV.lengthIndicator", &INTEGER_ber_, &MultislotAllocation__TLV_lengthIndicator_raw_, &INTEGER_text_, &MultislotAllocation__TLV_lengthIndicator_xer_, &INTEGER_json_, &MultislotAllocation__TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotAllocation__TLV_lengthIndicator_default_coding("RAW");
UNIVERSAL_CHARSTRING MultislotAllocation__TLV_octet3__11_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotAllocation__TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MultislotAllocation__TLV
const TTCN_Typedescriptor_t MultislotAllocation__TLV_descr_ = { "@MobileL3_RRM_Types.MultislotAllocation_TLV", NULL, &MultislotAllocation__TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotAllocation__TLV_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotAllocation__LV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MultislotAllocation__LV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MultislotAllocation__LV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MultislotAllocation__LV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.MultislotAllocation_LV.lengthIndicator", &INTEGER_ber_, &MultislotAllocation__LV_lengthIndicator_raw_, &INTEGER_text_, &MultislotAllocation__LV_lengthIndicator_xer_, &INTEGER_json_, &MultislotAllocation__LV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotAllocation__LV_lengthIndicator_default_coding("RAW");
UNIVERSAL_CHARSTRING MultislotAllocation__LV_octet3__11_default_coding("RAW");
const TTCN_RAWdescriptor_t MultislotAllocation__LV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MultislotAllocation__LV
const TTCN_Typedescriptor_t MultislotAllocation__LV_descr_ = { "@MobileL3_RRM_Types.MultislotAllocation_LV", NULL, &MultislotAllocation__LV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MultislotAllocation__LV_default_coding("RAW");
const XERdescriptor_t       MobileTimeDifferenceHyperframe__TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int MobileTimeDifferenceHyperframe__TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int MobileTimeDifferenceHyperframe__TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t MobileTimeDifferenceHyperframe__TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, MobileTimeDifferenceHyperframe__TLV_elementIdentifier_oer_ext_arr_, 0, MobileTimeDifferenceHyperframe__TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t MobileTimeDifferenceHyperframe__TLV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.MobileTimeDifferenceHyperframe_TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &MobileTimeDifferenceHyperframe__TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &MobileTimeDifferenceHyperframe__TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MobileTimeDifferenceHyperframe__TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t MobileTimeDifferenceHyperframe__TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MobileTimeDifferenceHyperframe__TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MobileTimeDifferenceHyperframe__TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MobileTimeDifferenceHyperframe__TLV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.MobileTimeDifferenceHyperframe_TLV.lengthIndicator", &INTEGER_ber_, &MobileTimeDifferenceHyperframe__TLV_lengthIndicator_raw_, &INTEGER_text_, &MobileTimeDifferenceHyperframe__TLV_lengthIndicator_xer_, &INTEGER_json_, &MobileTimeDifferenceHyperframe__TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MobileTimeDifferenceHyperframe__TLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       MobileTimeDifferenceHyperframe__TLV_MTDHValueAndSpare_xer_ = { {"MTDHValueAndSpare>\n", "MTDHValueAndSpare>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int MobileTimeDifferenceHyperframe__TLV_MTDHValueAndSpare_oer_ext_arr_[0] = {};
const int MobileTimeDifferenceHyperframe__TLV_MTDHValueAndSpare_oer_p_[0] = {};
const TTCN_OERdescriptor_t MobileTimeDifferenceHyperframe__TLV_MTDHValueAndSpare_oer_ = { -1, TRUE, 5, FALSE, 0, 0, MobileTimeDifferenceHyperframe__TLV_MTDHValueAndSpare_oer_ext_arr_, 0, MobileTimeDifferenceHyperframe__TLV_MTDHValueAndSpare_oer_p_};
const TTCN_Typedescriptor_t MobileTimeDifferenceHyperframe__TLV_MTDHValueAndSpare_descr_ = { "@MobileL3_RRM_Types.MobileTimeDifferenceHyperframe_TLV.MTDHValueAndSpare", &OCTETSTRING_ber_, &General__Types::OCT5_raw_, &OCTETSTRING_text_, &MobileTimeDifferenceHyperframe__TLV_MTDHValueAndSpare_xer_, &OCTETSTRING_json_, &MobileTimeDifferenceHyperframe__TLV_MTDHValueAndSpare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MobileTimeDifferenceHyperframe__TLV_MTDHValueAndSpare_default_coding("RAW");
const TTCN_RAWdescriptor_t MobileTimeDifferenceHyperframe__TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MobileTimeDifferenceHyperframe__TLV
const TTCN_Typedescriptor_t MobileTimeDifferenceHyperframe__TLV_descr_ = { "@MobileL3_RRM_Types.MobileTimeDifferenceHyperframe_TLV", NULL, &MobileTimeDifferenceHyperframe__TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MobileTimeDifferenceHyperframe__TLV_default_coding("RAW");
const XERdescriptor_t       P1RestOctets_xer_ = { {"P1RestOctets>\n", "P1RestOctets>\n"}, {14, 14}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int P1RestOctets_oer_ext_arr_[0] = {};
const int P1RestOctets_oer_p_[0] = {};
const TTCN_OERdescriptor_t P1RestOctets_oer_ = { -1, TRUE, -1, FALSE, 0, 0, P1RestOctets_oer_ext_arr_, 0, P1RestOctets_oer_p_};
const TTCN_Typedescriptor_t P1RestOctets_descr_ = { "@MobileL3_RRM_Types.P1RestOctets", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &P1RestOctets_xer_, &OCTETSTRING_json_, &P1RestOctets_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING P1RestOctets_default_coding("RAW");
const XERdescriptor_t       P2RestOctets_xer_ = { {"P2RestOctets>\n", "P2RestOctets>\n"}, {14, 14}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int P2RestOctets_oer_ext_arr_[0] = {};
const int P2RestOctets_oer_p_[0] = {};
const TTCN_OERdescriptor_t P2RestOctets_oer_ = { -1, TRUE, -1, FALSE, 0, 0, P2RestOctets_oer_ext_arr_, 0, P2RestOctets_oer_p_};
const TTCN_Typedescriptor_t P2RestOctets_descr_ = { "@MobileL3_RRM_Types.P2RestOctets", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &P2RestOctets_xer_, &OCTETSTRING_json_, &P2RestOctets_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING P2RestOctets_default_coding("RAW");
const XERdescriptor_t       P3RestOctets_xer_ = { {"P3RestOctets>\n", "P3RestOctets>\n"}, {14, 14}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int P3RestOctets_oer_ext_arr_[0] = {};
const int P3RestOctets_oer_p_[0] = {};
const TTCN_OERdescriptor_t P3RestOctets_oer_ = { -1, TRUE, 3, FALSE, 0, 0, P3RestOctets_oer_ext_arr_, 0, P3RestOctets_oer_p_};
const TTCN_Typedescriptor_t P3RestOctets_descr_ = { "@MobileL3_RRM_Types.P3RestOctets", &OCTETSTRING_ber_, &General__Types::OCT3_raw_, &OCTETSTRING_text_, &P3RestOctets_xer_, &OCTETSTRING_json_, &P3RestOctets_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING P3RestOctets_default_coding("RAW");
const XERdescriptor_t       DedicatedModeOrTBF__V_tMA__dL__tD_xer_ = { {"tMA_dL_tD>\n", "tMA_dL_tD>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t DedicatedModeOrTBF__V_tMA__dL__tD_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t DedicatedModeOrTBF__V_tMA__dL__tD_descr_ = { "@MobileL3_RRM_Types.DedicatedModeOrTBF_V.tMA_dL_tD", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &DedicatedModeOrTBF__V_tMA__dL__tD_xer_, &BITSTRING_json_, &DedicatedModeOrTBF__V_tMA__dL__tD_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DedicatedModeOrTBF__V_tMA__dL__tD_default_coding("RAW");
const XERdescriptor_t       DedicatedModeOrTBF__V_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t DedicatedModeOrTBF__V_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t DedicatedModeOrTBF__V_spare_descr_ = { "@MobileL3_RRM_Types.DedicatedModeOrTBF_V.spare", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &DedicatedModeOrTBF__V_spare_xer_, &BITSTRING_json_, &DedicatedModeOrTBF__V_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DedicatedModeOrTBF__V_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t DedicatedModeOrTBF__V_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for DedicatedModeOrTBF__V
const TTCN_Typedescriptor_t DedicatedModeOrTBF__V_descr_ = { "@MobileL3_RRM_Types.DedicatedModeOrTBF_V", NULL, &DedicatedModeOrTBF__V_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DedicatedModeOrTBF__V_default_coding("RAW");
const XERdescriptor_t       RR__PacketUplinkAssignment__TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RR__PacketUplinkAssignment__TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int RR__PacketUplinkAssignment__TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t RR__PacketUplinkAssignment__TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, RR__PacketUplinkAssignment__TLV_elementIdentifier_oer_ext_arr_, 0, RR__PacketUplinkAssignment__TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t RR__PacketUplinkAssignment__TLV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.RR_PacketUplinkAssignment_TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &RR__PacketUplinkAssignment__TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &RR__PacketUplinkAssignment__TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RR__PacketUplinkAssignment__TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t RR__PacketUplinkAssignment__TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       RR__PacketUplinkAssignment__TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RR__PacketUplinkAssignment__TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RR__PacketUplinkAssignment__TLV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.RR_PacketUplinkAssignment_TLV.lengthIndicator", &INTEGER_ber_, &RR__PacketUplinkAssignment__TLV_lengthIndicator_raw_, &INTEGER_text_, &RR__PacketUplinkAssignment__TLV_lengthIndicator_xer_, &INTEGER_json_, &RR__PacketUplinkAssignment__TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RR__PacketUplinkAssignment__TLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       RR__PacketUplinkAssignment__TLV_rR__PacketUplinkAssignment_xer_ = { {"rR_PacketUplinkAssignment>\n", "rR_PacketUplinkAssignment>\n"}, {27, 27}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RR__PacketUplinkAssignment__TLV_rR__PacketUplinkAssignment_oer_ext_arr_[0] = {};
const int RR__PacketUplinkAssignment__TLV_rR__PacketUplinkAssignment_oer_p_[0] = {};
const TTCN_OERdescriptor_t RR__PacketUplinkAssignment__TLV_rR__PacketUplinkAssignment_oer_ = { -1, TRUE, -1, FALSE, 0, 0, RR__PacketUplinkAssignment__TLV_rR__PacketUplinkAssignment_oer_ext_arr_, 0, RR__PacketUplinkAssignment__TLV_rR__PacketUplinkAssignment_oer_p_};
const TTCN_Typedescriptor_t RR__PacketUplinkAssignment__TLV_rR__PacketUplinkAssignment_descr_ = { "@MobileL3_RRM_Types.RR_PacketUplinkAssignment_TLV.rR_PacketUplinkAssignment", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &RR__PacketUplinkAssignment__TLV_rR__PacketUplinkAssignment_xer_, &OCTETSTRING_json_, &RR__PacketUplinkAssignment__TLV_rR__PacketUplinkAssignment_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RR__PacketUplinkAssignment__TLV_rR__PacketUplinkAssignment_default_coding("RAW");
const TTCN_RAWdescriptor_t RR__PacketUplinkAssignment__TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for RR__PacketUplinkAssignment__TLV
const TTCN_Typedescriptor_t RR__PacketUplinkAssignment__TLV_descr_ = { "@MobileL3_RRM_Types.RR_PacketUplinkAssignment_TLV", NULL, &RR__PacketUplinkAssignment__TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RR__PacketUplinkAssignment__TLV_default_coding("RAW");
const XERdescriptor_t       RR__PacketDownlinkAssignment__TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RR__PacketDownlinkAssignment__TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int RR__PacketDownlinkAssignment__TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t RR__PacketDownlinkAssignment__TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, RR__PacketDownlinkAssignment__TLV_elementIdentifier_oer_ext_arr_, 0, RR__PacketDownlinkAssignment__TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t RR__PacketDownlinkAssignment__TLV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.RR_PacketDownlinkAssignment_TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &RR__PacketDownlinkAssignment__TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &RR__PacketDownlinkAssignment__TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RR__PacketDownlinkAssignment__TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t RR__PacketDownlinkAssignment__TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       RR__PacketDownlinkAssignment__TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RR__PacketDownlinkAssignment__TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RR__PacketDownlinkAssignment__TLV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.RR_PacketDownlinkAssignment_TLV.lengthIndicator", &INTEGER_ber_, &RR__PacketDownlinkAssignment__TLV_lengthIndicator_raw_, &INTEGER_text_, &RR__PacketDownlinkAssignment__TLV_lengthIndicator_xer_, &INTEGER_json_, &RR__PacketDownlinkAssignment__TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RR__PacketDownlinkAssignment__TLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       RR__PacketDownlinkAssignment__TLV_rR__PacketDownlinkAssignment_xer_ = { {"rR_PacketDownlinkAssignment>\n", "rR_PacketDownlinkAssignment>\n"}, {29, 29}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RR__PacketDownlinkAssignment__TLV_rR__PacketDownlinkAssignment_oer_ext_arr_[0] = {};
const int RR__PacketDownlinkAssignment__TLV_rR__PacketDownlinkAssignment_oer_p_[0] = {};
const TTCN_OERdescriptor_t RR__PacketDownlinkAssignment__TLV_rR__PacketDownlinkAssignment_oer_ = { -1, TRUE, -1, FALSE, 0, 0, RR__PacketDownlinkAssignment__TLV_rR__PacketDownlinkAssignment_oer_ext_arr_, 0, RR__PacketDownlinkAssignment__TLV_rR__PacketDownlinkAssignment_oer_p_};
const TTCN_Typedescriptor_t RR__PacketDownlinkAssignment__TLV_rR__PacketDownlinkAssignment_descr_ = { "@MobileL3_RRM_Types.RR_PacketDownlinkAssignment_TLV.rR_PacketDownlinkAssignment", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &RR__PacketDownlinkAssignment__TLV_rR__PacketDownlinkAssignment_xer_, &OCTETSTRING_json_, &RR__PacketDownlinkAssignment__TLV_rR__PacketDownlinkAssignment_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RR__PacketDownlinkAssignment__TLV_rR__PacketDownlinkAssignment_default_coding("RAW");
const TTCN_RAWdescriptor_t RR__PacketDownlinkAssignment__TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for RR__PacketDownlinkAssignment__TLV
const TTCN_Typedescriptor_t RR__PacketDownlinkAssignment__TLV_descr_ = { "@MobileL3_RRM_Types.RR_PacketDownlinkAssignment_TLV", NULL, &RR__PacketDownlinkAssignment__TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RR__PacketDownlinkAssignment__TLV_default_coding("RAW");
const XERdescriptor_t       RR__DualCarrierPacketDownlinkAssignment__TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RR__DualCarrierPacketDownlinkAssignment__TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int RR__DualCarrierPacketDownlinkAssignment__TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t RR__DualCarrierPacketDownlinkAssignment__TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, RR__DualCarrierPacketDownlinkAssignment__TLV_elementIdentifier_oer_ext_arr_, 0, RR__DualCarrierPacketDownlinkAssignment__TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t RR__DualCarrierPacketDownlinkAssignment__TLV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.RR_DualCarrierPacketDownlinkAssignment_TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &RR__DualCarrierPacketDownlinkAssignment__TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &RR__DualCarrierPacketDownlinkAssignment__TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RR__DualCarrierPacketDownlinkAssignment__TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t RR__DualCarrierPacketDownlinkAssignment__TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       RR__DualCarrierPacketDownlinkAssignment__TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RR__DualCarrierPacketDownlinkAssignment__TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RR__DualCarrierPacketDownlinkAssignment__TLV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.RR_DualCarrierPacketDownlinkAssignment_TLV.lengthIndicator", &INTEGER_ber_, &RR__DualCarrierPacketDownlinkAssignment__TLV_lengthIndicator_raw_, &INTEGER_text_, &RR__DualCarrierPacketDownlinkAssignment__TLV_lengthIndicator_xer_, &INTEGER_json_, &RR__DualCarrierPacketDownlinkAssignment__TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RR__DualCarrierPacketDownlinkAssignment__TLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       RR__DualCarrierPacketDownlinkAssignment__TLV_rR__DualCarrierPacketDownlinkAssignment_xer_ = { {"rR_DualCarrierPacketDownlinkAssignment>\n", "rR_DualCarrierPacketDownlinkAssignment>\n"}, {40, 40}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RR__DualCarrierPacketDownlinkAssignment__TLV_rR__DualCarrierPacketDownlinkAssignment_oer_ext_arr_[0] = {};
const int RR__DualCarrierPacketDownlinkAssignment__TLV_rR__DualCarrierPacketDownlinkAssignment_oer_p_[0] = {};
const TTCN_OERdescriptor_t RR__DualCarrierPacketDownlinkAssignment__TLV_rR__DualCarrierPacketDownlinkAssignment_oer_ = { -1, TRUE, -1, FALSE, 0, 0, RR__DualCarrierPacketDownlinkAssignment__TLV_rR__DualCarrierPacketDownlinkAssignment_oer_ext_arr_, 0, RR__DualCarrierPacketDownlinkAssignment__TLV_rR__DualCarrierPacketDownlinkAssignment_oer_p_};
const TTCN_Typedescriptor_t RR__DualCarrierPacketDownlinkAssignment__TLV_rR__DualCarrierPacketDownlinkAssignment_descr_ = { "@MobileL3_RRM_Types.RR_DualCarrierPacketDownlinkAssignment_TLV.rR_DualCarrierPacketDownlinkAssignment", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &RR__DualCarrierPacketDownlinkAssignment__TLV_rR__DualCarrierPacketDownlinkAssignment_xer_, &OCTETSTRING_json_, &RR__DualCarrierPacketDownlinkAssignment__TLV_rR__DualCarrierPacketDownlinkAssignment_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RR__DualCarrierPacketDownlinkAssignment__TLV_rR__DualCarrierPacketDownlinkAssignment_default_coding("RAW");
const TTCN_RAWdescriptor_t RR__DualCarrierPacketDownlinkAssignment__TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for RR__DualCarrierPacketDownlinkAssignment__TLV
const TTCN_Typedescriptor_t RR__DualCarrierPacketDownlinkAssignment__TLV_descr_ = { "@MobileL3_RRM_Types.RR_DualCarrierPacketDownlinkAssignment_TLV", NULL, &RR__DualCarrierPacketDownlinkAssignment__TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RR__DualCarrierPacketDownlinkAssignment__TLV_default_coding("RAW");
const XERdescriptor_t       PageMode__TV_pM_xer_ = { {"pM>\n", "pM>\n"}, {4, 4}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PageMode__TV_pM_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PageMode__TV_pM_descr_ = { "@MobileL3_RRM_Types.PageMode_TV.pM", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &PageMode__TV_pM_xer_, &BITSTRING_json_, &PageMode__TV_pM_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PageMode__TV_pM_default_coding("RAW");
const XERdescriptor_t       PageMode__TV_spare1__2_xer_ = { {"spare1_2>\n", "spare1_2>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PageMode__TV_spare1__2_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PageMode__TV_spare1__2_descr_ = { "@MobileL3_RRM_Types.PageMode_TV.spare1_2", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &PageMode__TV_spare1__2_xer_, &BITSTRING_json_, &PageMode__TV_spare1__2_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PageMode__TV_spare1__2_default_coding("RAW");
const XERdescriptor_t       PageMode__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PageMode__TV_elementIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PageMode__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.PageMode_TV.elementIdentifier", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &PageMode__TV_elementIdentifier_xer_, &BITSTRING_json_, &PageMode__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PageMode__TV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t PageMode__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PageMode__TV
const TTCN_Typedescriptor_t PageMode__TV_descr_ = { "@MobileL3_RRM_Types.PageMode_TV", NULL, &PageMode__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PageMode__TV_default_coding("RAW");
const XERdescriptor_t       PageMode__V_pM_xer_ = { {"pM>\n", "pM>\n"}, {4, 4}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PageMode__V_pM_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PageMode__V_pM_descr_ = { "@MobileL3_RRM_Types.PageMode_V.pM", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &PageMode__V_pM_xer_, &BITSTRING_json_, &PageMode__V_pM_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PageMode__V_pM_default_coding("RAW");
const XERdescriptor_t       PageMode__V_spare1__2_xer_ = { {"spare1_2>\n", "spare1_2>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PageMode__V_spare1__2_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PageMode__V_spare1__2_descr_ = { "@MobileL3_RRM_Types.PageMode_V.spare1_2", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &PageMode__V_spare1__2_xer_, &BITSTRING_json_, &PageMode__V_spare1__2_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PageMode__V_spare1__2_default_coding("RAW");
const TTCN_RAWdescriptor_t PageMode__V_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PageMode__V
const TTCN_Typedescriptor_t PageMode__V_descr_ = { "@MobileL3_RRM_Types.PageMode_V", NULL, &PageMode__V_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PageMode__V_default_coding("RAW");
const XERdescriptor_t       PowerCommand__V_powerlevel_xer_ = { {"powerlevel>\n", "powerlevel>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PowerCommand__V_powerlevel_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PowerCommand__V_powerlevel_descr_ = { "@MobileL3_RRM_Types.PowerCommand_V.powerlevel", &BITSTRING_ber_, &General__Types::BIT5_raw_, NULL, &PowerCommand__V_powerlevel_xer_, &BITSTRING_json_, &PowerCommand__V_powerlevel_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PowerCommand__V_powerlevel_default_coding("RAW");
const XERdescriptor_t       PowerCommand__V_fPC__EP_xer_ = { {"fPC_EP>\n", "fPC_EP>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PowerCommand__V_fPC__EP_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PowerCommand__V_fPC__EP_descr_ = { "@MobileL3_RRM_Types.PowerCommand_V.fPC_EP", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &PowerCommand__V_fPC__EP_xer_, &BITSTRING_json_, &PowerCommand__V_fPC__EP_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PowerCommand__V_fPC__EP_default_coding("RAW");
const XERdescriptor_t       PowerCommand__V_ePC__Mode_xer_ = { {"ePC_Mode>\n", "ePC_Mode>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PowerCommand__V_ePC__Mode_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PowerCommand__V_ePC__Mode_descr_ = { "@MobileL3_RRM_Types.PowerCommand_V.ePC_Mode", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &PowerCommand__V_ePC__Mode_xer_, &BITSTRING_json_, &PowerCommand__V_ePC__Mode_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PowerCommand__V_ePC__Mode_default_coding("RAW");
const XERdescriptor_t       PowerCommand__V_spare__1_xer_ = { {"spare_1>\n", "spare_1>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PowerCommand__V_spare__1_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PowerCommand__V_spare__1_descr_ = { "@MobileL3_RRM_Types.PowerCommand_V.spare_1", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &PowerCommand__V_spare__1_xer_, &BITSTRING_json_, &PowerCommand__V_spare__1_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PowerCommand__V_spare__1_default_coding("RAW");
const TTCN_RAWdescriptor_t PowerCommand__V_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PowerCommand__V
const TTCN_Typedescriptor_t PowerCommand__V_descr_ = { "@MobileL3_RRM_Types.PowerCommand_V", NULL, &PowerCommand__V_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PowerCommand__V_default_coding("RAW");
const XERdescriptor_t       PowerCommandAndAccesstype__V_powerlevel_xer_ = { {"powerlevel>\n", "powerlevel>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PowerCommandAndAccesstype__V_powerlevel_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PowerCommandAndAccesstype__V_powerlevel_descr_ = { "@MobileL3_RRM_Types.PowerCommandAndAccesstype_V.powerlevel", &BITSTRING_ber_, &General__Types::BIT5_raw_, NULL, &PowerCommandAndAccesstype__V_powerlevel_xer_, &BITSTRING_json_, &PowerCommandAndAccesstype__V_powerlevel_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PowerCommandAndAccesstype__V_powerlevel_default_coding("RAW");
const XERdescriptor_t       PowerCommandAndAccesstype__V_fPC__EP_xer_ = { {"fPC_EP>\n", "fPC_EP>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PowerCommandAndAccesstype__V_fPC__EP_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PowerCommandAndAccesstype__V_fPC__EP_descr_ = { "@MobileL3_RRM_Types.PowerCommandAndAccesstype_V.fPC_EP", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &PowerCommandAndAccesstype__V_fPC__EP_xer_, &BITSTRING_json_, &PowerCommandAndAccesstype__V_fPC__EP_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PowerCommandAndAccesstype__V_fPC__EP_default_coding("RAW");
const XERdescriptor_t       PowerCommandAndAccesstype__V_ePC__Mode_xer_ = { {"ePC_Mode>\n", "ePC_Mode>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PowerCommandAndAccesstype__V_ePC__Mode_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PowerCommandAndAccesstype__V_ePC__Mode_descr_ = { "@MobileL3_RRM_Types.PowerCommandAndAccesstype_V.ePC_Mode", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &PowerCommandAndAccesstype__V_ePC__Mode_xer_, &BITSTRING_json_, &PowerCommandAndAccesstype__V_ePC__Mode_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PowerCommandAndAccesstype__V_ePC__Mode_default_coding("RAW");
const XERdescriptor_t       PowerCommandAndAccesstype__V_aTC_xer_ = { {"aTC>\n", "aTC>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PowerCommandAndAccesstype__V_aTC_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PowerCommandAndAccesstype__V_aTC_descr_ = { "@MobileL3_RRM_Types.PowerCommandAndAccesstype_V.aTC", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &PowerCommandAndAccesstype__V_aTC_xer_, &BITSTRING_json_, &PowerCommandAndAccesstype__V_aTC_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PowerCommandAndAccesstype__V_aTC_default_coding("RAW");
const TTCN_RAWdescriptor_t PowerCommandAndAccesstype__V_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PowerCommandAndAccesstype__V
const TTCN_Typedescriptor_t PowerCommandAndAccesstype__V_descr_ = { "@MobileL3_RRM_Types.PowerCommandAndAccesstype_V", NULL, &PowerCommandAndAccesstype__V_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PowerCommandAndAccesstype__V_default_coding("RAW");
const TTCN_RAWdescriptor_t RequestReference__V_t1_raw_ = {5,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,5,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       RequestReference__V_t1_xer_ = { {"t1>\n", "t1>\n"}, {4, 4}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RequestReference__V_t1_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RequestReference__V_t1_descr_ = { "@MobileL3_RRM_Types.RequestReference_V.t1", &BITSTRING_ber_, &RequestReference__V_t1_raw_, NULL, &RequestReference__V_t1_xer_, &BITSTRING_json_, &RequestReference__V_t1_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RequestReference__V_t1_default_coding("RAW");
const TTCN_RAWdescriptor_t RequestReference__V_t3_raw_ = {6,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,6,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       RequestReference__V_t3_xer_ = { {"t3>\n", "t3>\n"}, {4, 4}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RequestReference__V_t3_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RequestReference__V_t3_descr_ = { "@MobileL3_RRM_Types.RequestReference_V.t3", &BITSTRING_ber_, &RequestReference__V_t3_raw_, NULL, &RequestReference__V_t3_xer_, &BITSTRING_json_, &RequestReference__V_t3_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RequestReference__V_t3_default_coding("RAW");
const TTCN_RAWdescriptor_t RequestReference__V_t2_raw_ = {5,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,5,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       RequestReference__V_t2_xer_ = { {"t2>\n", "t2>\n"}, {4, 4}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RequestReference__V_t2_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RequestReference__V_t2_descr_ = { "@MobileL3_RRM_Types.RequestReference_V.t2", &BITSTRING_ber_, &RequestReference__V_t2_raw_, NULL, &RequestReference__V_t2_xer_, &BITSTRING_json_, &RequestReference__V_t2_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RequestReference__V_t2_default_coding("RAW");
const TTCN_RAWdescriptor_t RequestReference__V_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for RequestReference__V
const TTCN_Typedescriptor_t RequestReference__V_descr_ = { "@MobileL3_RRM_Types.RequestReference_V", NULL, &RequestReference__V_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RequestReference__V_default_coding("RAW");
const XERdescriptor_t       RR__Cause__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RR__Cause__TV_elementIdentifier_oer_ext_arr_[0] = {};
const int RR__Cause__TV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t RR__Cause__TV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, RR__Cause__TV_elementIdentifier_oer_ext_arr_, 0, RR__Cause__TV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t RR__Cause__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.RR_Cause_TV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &RR__Cause__TV_elementIdentifier_xer_, &OCTETSTRING_json_, &RR__Cause__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RR__Cause__TV_elementIdentifier_default_coding("RAW");
const XERdescriptor_t       RR__Cause__TV_valuePart_xer_ = { {"valuePart>\n", "valuePart>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RR__Cause__TV_valuePart_oer_ext_arr_[0] = {};
const int RR__Cause__TV_valuePart_oer_p_[0] = {};
const TTCN_OERdescriptor_t RR__Cause__TV_valuePart_oer_ = { -1, TRUE, 1, FALSE, 0, 0, RR__Cause__TV_valuePart_oer_ext_arr_, 0, RR__Cause__TV_valuePart_oer_p_};
const TTCN_Typedescriptor_t RR__Cause__TV_valuePart_descr_ = { "@MobileL3_RRM_Types.RR_Cause_TV.valuePart", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &RR__Cause__TV_valuePart_xer_, &OCTETSTRING_json_, &RR__Cause__TV_valuePart_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RR__Cause__TV_valuePart_default_coding("RAW");
const TTCN_RAWdescriptor_t RR__Cause__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for RR__Cause__TV
const TTCN_Typedescriptor_t RR__Cause__TV_descr_ = { "@MobileL3_RRM_Types.RR_Cause_TV", NULL, &RR__Cause__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RR__Cause__TV_default_coding("RAW");
const XERdescriptor_t       RR__Cause__V_valuePart_xer_ = { {"valuePart>\n", "valuePart>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RR__Cause__V_valuePart_oer_ext_arr_[0] = {};
const int RR__Cause__V_valuePart_oer_p_[0] = {};
const TTCN_OERdescriptor_t RR__Cause__V_valuePart_oer_ = { -1, TRUE, 1, FALSE, 0, 0, RR__Cause__V_valuePart_oer_ext_arr_, 0, RR__Cause__V_valuePart_oer_p_};
const TTCN_Typedescriptor_t RR__Cause__V_valuePart_descr_ = { "@MobileL3_RRM_Types.RR_Cause_V.valuePart", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &RR__Cause__V_valuePart_xer_, &OCTETSTRING_json_, &RR__Cause__V_valuePart_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RR__Cause__V_valuePart_default_coding("RAW");
const TTCN_RAWdescriptor_t RR__Cause__V_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for RR__Cause__V
const TTCN_Typedescriptor_t RR__Cause__V_descr_ = { "@MobileL3_RRM_Types.RR_Cause_V", NULL, &RR__Cause__V_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RR__Cause__V_default_coding("RAW");
const XERdescriptor_t       StartingTime__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int StartingTime__TV_elementIdentifier_oer_ext_arr_[0] = {};
const int StartingTime__TV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t StartingTime__TV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, StartingTime__TV_elementIdentifier_oer_ext_arr_, 0, StartingTime__TV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t StartingTime__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.StartingTime_TV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &StartingTime__TV_elementIdentifier_xer_, &OCTETSTRING_json_, &StartingTime__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING StartingTime__TV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t StartingTime__TV_t1_raw_ = {5,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,5,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       StartingTime__TV_t1_xer_ = { {"t1>\n", "t1>\n"}, {4, 4}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t StartingTime__TV_t1_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t StartingTime__TV_t1_descr_ = { "@MobileL3_RRM_Types.StartingTime_TV.t1", &BITSTRING_ber_, &StartingTime__TV_t1_raw_, NULL, &StartingTime__TV_t1_xer_, &BITSTRING_json_, &StartingTime__TV_t1_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING StartingTime__TV_t1_default_coding("RAW");
const TTCN_RAWdescriptor_t StartingTime__TV_t3_raw_ = {6,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,6,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       StartingTime__TV_t3_xer_ = { {"t3>\n", "t3>\n"}, {4, 4}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t StartingTime__TV_t3_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t StartingTime__TV_t3_descr_ = { "@MobileL3_RRM_Types.StartingTime_TV.t3", &BITSTRING_ber_, &StartingTime__TV_t3_raw_, NULL, &StartingTime__TV_t3_xer_, &BITSTRING_json_, &StartingTime__TV_t3_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING StartingTime__TV_t3_default_coding("RAW");
const TTCN_RAWdescriptor_t StartingTime__TV_t2_raw_ = {5,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,5,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       StartingTime__TV_t2_xer_ = { {"t2>\n", "t2>\n"}, {4, 4}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t StartingTime__TV_t2_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t StartingTime__TV_t2_descr_ = { "@MobileL3_RRM_Types.StartingTime_TV.t2", &BITSTRING_ber_, &StartingTime__TV_t2_raw_, NULL, &StartingTime__TV_t2_xer_, &BITSTRING_json_, &StartingTime__TV_t2_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING StartingTime__TV_t2_default_coding("RAW");
const TTCN_RAWdescriptor_t StartingTime__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for StartingTime__TV
const TTCN_Typedescriptor_t StartingTime__TV_descr_ = { "@MobileL3_RRM_Types.StartingTime_TV", NULL, &StartingTime__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING StartingTime__TV_default_coding("RAW");
const TTCN_RAWdescriptor_t StartingTime__V_t1_raw_ = {5,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,5,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       StartingTime__V_t1_xer_ = { {"t1>\n", "t1>\n"}, {4, 4}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t StartingTime__V_t1_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t StartingTime__V_t1_descr_ = { "@MobileL3_RRM_Types.StartingTime_V.t1", &BITSTRING_ber_, &StartingTime__V_t1_raw_, NULL, &StartingTime__V_t1_xer_, &BITSTRING_json_, &StartingTime__V_t1_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING StartingTime__V_t1_default_coding("RAW");
const TTCN_RAWdescriptor_t StartingTime__V_t3_raw_ = {6,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,6,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       StartingTime__V_t3_xer_ = { {"t3>\n", "t3>\n"}, {4, 4}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t StartingTime__V_t3_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t StartingTime__V_t3_descr_ = { "@MobileL3_RRM_Types.StartingTime_V.t3", &BITSTRING_ber_, &StartingTime__V_t3_raw_, NULL, &StartingTime__V_t3_xer_, &BITSTRING_json_, &StartingTime__V_t3_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING StartingTime__V_t3_default_coding("RAW");
const TTCN_RAWdescriptor_t StartingTime__V_t2_raw_ = {5,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,5,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       StartingTime__V_t2_xer_ = { {"t2>\n", "t2>\n"}, {4, 4}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t StartingTime__V_t2_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t StartingTime__V_t2_descr_ = { "@MobileL3_RRM_Types.StartingTime_V.t2", &BITSTRING_ber_, &StartingTime__V_t2_raw_, NULL, &StartingTime__V_t2_xer_, &BITSTRING_json_, &StartingTime__V_t2_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING StartingTime__V_t2_default_coding("RAW");
const TTCN_RAWdescriptor_t StartingTime__V_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for StartingTime__V
const TTCN_Typedescriptor_t StartingTime__V_descr_ = { "@MobileL3_RRM_Types.StartingTime_V", NULL, &StartingTime__V_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING StartingTime__V_default_coding("RAW");
const XERdescriptor_t       SynchronizationIndication__TV_sI_xer_ = { {"sI>\n", "sI>\n"}, {4, 4}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t SynchronizationIndication__TV_sI_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t SynchronizationIndication__TV_sI_descr_ = { "@MobileL3_RRM_Types.SynchronizationIndication_TV.sI", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &SynchronizationIndication__TV_sI_xer_, &BITSTRING_json_, &SynchronizationIndication__TV_sI_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING SynchronizationIndication__TV_sI_default_coding("RAW");
const XERdescriptor_t       SynchronizationIndication__TV_rOT_xer_ = { {"rOT>\n", "rOT>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t SynchronizationIndication__TV_rOT_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t SynchronizationIndication__TV_rOT_descr_ = { "@MobileL3_RRM_Types.SynchronizationIndication_TV.rOT", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &SynchronizationIndication__TV_rOT_xer_, &BITSTRING_json_, &SynchronizationIndication__TV_rOT_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING SynchronizationIndication__TV_rOT_default_coding("RAW");
const XERdescriptor_t       SynchronizationIndication__TV_nCI_xer_ = { {"nCI>\n", "nCI>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t SynchronizationIndication__TV_nCI_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t SynchronizationIndication__TV_nCI_descr_ = { "@MobileL3_RRM_Types.SynchronizationIndication_TV.nCI", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &SynchronizationIndication__TV_nCI_xer_, &BITSTRING_json_, &SynchronizationIndication__TV_nCI_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING SynchronizationIndication__TV_nCI_default_coding("RAW");
const XERdescriptor_t       SynchronizationIndication__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t SynchronizationIndication__TV_elementIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t SynchronizationIndication__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.SynchronizationIndication_TV.elementIdentifier", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &SynchronizationIndication__TV_elementIdentifier_xer_, &BITSTRING_json_, &SynchronizationIndication__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING SynchronizationIndication__TV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t SynchronizationIndication__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for SynchronizationIndication__TV
const TTCN_Typedescriptor_t SynchronizationIndication__TV_descr_ = { "@MobileL3_RRM_Types.SynchronizationIndication_TV", NULL, &SynchronizationIndication__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING SynchronizationIndication__TV_default_coding("RAW");
const XERdescriptor_t       TimingAdvance__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int TimingAdvance__TV_elementIdentifier_oer_ext_arr_[0] = {};
const int TimingAdvance__TV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t TimingAdvance__TV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, TimingAdvance__TV_elementIdentifier_oer_ext_arr_, 0, TimingAdvance__TV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t TimingAdvance__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.TimingAdvance_TV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &TimingAdvance__TV_elementIdentifier_xer_, &OCTETSTRING_json_, &TimingAdvance__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TimingAdvance__TV_elementIdentifier_default_coding("RAW");
const XERdescriptor_t       TimingAdvance__TV_valuePart_xer_ = { {"valuePart>\n", "valuePart>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int TimingAdvance__TV_valuePart_oer_ext_arr_[0] = {};
const int TimingAdvance__TV_valuePart_oer_p_[0] = {};
const TTCN_OERdescriptor_t TimingAdvance__TV_valuePart_oer_ = { -1, TRUE, 1, FALSE, 0, 0, TimingAdvance__TV_valuePart_oer_ext_arr_, 0, TimingAdvance__TV_valuePart_oer_p_};
const TTCN_Typedescriptor_t TimingAdvance__TV_valuePart_descr_ = { "@MobileL3_RRM_Types.TimingAdvance_TV.valuePart", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &TimingAdvance__TV_valuePart_xer_, &OCTETSTRING_json_, &TimingAdvance__TV_valuePart_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TimingAdvance__TV_valuePart_default_coding("RAW");
const TTCN_RAWdescriptor_t TimingAdvance__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for TimingAdvance__TV
const TTCN_Typedescriptor_t TimingAdvance__TV_descr_ = { "@MobileL3_RRM_Types.TimingAdvance_TV", NULL, &TimingAdvance__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TimingAdvance__TV_default_coding("RAW");
const TTCN_Typedescriptor_t& RealTimeDifference__TLV_descr_ = MobileL3__CommonIE__Types::Type4__TLV_descr_;
UNIVERSAL_CHARSTRING RealTimeDifference__TLV_default_coding("RAW");
const XERdescriptor_t       TMSIP__TMSI__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int TMSIP__TMSI__TV_elementIdentifier_oer_ext_arr_[0] = {};
const int TMSIP__TMSI__TV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t TMSIP__TMSI__TV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, TMSIP__TMSI__TV_elementIdentifier_oer_ext_arr_, 0, TMSIP__TMSI__TV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t TMSIP__TMSI__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.TMSIP_TMSI_TV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &TMSIP__TMSI__TV_elementIdentifier_xer_, &OCTETSTRING_json_, &TMSIP__TMSI__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TMSIP__TMSI__TV_elementIdentifier_default_coding("RAW");
const XERdescriptor_t       TMSIP__TMSI__TV_octet2__5_xer_ = { {"octet2_5>\n", "octet2_5>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int TMSIP__TMSI__TV_octet2__5_oer_ext_arr_[0] = {};
const int TMSIP__TMSI__TV_octet2__5_oer_p_[0] = {};
const TTCN_OERdescriptor_t TMSIP__TMSI__TV_octet2__5_oer_ = { -1, TRUE, 4, FALSE, 0, 0, TMSIP__TMSI__TV_octet2__5_oer_ext_arr_, 0, TMSIP__TMSI__TV_octet2__5_oer_p_};
const TTCN_Typedescriptor_t TMSIP__TMSI__TV_octet2__5_descr_ = { "@MobileL3_RRM_Types.TMSIP_TMSI_TV.octet2_5", &OCTETSTRING_ber_, &General__Types::OCT4_raw_, &OCTETSTRING_text_, &TMSIP__TMSI__TV_octet2__5_xer_, &OCTETSTRING_json_, &TMSIP__TMSI__TV_octet2__5_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TMSIP__TMSI__TV_octet2__5_default_coding("RAW");
const TTCN_RAWdescriptor_t TMSIP__TMSI__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for TMSIP__TMSI__TV
const TTCN_Typedescriptor_t TMSIP__TMSI__TV_descr_ = { "@MobileL3_RRM_Types.TMSIP_TMSI_TV", NULL, &TMSIP__TMSI__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TMSIP__TMSI__TV_default_coding("RAW");
const XERdescriptor_t       TMSIP__TMSI__V_xer_ = { {"TMSIP_TMSI_V>\n", "TMSIP_TMSI_V>\n"}, {14, 14}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int TMSIP__TMSI__V_oer_ext_arr_[0] = {};
const int TMSIP__TMSI__V_oer_p_[0] = {};
const TTCN_OERdescriptor_t TMSIP__TMSI__V_oer_ = { -1, TRUE, 4, FALSE, 0, 0, TMSIP__TMSI__V_oer_ext_arr_, 0, TMSIP__TMSI__V_oer_p_};
const TTCN_Typedescriptor_t TMSIP__TMSI__V_descr_ = { "@MobileL3_RRM_Types.TMSIP_TMSI_V", &OCTETSTRING_ber_, &General__Types::OCT4_raw_, &OCTETSTRING_text_, &TMSIP__TMSI__V_xer_, &OCTETSTRING_json_, &TMSIP__TMSI__V_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TMSIP__TMSI__V_default_coding("RAW");
const XERdescriptor_t       VGCS__TargetModeIndication__TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int VGCS__TargetModeIndication__TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int VGCS__TargetModeIndication__TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t VGCS__TargetModeIndication__TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, VGCS__TargetModeIndication__TLV_elementIdentifier_oer_ext_arr_, 0, VGCS__TargetModeIndication__TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t VGCS__TargetModeIndication__TLV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.VGCS_TargetModeIndication_TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &VGCS__TargetModeIndication__TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &VGCS__TargetModeIndication__TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VGCS__TargetModeIndication__TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t VGCS__TargetModeIndication__TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       VGCS__TargetModeIndication__TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t VGCS__TargetModeIndication__TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t VGCS__TargetModeIndication__TLV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.VGCS_TargetModeIndication_TLV.lengthIndicator", &INTEGER_ber_, &VGCS__TargetModeIndication__TLV_lengthIndicator_raw_, &INTEGER_text_, &VGCS__TargetModeIndication__TLV_lengthIndicator_xer_, &INTEGER_json_, &VGCS__TargetModeIndication__TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VGCS__TargetModeIndication__TLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       VGCS__TargetModeIndication__TLV_spare3__2_xer_ = { {"spare3_2>\n", "spare3_2>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t VGCS__TargetModeIndication__TLV_spare3__2_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t VGCS__TargetModeIndication__TLV_spare3__2_descr_ = { "@MobileL3_RRM_Types.VGCS_TargetModeIndication_TLV.spare3_2", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &VGCS__TargetModeIndication__TLV_spare3__2_xer_, &BITSTRING_json_, &VGCS__TargetModeIndication__TLV_spare3__2_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VGCS__TargetModeIndication__TLV_spare3__2_default_coding("RAW");
const XERdescriptor_t       VGCS__TargetModeIndication__TLV_groupCipherKeyNumber_xer_ = { {"groupCipherKeyNumber>\n", "groupCipherKeyNumber>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t VGCS__TargetModeIndication__TLV_groupCipherKeyNumber_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t VGCS__TargetModeIndication__TLV_groupCipherKeyNumber_descr_ = { "@MobileL3_RRM_Types.VGCS_TargetModeIndication_TLV.groupCipherKeyNumber", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &VGCS__TargetModeIndication__TLV_groupCipherKeyNumber_xer_, &BITSTRING_json_, &VGCS__TargetModeIndication__TLV_groupCipherKeyNumber_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VGCS__TargetModeIndication__TLV_groupCipherKeyNumber_default_coding("RAW");
const XERdescriptor_t       VGCS__TargetModeIndication__TLV_targetMode_xer_ = { {"targetMode>\n", "targetMode>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t VGCS__TargetModeIndication__TLV_targetMode_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t VGCS__TargetModeIndication__TLV_targetMode_descr_ = { "@MobileL3_RRM_Types.VGCS_TargetModeIndication_TLV.targetMode", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &VGCS__TargetModeIndication__TLV_targetMode_xer_, &BITSTRING_json_, &VGCS__TargetModeIndication__TLV_targetMode_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VGCS__TargetModeIndication__TLV_targetMode_default_coding("RAW");
const TTCN_RAWdescriptor_t VGCS__TargetModeIndication__TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for VGCS__TargetModeIndication__TLV
const TTCN_Typedescriptor_t VGCS__TargetModeIndication__TLV_descr_ = { "@MobileL3_RRM_Types.VGCS_TargetModeIndication_TLV", NULL, &VGCS__TargetModeIndication__TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VGCS__TargetModeIndication__TLV_default_coding("RAW");
const TTCN_RAWdescriptor_t HEX9_raw_ = {36,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       HEX9_xer_ = { {"HEX9>\n", "HEX9>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_Typedescriptor_t HEX9_descr_ = { "@MobileL3_RRM_Types.HEX9", NULL, &HEX9_raw_, NULL, &HEX9_xer_, &HEXSTRING_json_, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING HEX9_default_coding("RAW");
const XERdescriptor_t       VGCS__Ciphering__Parameters__TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int VGCS__Ciphering__Parameters__TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int VGCS__Ciphering__Parameters__TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t VGCS__Ciphering__Parameters__TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, VGCS__Ciphering__Parameters__TLV_elementIdentifier_oer_ext_arr_, 0, VGCS__Ciphering__Parameters__TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t VGCS__Ciphering__Parameters__TLV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.VGCS_Ciphering_Parameters_TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &VGCS__Ciphering__Parameters__TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &VGCS__Ciphering__Parameters__TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VGCS__Ciphering__Parameters__TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t VGCS__Ciphering__Parameters__TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       VGCS__Ciphering__Parameters__TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t VGCS__Ciphering__Parameters__TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t VGCS__Ciphering__Parameters__TLV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.VGCS_Ciphering_Parameters_TLV.lengthIndicator", &INTEGER_ber_, &VGCS__Ciphering__Parameters__TLV_lengthIndicator_raw_, &INTEGER_text_, &VGCS__Ciphering__Parameters__TLV_lengthIndicator_xer_, &INTEGER_json_, &VGCS__Ciphering__Parameters__TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VGCS__Ciphering__Parameters__TLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       VGCS__Ciphering__Parameters__TLV_cellGlobalCount_xer_ = { {"cellGlobalCount>\n", "cellGlobalCount>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t VGCS__Ciphering__Parameters__TLV_cellGlobalCount_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t VGCS__Ciphering__Parameters__TLV_cellGlobalCount_descr_ = { "@MobileL3_RRM_Types.VGCS_Ciphering_Parameters_TLV.cellGlobalCount", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &VGCS__Ciphering__Parameters__TLV_cellGlobalCount_xer_, &BITSTRING_json_, &VGCS__Ciphering__Parameters__TLV_cellGlobalCount_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VGCS__Ciphering__Parameters__TLV_cellGlobalCount_default_coding("RAW");
const XERdescriptor_t       VGCS__Ciphering__Parameters__TLV_b22__Count_xer_ = { {"b22_Count>\n", "b22_Count>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t VGCS__Ciphering__Parameters__TLV_b22__Count_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t VGCS__Ciphering__Parameters__TLV_b22__Count_descr_ = { "@MobileL3_RRM_Types.VGCS_Ciphering_Parameters_TLV.b22_Count", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &VGCS__Ciphering__Parameters__TLV_b22__Count_xer_, &BITSTRING_json_, &VGCS__Ciphering__Parameters__TLV_b22__Count_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VGCS__Ciphering__Parameters__TLV_b22__Count_default_coding("RAW");
const XERdescriptor_t       VGCS__Ciphering__Parameters__TLV_cELL__Ind_xer_ = { {"cELL_Ind>\n", "cELL_Ind>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t VGCS__Ciphering__Parameters__TLV_cELL__Ind_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t VGCS__Ciphering__Parameters__TLV_cELL__Ind_descr_ = { "@MobileL3_RRM_Types.VGCS_Ciphering_Parameters_TLV.cELL_Ind", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &VGCS__Ciphering__Parameters__TLV_cELL__Ind_xer_, &BITSTRING_json_, &VGCS__Ciphering__Parameters__TLV_cELL__Ind_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VGCS__Ciphering__Parameters__TLV_cELL__Ind_default_coding("RAW");
const XERdescriptor_t       VGCS__Ciphering__Parameters__TLV_lAC__Ind_xer_ = { {"lAC_Ind>\n", "lAC_Ind>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t VGCS__Ciphering__Parameters__TLV_lAC__Ind_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t VGCS__Ciphering__Parameters__TLV_lAC__Ind_descr_ = { "@MobileL3_RRM_Types.VGCS_Ciphering_Parameters_TLV.lAC_Ind", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &VGCS__Ciphering__Parameters__TLV_lAC__Ind_xer_, &BITSTRING_json_, &VGCS__Ciphering__Parameters__TLV_lAC__Ind_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VGCS__Ciphering__Parameters__TLV_lAC__Ind_default_coding("RAW");
const XERdescriptor_t       VGCS__Ciphering__Parameters__TLV_rAND__Ind_xer_ = { {"rAND_Ind>\n", "rAND_Ind>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t VGCS__Ciphering__Parameters__TLV_rAND__Ind_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t VGCS__Ciphering__Parameters__TLV_rAND__Ind_descr_ = { "@MobileL3_RRM_Types.VGCS_Ciphering_Parameters_TLV.rAND_Ind", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &VGCS__Ciphering__Parameters__TLV_rAND__Ind_xer_, &BITSTRING_json_, &VGCS__Ciphering__Parameters__TLV_rAND__Ind_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VGCS__Ciphering__Parameters__TLV_rAND__Ind_default_coding("RAW");
const XERdescriptor_t       VGCS__Ciphering__Parameters__TLV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t VGCS__Ciphering__Parameters__TLV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t VGCS__Ciphering__Parameters__TLV_spare_descr_ = { "@MobileL3_RRM_Types.VGCS_Ciphering_Parameters_TLV.spare", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &VGCS__Ciphering__Parameters__TLV_spare_xer_, &BITSTRING_json_, &VGCS__Ciphering__Parameters__TLV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VGCS__Ciphering__Parameters__TLV_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t VGCS__Ciphering__Parameters__TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for VGCS__Ciphering__Parameters__TLV
const TTCN_Typedescriptor_t VGCS__Ciphering__Parameters__TLV_descr_ = { "@MobileL3_RRM_Types.VGCS_Ciphering_Parameters_TLV", NULL, &VGCS__Ciphering__Parameters__TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t VGCS__Ciphering__Parameters__TLV_cellIdentity_raw_ = {16,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,2,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       VGCS__Ciphering__Parameters__TLV_cellIdentity_xer_ = { {"cellIdentity>\n", "cellIdentity>\n"}, {14, 14}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int VGCS__Ciphering__Parameters__TLV_cellIdentity_oer_ext_arr_[0] = {};
const int VGCS__Ciphering__Parameters__TLV_cellIdentity_oer_p_[0] = {};
const TTCN_OERdescriptor_t VGCS__Ciphering__Parameters__TLV_cellIdentity_oer_ = { -1, TRUE, 2, FALSE, 0, 0, VGCS__Ciphering__Parameters__TLV_cellIdentity_oer_ext_arr_, 0, VGCS__Ciphering__Parameters__TLV_cellIdentity_oer_p_};
const TTCN_Typedescriptor_t VGCS__Ciphering__Parameters__TLV_cellIdentity_descr_ = { "@MobileL3_RRM_Types.VGCS_Ciphering_Parameters_TLV.cellIdentity", &OCTETSTRING_ber_, &VGCS__Ciphering__Parameters__TLV_cellIdentity_raw_, &OCTETSTRING_text_, &VGCS__Ciphering__Parameters__TLV_cellIdentity_xer_, &OCTETSTRING_json_, &VGCS__Ciphering__Parameters__TLV_cellIdentity_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VGCS__Ciphering__Parameters__TLV_cellIdentity_default_coding("RAW");
const TTCN_RAWdescriptor_t VGCS__Ciphering__Parameters__TLV_lAI_raw_ = {40,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,5,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       VGCS__Ciphering__Parameters__TLV_lAI_xer_ = { {"lAI>\n", "lAI>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int VGCS__Ciphering__Parameters__TLV_lAI_oer_ext_arr_[0] = {};
const int VGCS__Ciphering__Parameters__TLV_lAI_oer_p_[0] = {};
const TTCN_OERdescriptor_t VGCS__Ciphering__Parameters__TLV_lAI_oer_ = { -1, TRUE, 5, FALSE, 0, 0, VGCS__Ciphering__Parameters__TLV_lAI_oer_ext_arr_, 0, VGCS__Ciphering__Parameters__TLV_lAI_oer_p_};
const TTCN_Typedescriptor_t VGCS__Ciphering__Parameters__TLV_lAI_descr_ = { "@MobileL3_RRM_Types.VGCS_Ciphering_Parameters_TLV.lAI", &OCTETSTRING_ber_, &VGCS__Ciphering__Parameters__TLV_lAI_raw_, &OCTETSTRING_text_, &VGCS__Ciphering__Parameters__TLV_lAI_xer_, &OCTETSTRING_json_, &VGCS__Ciphering__Parameters__TLV_lAI_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VGCS__Ciphering__Parameters__TLV_lAI_default_coding("RAW");
const TTCN_RAWdescriptor_t VGCS__Ciphering__Parameters__TLV_vSTK__RAND_raw_ = {36,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       VGCS__Ciphering__Parameters__TLV_vSTK__RAND_xer_ = { {"vSTK_RAND>\n", "vSTK_RAND>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_Typedescriptor_t VGCS__Ciphering__Parameters__TLV_vSTK__RAND_descr_ = { "@MobileL3_RRM_Types.VGCS_Ciphering_Parameters_TLV.vSTK_RAND", NULL, &VGCS__Ciphering__Parameters__TLV_vSTK__RAND_raw_, NULL, &VGCS__Ciphering__Parameters__TLV_vSTK__RAND_xer_, &HEXSTRING_json_, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VGCS__Ciphering__Parameters__TLV_vSTK__RAND_default_coding("RAW");
const TTCN_RAWdescriptor_t VGCS__Ciphering__Parameters__TLV_spare2_raw_ = {4,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_MSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,4,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       VGCS__Ciphering__Parameters__TLV_spare2_xer_ = { {"spare2>\n", "spare2>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t VGCS__Ciphering__Parameters__TLV_spare2_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t VGCS__Ciphering__Parameters__TLV_spare2_descr_ = { "@MobileL3_RRM_Types.VGCS_Ciphering_Parameters_TLV.spare2", &BITSTRING_ber_, &VGCS__Ciphering__Parameters__TLV_spare2_raw_, NULL, &VGCS__Ciphering__Parameters__TLV_spare2_xer_, &BITSTRING_json_, &VGCS__Ciphering__Parameters__TLV_spare2_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VGCS__Ciphering__Parameters__TLV_spare2_default_coding("RAW");
UNIVERSAL_CHARSTRING VGCS__Ciphering__Parameters__TLV_default_coding("RAW");
const XERdescriptor_t       WaitIndication__V_t3122__3142TimeoutValue_xer_ = { {"t3122_3142TimeoutValue>\n", "t3122_3142TimeoutValue>\n"}, {24, 24}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_Typedescriptor_t WaitIndication__V_t3122__3142TimeoutValue_descr_ = { "@MobileL3_RRM_Types.WaitIndication_V.t3122_3142TimeoutValue", &INTEGER_ber_, &INTEGER_raw_, &INTEGER_text_, &WaitIndication__V_t3122__3142TimeoutValue_xer_, &INTEGER_json_, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING WaitIndication__V_t3122__3142TimeoutValue_default_coding("RAW");
const TTCN_RAWdescriptor_t WaitIndication__V_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for WaitIndication__V
const TTCN_Typedescriptor_t WaitIndication__V_descr_ = { "@MobileL3_RRM_Types.WaitIndication_V", NULL, &WaitIndication__V_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING WaitIndication__V_default_coding("RAW");
const XERdescriptor_t       APDU__Flags__V_lastSeg_xer_ = { {"lastSeg>\n", "lastSeg>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t APDU__Flags__V_lastSeg_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t APDU__Flags__V_lastSeg_descr_ = { "@MobileL3_RRM_Types.APDU_Flags_V.lastSeg", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &APDU__Flags__V_lastSeg_xer_, &BITSTRING_json_, &APDU__Flags__V_lastSeg_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING APDU__Flags__V_lastSeg_default_coding("RAW");
const XERdescriptor_t       APDU__Flags__V_firstSeg_xer_ = { {"firstSeg>\n", "firstSeg>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t APDU__Flags__V_firstSeg_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t APDU__Flags__V_firstSeg_descr_ = { "@MobileL3_RRM_Types.APDU_Flags_V.firstSeg", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &APDU__Flags__V_firstSeg_xer_, &BITSTRING_json_, &APDU__Flags__V_firstSeg_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING APDU__Flags__V_firstSeg_default_coding("RAW");
const XERdescriptor_t       APDU__Flags__V_cR_xer_ = { {"cR>\n", "cR>\n"}, {4, 4}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t APDU__Flags__V_cR_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t APDU__Flags__V_cR_descr_ = { "@MobileL3_RRM_Types.APDU_Flags_V.cR", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &APDU__Flags__V_cR_xer_, &BITSTRING_json_, &APDU__Flags__V_cR_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING APDU__Flags__V_cR_default_coding("RAW");
const XERdescriptor_t       APDU__Flags__V_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t APDU__Flags__V_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t APDU__Flags__V_spare_descr_ = { "@MobileL3_RRM_Types.APDU_Flags_V.spare", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &APDU__Flags__V_spare_xer_, &BITSTRING_json_, &APDU__Flags__V_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING APDU__Flags__V_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t APDU__Flags__V_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for APDU__Flags__V
const TTCN_Typedescriptor_t APDU__Flags__V_descr_ = { "@MobileL3_RRM_Types.APDU_Flags_V", NULL, &APDU__Flags__V_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING APDU__Flags__V_default_coding("RAW");
const TTCN_RAWdescriptor_t APDU__Data__LV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       APDU__Data__LV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t APDU__Data__LV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t APDU__Data__LV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.APDU_Data_LV.lengthIndicator", &INTEGER_ber_, &APDU__Data__LV_lengthIndicator_raw_, &INTEGER_text_, &APDU__Data__LV_lengthIndicator_xer_, &INTEGER_json_, &APDU__Data__LV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING APDU__Data__LV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       APDU__Data__LV_aPDU__DataValue_xer_ = { {"aPDU_DataValue>\n", "aPDU_DataValue>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int APDU__Data__LV_aPDU__DataValue_oer_ext_arr_[0] = {};
const int APDU__Data__LV_aPDU__DataValue_oer_p_[0] = {};
const TTCN_OERdescriptor_t APDU__Data__LV_aPDU__DataValue_oer_ = { -1, TRUE, -1, FALSE, 0, 0, APDU__Data__LV_aPDU__DataValue_oer_ext_arr_, 0, APDU__Data__LV_aPDU__DataValue_oer_p_};
const TTCN_Typedescriptor_t APDU__Data__LV_aPDU__DataValue_descr_ = { "@MobileL3_RRM_Types.APDU_Data_LV.aPDU_DataValue", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &APDU__Data__LV_aPDU__DataValue_xer_, &OCTETSTRING_json_, &APDU__Data__LV_aPDU__DataValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING APDU__Data__LV_aPDU__DataValue_default_coding("RAW");
const TTCN_RAWdescriptor_t APDU__Data__LV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for APDU__Data__LV
const TTCN_Typedescriptor_t APDU__Data__LV_descr_ = { "@MobileL3_RRM_Types.APDU_Data_LV", NULL, &APDU__Data__LV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING APDU__Data__LV_default_coding("RAW");
const TTCN_RAWdescriptor_t HandoverToUTRANCommand__LV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       HandoverToUTRANCommand__LV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t HandoverToUTRANCommand__LV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t HandoverToUTRANCommand__LV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.HandoverToUTRANCommand_LV.lengthIndicator", &INTEGER_ber_, &HandoverToUTRANCommand__LV_lengthIndicator_raw_, &INTEGER_text_, &HandoverToUTRANCommand__LV_lengthIndicator_xer_, &INTEGER_json_, &HandoverToUTRANCommand__LV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING HandoverToUTRANCommand__LV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       HandoverToUTRANCommand__LV_handoverToUTRANCommandValue_xer_ = { {"handoverToUTRANCommandValue>\n", "handoverToUTRANCommandValue>\n"}, {29, 29}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int HandoverToUTRANCommand__LV_handoverToUTRANCommandValue_oer_ext_arr_[0] = {};
const int HandoverToUTRANCommand__LV_handoverToUTRANCommandValue_oer_p_[0] = {};
const TTCN_OERdescriptor_t HandoverToUTRANCommand__LV_handoverToUTRANCommandValue_oer_ = { -1, TRUE, -1, FALSE, 0, 0, HandoverToUTRANCommand__LV_handoverToUTRANCommandValue_oer_ext_arr_, 0, HandoverToUTRANCommand__LV_handoverToUTRANCommandValue_oer_p_};
const TTCN_Typedescriptor_t HandoverToUTRANCommand__LV_handoverToUTRANCommandValue_descr_ = { "@MobileL3_RRM_Types.HandoverToUTRANCommand_LV.handoverToUTRANCommandValue", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &HandoverToUTRANCommand__LV_handoverToUTRANCommandValue_xer_, &OCTETSTRING_json_, &HandoverToUTRANCommand__LV_handoverToUTRANCommandValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING HandoverToUTRANCommand__LV_handoverToUTRANCommandValue_default_coding("RAW");
const TTCN_RAWdescriptor_t HandoverToUTRANCommand__LV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for HandoverToUTRANCommand__LV
const TTCN_Typedescriptor_t HandoverToUTRANCommand__LV_descr_ = { "@MobileL3_RRM_Types.HandoverToUTRANCommand_LV", NULL, &HandoverToUTRANCommand__LV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING HandoverToUTRANCommand__LV_default_coding("RAW");
const TTCN_RAWdescriptor_t HandoverToCDMA2000Command__LV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       HandoverToCDMA2000Command__LV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t HandoverToCDMA2000Command__LV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t HandoverToCDMA2000Command__LV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.HandoverToCDMA2000Command_LV.lengthIndicator", &INTEGER_ber_, &HandoverToCDMA2000Command__LV_lengthIndicator_raw_, &INTEGER_text_, &HandoverToCDMA2000Command__LV_lengthIndicator_xer_, &INTEGER_json_, &HandoverToCDMA2000Command__LV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING HandoverToCDMA2000Command__LV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       HandoverToCDMA2000Command__LV_handoverToCDMA2000CommandValue_xer_ = { {"handoverToCDMA2000CommandValue>\n", "handoverToCDMA2000CommandValue>\n"}, {32, 32}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int HandoverToCDMA2000Command__LV_handoverToCDMA2000CommandValue_oer_ext_arr_[0] = {};
const int HandoverToCDMA2000Command__LV_handoverToCDMA2000CommandValue_oer_p_[0] = {};
const TTCN_OERdescriptor_t HandoverToCDMA2000Command__LV_handoverToCDMA2000CommandValue_oer_ = { -1, TRUE, -1, FALSE, 0, 0, HandoverToCDMA2000Command__LV_handoverToCDMA2000CommandValue_oer_ext_arr_, 0, HandoverToCDMA2000Command__LV_handoverToCDMA2000CommandValue_oer_p_};
const TTCN_Typedescriptor_t HandoverToCDMA2000Command__LV_handoverToCDMA2000CommandValue_descr_ = { "@MobileL3_RRM_Types.HandoverToCDMA2000Command_LV.handoverToCDMA2000CommandValue", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &HandoverToCDMA2000Command__LV_handoverToCDMA2000CommandValue_xer_, &OCTETSTRING_json_, &HandoverToCDMA2000Command__LV_handoverToCDMA2000CommandValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING HandoverToCDMA2000Command__LV_handoverToCDMA2000CommandValue_default_coding("RAW");
const TTCN_RAWdescriptor_t HandoverToCDMA2000Command__LV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for HandoverToCDMA2000Command__LV
const TTCN_Typedescriptor_t HandoverToCDMA2000Command__LV_descr_ = { "@MobileL3_RRM_Types.HandoverToCDMA2000Command_LV", NULL, &HandoverToCDMA2000Command__LV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING HandoverToCDMA2000Command__LV_default_coding("RAW");
const TTCN_RAWdescriptor_t RadioBearerReconfiguration__LV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       RadioBearerReconfiguration__LV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t RadioBearerReconfiguration__LV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t RadioBearerReconfiguration__LV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.RadioBearerReconfiguration_LV.lengthIndicator", &INTEGER_ber_, &RadioBearerReconfiguration__LV_lengthIndicator_raw_, &INTEGER_text_, &RadioBearerReconfiguration__LV_lengthIndicator_xer_, &INTEGER_json_, &RadioBearerReconfiguration__LV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RadioBearerReconfiguration__LV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       RadioBearerReconfiguration__LV_radioBearerReconfiguration44118_xer_ = { {"radioBearerReconfiguration44118>\n", "radioBearerReconfiguration44118>\n"}, {33, 33}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RadioBearerReconfiguration__LV_radioBearerReconfiguration44118_oer_ext_arr_[0] = {};
const int RadioBearerReconfiguration__LV_radioBearerReconfiguration44118_oer_p_[0] = {};
const TTCN_OERdescriptor_t RadioBearerReconfiguration__LV_radioBearerReconfiguration44118_oer_ = { -1, TRUE, -1, FALSE, 0, 0, RadioBearerReconfiguration__LV_radioBearerReconfiguration44118_oer_ext_arr_, 0, RadioBearerReconfiguration__LV_radioBearerReconfiguration44118_oer_p_};
const TTCN_Typedescriptor_t RadioBearerReconfiguration__LV_radioBearerReconfiguration44118_descr_ = { "@MobileL3_RRM_Types.RadioBearerReconfiguration_LV.radioBearerReconfiguration44118", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &RadioBearerReconfiguration__LV_radioBearerReconfiguration44118_xer_, &OCTETSTRING_json_, &RadioBearerReconfiguration__LV_radioBearerReconfiguration44118_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RadioBearerReconfiguration__LV_radioBearerReconfiguration44118_default_coding("RAW");
const TTCN_RAWdescriptor_t RadioBearerReconfiguration__LV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for RadioBearerReconfiguration__LV
const TTCN_Typedescriptor_t RadioBearerReconfiguration__LV_descr_ = { "@MobileL3_RRM_Types.RadioBearerReconfiguration_LV", NULL, &RadioBearerReconfiguration__LV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RadioBearerReconfiguration__LV_default_coding("RAW");
const XERdescriptor_t       ServiceSupport__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ServiceSupport__TV_elementIdentifier_oer_ext_arr_[0] = {};
const int ServiceSupport__TV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t ServiceSupport__TV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ServiceSupport__TV_elementIdentifier_oer_ext_arr_, 0, ServiceSupport__TV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t ServiceSupport__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.ServiceSupport_TV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ServiceSupport__TV_elementIdentifier_xer_, &OCTETSTRING_json_, &ServiceSupport__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ServiceSupport__TV_elementIdentifier_default_coding("RAW");
const XERdescriptor_t       ServiceSupport__TV_mBMS__Broadcast_xer_ = { {"mBMS_Broadcast>\n", "mBMS_Broadcast>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ServiceSupport__TV_mBMS__Broadcast_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ServiceSupport__TV_mBMS__Broadcast_descr_ = { "@MobileL3_RRM_Types.ServiceSupport_TV.mBMS_Broadcast", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &ServiceSupport__TV_mBMS__Broadcast_xer_, &BITSTRING_json_, &ServiceSupport__TV_mBMS__Broadcast_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ServiceSupport__TV_mBMS__Broadcast_default_coding("RAW");
const XERdescriptor_t       ServiceSupport__TV_mBMS__Multicast_xer_ = { {"mBMS_Multicast>\n", "mBMS_Multicast>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ServiceSupport__TV_mBMS__Multicast_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ServiceSupport__TV_mBMS__Multicast_descr_ = { "@MobileL3_RRM_Types.ServiceSupport_TV.mBMS_Multicast", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &ServiceSupport__TV_mBMS__Multicast_xer_, &BITSTRING_json_, &ServiceSupport__TV_mBMS__Multicast_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ServiceSupport__TV_mBMS__Multicast_default_coding("RAW");
const XERdescriptor_t       ServiceSupport__TV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ServiceSupport__TV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ServiceSupport__TV_spare_descr_ = { "@MobileL3_RRM_Types.ServiceSupport_TV.spare", &BITSTRING_ber_, &General__Types::BIT6_raw_, NULL, &ServiceSupport__TV_spare_xer_, &BITSTRING_json_, &ServiceSupport__TV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ServiceSupport__TV_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t ServiceSupport__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ServiceSupport__TV
const TTCN_Typedescriptor_t ServiceSupport__TV_descr_ = { "@MobileL3_RRM_Types.ServiceSupport_TV", NULL, &ServiceSupport__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ServiceSupport__TV_default_coding("RAW");
const XERdescriptor_t       ServiceSupport__V_mBMS__Broadcast_xer_ = { {"mBMS_Broadcast>\n", "mBMS_Broadcast>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ServiceSupport__V_mBMS__Broadcast_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ServiceSupport__V_mBMS__Broadcast_descr_ = { "@MobileL3_RRM_Types.ServiceSupport_V.mBMS_Broadcast", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &ServiceSupport__V_mBMS__Broadcast_xer_, &BITSTRING_json_, &ServiceSupport__V_mBMS__Broadcast_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ServiceSupport__V_mBMS__Broadcast_default_coding("RAW");
const XERdescriptor_t       ServiceSupport__V_mBMS__Multicast_xer_ = { {"mBMS_Multicast>\n", "mBMS_Multicast>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ServiceSupport__V_mBMS__Multicast_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ServiceSupport__V_mBMS__Multicast_descr_ = { "@MobileL3_RRM_Types.ServiceSupport_V.mBMS_Multicast", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &ServiceSupport__V_mBMS__Multicast_xer_, &BITSTRING_json_, &ServiceSupport__V_mBMS__Multicast_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ServiceSupport__V_mBMS__Multicast_default_coding("RAW");
const XERdescriptor_t       ServiceSupport__V_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ServiceSupport__V_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ServiceSupport__V_spare_descr_ = { "@MobileL3_RRM_Types.ServiceSupport_V.spare", &BITSTRING_ber_, &General__Types::BIT6_raw_, NULL, &ServiceSupport__V_spare_xer_, &BITSTRING_json_, &ServiceSupport__V_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ServiceSupport__V_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t ServiceSupport__V_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ServiceSupport__V
const TTCN_Typedescriptor_t ServiceSupport__V_descr_ = { "@MobileL3_RRM_Types.ServiceSupport_V", NULL, &ServiceSupport__V_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ServiceSupport__V_default_coding("RAW");
const XERdescriptor_t       MBMS__ptm__ChannelDescription__TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int MBMS__ptm__ChannelDescription__TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int MBMS__ptm__ChannelDescription__TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t MBMS__ptm__ChannelDescription__TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, MBMS__ptm__ChannelDescription__TLV_elementIdentifier_oer_ext_arr_, 0, MBMS__ptm__ChannelDescription__TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t MBMS__ptm__ChannelDescription__TLV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.MBMS_ptm_ChannelDescription_TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &MBMS__ptm__ChannelDescription__TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &MBMS__ptm__ChannelDescription__TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MBMS__ptm__ChannelDescription__TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t MBMS__ptm__ChannelDescription__TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MBMS__ptm__ChannelDescription__TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MBMS__ptm__ChannelDescription__TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MBMS__ptm__ChannelDescription__TLV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.MBMS_ptm_ChannelDescription_TLV.lengthIndicator", &INTEGER_ber_, &MBMS__ptm__ChannelDescription__TLV_lengthIndicator_raw_, &INTEGER_text_, &MBMS__ptm__ChannelDescription__TLV_lengthIndicator_xer_, &INTEGER_json_, &MBMS__ptm__ChannelDescription__TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MBMS__ptm__ChannelDescription__TLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       MBMS__ptm__ChannelDescription__TLV_mMS__ptm__ChannelDescriptionValue_xer_ = { {"mMS_ptm_ChannelDescriptionValue>\n", "mMS_ptm_ChannelDescriptionValue>\n"}, {33, 33}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int MBMS__ptm__ChannelDescription__TLV_mMS__ptm__ChannelDescriptionValue_oer_ext_arr_[0] = {};
const int MBMS__ptm__ChannelDescription__TLV_mMS__ptm__ChannelDescriptionValue_oer_p_[0] = {};
const TTCN_OERdescriptor_t MBMS__ptm__ChannelDescription__TLV_mMS__ptm__ChannelDescriptionValue_oer_ = { -1, TRUE, -1, FALSE, 0, 0, MBMS__ptm__ChannelDescription__TLV_mMS__ptm__ChannelDescriptionValue_oer_ext_arr_, 0, MBMS__ptm__ChannelDescription__TLV_mMS__ptm__ChannelDescriptionValue_oer_p_};
const TTCN_Typedescriptor_t MBMS__ptm__ChannelDescription__TLV_mMS__ptm__ChannelDescriptionValue_descr_ = { "@MobileL3_RRM_Types.MBMS_ptm_ChannelDescription_TLV.mMS_ptm_ChannelDescriptionValue", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &MBMS__ptm__ChannelDescription__TLV_mMS__ptm__ChannelDescriptionValue_xer_, &OCTETSTRING_json_, &MBMS__ptm__ChannelDescription__TLV_mMS__ptm__ChannelDescriptionValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MBMS__ptm__ChannelDescription__TLV_mMS__ptm__ChannelDescriptionValue_default_coding("RAW");
const TTCN_RAWdescriptor_t MBMS__ptm__ChannelDescription__TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MBMS__ptm__ChannelDescription__TLV
const TTCN_Typedescriptor_t MBMS__ptm__ChannelDescription__TLV_descr_ = { "@MobileL3_RRM_Types.MBMS_ptm_ChannelDescription_TLV", NULL, &MBMS__ptm__ChannelDescription__TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MBMS__ptm__ChannelDescription__TLV_default_coding("RAW");
const XERdescriptor_t       MBMS__SessionParameterList__TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int MBMS__SessionParameterList__TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int MBMS__SessionParameterList__TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t MBMS__SessionParameterList__TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, MBMS__SessionParameterList__TLV_elementIdentifier_oer_ext_arr_, 0, MBMS__SessionParameterList__TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t MBMS__SessionParameterList__TLV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.MBMS_SessionParameterList_TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &MBMS__SessionParameterList__TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &MBMS__SessionParameterList__TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MBMS__SessionParameterList__TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t MBMS__SessionParameterList__TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MBMS__SessionParameterList__TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MBMS__SessionParameterList__TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MBMS__SessionParameterList__TLV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.MBMS_SessionParameterList_TLV.lengthIndicator", &INTEGER_ber_, &MBMS__SessionParameterList__TLV_lengthIndicator_raw_, &INTEGER_text_, &MBMS__SessionParameterList__TLV_lengthIndicator_xer_, &INTEGER_json_, &MBMS__SessionParameterList__TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MBMS__SessionParameterList__TLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       MBMS__SessionParameterList__TLV_mBMS__SessionParameterListValue_xer_ = { {"mBMS_SessionParameterListValue>\n", "mBMS_SessionParameterListValue>\n"}, {32, 32}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int MBMS__SessionParameterList__TLV_mBMS__SessionParameterListValue_oer_ext_arr_[0] = {};
const int MBMS__SessionParameterList__TLV_mBMS__SessionParameterListValue_oer_p_[0] = {};
const TTCN_OERdescriptor_t MBMS__SessionParameterList__TLV_mBMS__SessionParameterListValue_oer_ = { -1, TRUE, -1, FALSE, 0, 0, MBMS__SessionParameterList__TLV_mBMS__SessionParameterListValue_oer_ext_arr_, 0, MBMS__SessionParameterList__TLV_mBMS__SessionParameterListValue_oer_p_};
const TTCN_Typedescriptor_t MBMS__SessionParameterList__TLV_mBMS__SessionParameterListValue_descr_ = { "@MobileL3_RRM_Types.MBMS_SessionParameterList_TLV.mBMS_SessionParameterListValue", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &MBMS__SessionParameterList__TLV_mBMS__SessionParameterListValue_xer_, &OCTETSTRING_json_, &MBMS__SessionParameterList__TLV_mBMS__SessionParameterListValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MBMS__SessionParameterList__TLV_mBMS__SessionParameterListValue_default_coding("RAW");
const TTCN_RAWdescriptor_t MBMS__SessionParameterList__TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MBMS__SessionParameterList__TLV
const TTCN_Typedescriptor_t MBMS__SessionParameterList__TLV_descr_ = { "@MobileL3_RRM_Types.MBMS_SessionParameterList_TLV", NULL, &MBMS__SessionParameterList__TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MBMS__SessionParameterList__TLV_default_coding("RAW");
const XERdescriptor_t       DedicatedServiceInformation__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int DedicatedServiceInformation__TV_elementIdentifier_oer_ext_arr_[0] = {};
const int DedicatedServiceInformation__TV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t DedicatedServiceInformation__TV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, DedicatedServiceInformation__TV_elementIdentifier_oer_ext_arr_, 0, DedicatedServiceInformation__TV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t DedicatedServiceInformation__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.DedicatedServiceInformation_TV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &DedicatedServiceInformation__TV_elementIdentifier_xer_, &OCTETSTRING_json_, &DedicatedServiceInformation__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DedicatedServiceInformation__TV_elementIdentifier_default_coding("RAW");
const XERdescriptor_t       DedicatedServiceInformation__TV_sIS_xer_ = { {"sIS>\n", "sIS>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t DedicatedServiceInformation__TV_sIS_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t DedicatedServiceInformation__TV_sIS_descr_ = { "@MobileL3_RRM_Types.DedicatedServiceInformation_TV.sIS", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &DedicatedServiceInformation__TV_sIS_xer_, &BITSTRING_json_, &DedicatedServiceInformation__TV_sIS_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DedicatedServiceInformation__TV_sIS_default_coding("RAW");
const XERdescriptor_t       DedicatedServiceInformation__TV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t DedicatedServiceInformation__TV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t DedicatedServiceInformation__TV_spare_descr_ = { "@MobileL3_RRM_Types.DedicatedServiceInformation_TV.spare", &BITSTRING_ber_, &General__Types::BIT7_raw_, NULL, &DedicatedServiceInformation__TV_spare_xer_, &BITSTRING_json_, &DedicatedServiceInformation__TV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DedicatedServiceInformation__TV_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t DedicatedServiceInformation__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for DedicatedServiceInformation__TV
const TTCN_Typedescriptor_t DedicatedServiceInformation__TV_descr_ = { "@MobileL3_RRM_Types.DedicatedServiceInformation_TV", NULL, &DedicatedServiceInformation__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DedicatedServiceInformation__TV_default_coding("RAW");
const XERdescriptor_t       MPRACH__Description__TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int MPRACH__Description__TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int MPRACH__Description__TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t MPRACH__Description__TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, MPRACH__Description__TLV_elementIdentifier_oer_ext_arr_, 0, MPRACH__Description__TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t MPRACH__Description__TLV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.MPRACH_Description_TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &MPRACH__Description__TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &MPRACH__Description__TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MPRACH__Description__TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t MPRACH__Description__TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       MPRACH__Description__TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MPRACH__Description__TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MPRACH__Description__TLV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.MPRACH_Description_TLV.lengthIndicator", &INTEGER_ber_, &MPRACH__Description__TLV_lengthIndicator_raw_, &INTEGER_text_, &MPRACH__Description__TLV_lengthIndicator_xer_, &INTEGER_json_, &MPRACH__Description__TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MPRACH__Description__TLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       MPRACH__Description__TLV_mPRACH__DescriptionValue_xer_ = { {"mPRACH_DescriptionValue>\n", "mPRACH_DescriptionValue>\n"}, {25, 25}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int MPRACH__Description__TLV_mPRACH__DescriptionValue_oer_ext_arr_[0] = {};
const int MPRACH__Description__TLV_mPRACH__DescriptionValue_oer_p_[0] = {};
const TTCN_OERdescriptor_t MPRACH__Description__TLV_mPRACH__DescriptionValue_oer_ = { -1, TRUE, -1, FALSE, 0, 0, MPRACH__Description__TLV_mPRACH__DescriptionValue_oer_ext_arr_, 0, MPRACH__Description__TLV_mPRACH__DescriptionValue_oer_p_};
const TTCN_Typedescriptor_t MPRACH__Description__TLV_mPRACH__DescriptionValue_descr_ = { "@MobileL3_RRM_Types.MPRACH_Description_TLV.mPRACH_DescriptionValue", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &MPRACH__Description__TLV_mPRACH__DescriptionValue_xer_, &OCTETSTRING_json_, &MPRACH__Description__TLV_mPRACH__DescriptionValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MPRACH__Description__TLV_mPRACH__DescriptionValue_default_coding("RAW");
const TTCN_RAWdescriptor_t MPRACH__Description__TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MPRACH__Description__TLV
const TTCN_Typedescriptor_t MPRACH__Description__TLV_descr_ = { "@MobileL3_RRM_Types.MPRACH_Description_TLV", NULL, &MPRACH__Description__TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MPRACH__Description__TLV_default_coding("RAW");
const XERdescriptor_t       RestrictionTimer__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RestrictionTimer__TV_elementIdentifier_oer_ext_arr_[0] = {};
const int RestrictionTimer__TV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t RestrictionTimer__TV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, RestrictionTimer__TV_elementIdentifier_oer_ext_arr_, 0, RestrictionTimer__TV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t RestrictionTimer__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.RestrictionTimer_TV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &RestrictionTimer__TV_elementIdentifier_xer_, &OCTETSTRING_json_, &RestrictionTimer__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RestrictionTimer__TV_elementIdentifier_default_coding("RAW");
const XERdescriptor_t       RestrictionTimer__TV_restrictionTimerValue_xer_ = { {"restrictionTimerValue>\n", "restrictionTimerValue>\n"}, {23, 23}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int RestrictionTimer__TV_restrictionTimerValue_oer_ext_arr_[0] = {};
const int RestrictionTimer__TV_restrictionTimerValue_oer_p_[0] = {};
const TTCN_OERdescriptor_t RestrictionTimer__TV_restrictionTimerValue_oer_ = { -1, TRUE, 1, FALSE, 0, 0, RestrictionTimer__TV_restrictionTimerValue_oer_ext_arr_, 0, RestrictionTimer__TV_restrictionTimerValue_oer_p_};
const TTCN_Typedescriptor_t RestrictionTimer__TV_restrictionTimerValue_descr_ = { "@MobileL3_RRM_Types.RestrictionTimer_TV.restrictionTimerValue", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &RestrictionTimer__TV_restrictionTimerValue_xer_, &OCTETSTRING_json_, &RestrictionTimer__TV_restrictionTimerValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RestrictionTimer__TV_restrictionTimerValue_default_coding("RAW");
const TTCN_RAWdescriptor_t RestrictionTimer__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for RestrictionTimer__TV
const TTCN_Typedescriptor_t RestrictionTimer__TV_descr_ = { "@MobileL3_RRM_Types.RestrictionTimer_TV", NULL, &RestrictionTimer__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING RestrictionTimer__TV_default_coding("RAW");
const XERdescriptor_t       MBMS__SessionIdentity__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int MBMS__SessionIdentity__TV_elementIdentifier_oer_ext_arr_[0] = {};
const int MBMS__SessionIdentity__TV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t MBMS__SessionIdentity__TV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, MBMS__SessionIdentity__TV_elementIdentifier_oer_ext_arr_, 0, MBMS__SessionIdentity__TV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t MBMS__SessionIdentity__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.MBMS_SessionIdentity_TV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &MBMS__SessionIdentity__TV_elementIdentifier_xer_, &OCTETSTRING_json_, &MBMS__SessionIdentity__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MBMS__SessionIdentity__TV_elementIdentifier_default_coding("RAW");
const XERdescriptor_t       MBMS__SessionIdentity__TV_mBMS__SessionIdentityValue_xer_ = { {"mBMS_SessionIdentityValue>\n", "mBMS_SessionIdentityValue>\n"}, {27, 27}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int MBMS__SessionIdentity__TV_mBMS__SessionIdentityValue_oer_ext_arr_[0] = {};
const int MBMS__SessionIdentity__TV_mBMS__SessionIdentityValue_oer_p_[0] = {};
const TTCN_OERdescriptor_t MBMS__SessionIdentity__TV_mBMS__SessionIdentityValue_oer_ = { -1, TRUE, 1, FALSE, 0, 0, MBMS__SessionIdentity__TV_mBMS__SessionIdentityValue_oer_ext_arr_, 0, MBMS__SessionIdentity__TV_mBMS__SessionIdentityValue_oer_p_};
const TTCN_Typedescriptor_t MBMS__SessionIdentity__TV_mBMS__SessionIdentityValue_descr_ = { "@MobileL3_RRM_Types.MBMS_SessionIdentity_TV.mBMS_SessionIdentityValue", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &MBMS__SessionIdentity__TV_mBMS__SessionIdentityValue_xer_, &OCTETSTRING_json_, &MBMS__SessionIdentity__TV_mBMS__SessionIdentityValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MBMS__SessionIdentity__TV_mBMS__SessionIdentityValue_default_coding("RAW");
const TTCN_RAWdescriptor_t MBMS__SessionIdentity__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MBMS__SessionIdentity__TV
const TTCN_Typedescriptor_t MBMS__SessionIdentity__TV_descr_ = { "@MobileL3_RRM_Types.MBMS_SessionIdentity_TV", NULL, &MBMS__SessionIdentity__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MBMS__SessionIdentity__TV_default_coding("RAW");
const XERdescriptor_t       TalkerPriorityStatus__TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int TalkerPriorityStatus__TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int TalkerPriorityStatus__TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t TalkerPriorityStatus__TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, TalkerPriorityStatus__TLV_elementIdentifier_oer_ext_arr_, 0, TalkerPriorityStatus__TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t TalkerPriorityStatus__TLV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.TalkerPriorityStatus_TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &TalkerPriorityStatus__TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &TalkerPriorityStatus__TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TalkerPriorityStatus__TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t TalkerPriorityStatus__TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       TalkerPriorityStatus__TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t TalkerPriorityStatus__TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t TalkerPriorityStatus__TLV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.TalkerPriorityStatus_TLV.lengthIndicator", &INTEGER_ber_, &TalkerPriorityStatus__TLV_lengthIndicator_raw_, &INTEGER_text_, &TalkerPriorityStatus__TLV_lengthIndicator_xer_, &INTEGER_json_, &TalkerPriorityStatus__TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TalkerPriorityStatus__TLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       TalkerPriorityStatus__TLV_priority_xer_ = { {"priority>\n", "priority>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t TalkerPriorityStatus__TLV_priority_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t TalkerPriorityStatus__TLV_priority_descr_ = { "@MobileL3_RRM_Types.TalkerPriorityStatus_TLV.priority", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &TalkerPriorityStatus__TLV_priority_xer_, &BITSTRING_json_, &TalkerPriorityStatus__TLV_priority_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TalkerPriorityStatus__TLV_priority_default_coding("RAW");
const XERdescriptor_t       TalkerPriorityStatus__TLV_uAI_xer_ = { {"uAI>\n", "uAI>\n"}, {5, 5}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t TalkerPriorityStatus__TLV_uAI_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t TalkerPriorityStatus__TLV_uAI_descr_ = { "@MobileL3_RRM_Types.TalkerPriorityStatus_TLV.uAI", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &TalkerPriorityStatus__TLV_uAI_xer_, &BITSTRING_json_, &TalkerPriorityStatus__TLV_uAI_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TalkerPriorityStatus__TLV_uAI_default_coding("RAW");
const XERdescriptor_t       TalkerPriorityStatus__TLV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t TalkerPriorityStatus__TLV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t TalkerPriorityStatus__TLV_spare_descr_ = { "@MobileL3_RRM_Types.TalkerPriorityStatus_TLV.spare", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &TalkerPriorityStatus__TLV_spare_xer_, &BITSTRING_json_, &TalkerPriorityStatus__TLV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TalkerPriorityStatus__TLV_spare_default_coding("RAW");
const XERdescriptor_t       TalkerPriorityStatus__TLV_eS_xer_ = { {"eS>\n", "eS>\n"}, {4, 4}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t TalkerPriorityStatus__TLV_eS_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t TalkerPriorityStatus__TLV_eS_descr_ = { "@MobileL3_RRM_Types.TalkerPriorityStatus_TLV.eS", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &TalkerPriorityStatus__TLV_eS_xer_, &BITSTRING_json_, &TalkerPriorityStatus__TLV_eS_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TalkerPriorityStatus__TLV_eS_default_coding("RAW");
const TTCN_RAWdescriptor_t TalkerPriorityStatus__TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for TalkerPriorityStatus__TLV
const TTCN_Typedescriptor_t TalkerPriorityStatus__TLV_descr_ = { "@MobileL3_RRM_Types.TalkerPriorityStatus_TLV", NULL, &TalkerPriorityStatus__TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TalkerPriorityStatus__TLV_default_coding("RAW");
const XERdescriptor_t       TalkerIdentity__TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int TalkerIdentity__TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int TalkerIdentity__TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t TalkerIdentity__TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, TalkerIdentity__TLV_elementIdentifier_oer_ext_arr_, 0, TalkerIdentity__TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t TalkerIdentity__TLV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.TalkerIdentity_TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &TalkerIdentity__TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &TalkerIdentity__TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TalkerIdentity__TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t TalkerIdentity__TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       TalkerIdentity__TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t TalkerIdentity__TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t TalkerIdentity__TLV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.TalkerIdentity_TLV.lengthIndicator", &INTEGER_ber_, &TalkerIdentity__TLV_lengthIndicator_raw_, &INTEGER_text_, &TalkerIdentity__TLV_lengthIndicator_xer_, &INTEGER_json_, &TalkerIdentity__TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TalkerIdentity__TLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       TalkerIdentity__TLV_fillerBits_xer_ = { {"fillerBits>\n", "fillerBits>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t TalkerIdentity__TLV_fillerBits_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t TalkerIdentity__TLV_fillerBits_descr_ = { "@MobileL3_RRM_Types.TalkerIdentity_TLV.fillerBits", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &TalkerIdentity__TLV_fillerBits_xer_, &BITSTRING_json_, &TalkerIdentity__TLV_fillerBits_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TalkerIdentity__TLV_fillerBits_default_coding("RAW");
const XERdescriptor_t       TalkerIdentity__TLV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t TalkerIdentity__TLV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t TalkerIdentity__TLV_spare_descr_ = { "@MobileL3_RRM_Types.TalkerIdentity_TLV.spare", &BITSTRING_ber_, &General__Types::BIT5_raw_, NULL, &TalkerIdentity__TLV_spare_xer_, &BITSTRING_json_, &TalkerIdentity__TLV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TalkerIdentity__TLV_spare_default_coding("RAW");
const TTCN_RAWdescriptor_t TalkerIdentity__TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for TalkerIdentity__TLV
const TTCN_Typedescriptor_t TalkerIdentity__TLV_descr_ = { "@MobileL3_RRM_Types.TalkerIdentity_TLV", NULL, &TalkerIdentity__TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const XERdescriptor_t       TalkerIdentity__TLV_talkerIdentityField_xer_ = { {"talkerIdentityField>\n", "talkerIdentityField>\n"}, {21, 21}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int TalkerIdentity__TLV_talkerIdentityField_oer_ext_arr_[0] = {};
const int TalkerIdentity__TLV_talkerIdentityField_oer_p_[0] = {};
const TTCN_OERdescriptor_t TalkerIdentity__TLV_talkerIdentityField_oer_ = { -1, TRUE, 17, FALSE, 0, 0, TalkerIdentity__TLV_talkerIdentityField_oer_ext_arr_, 0, TalkerIdentity__TLV_talkerIdentityField_oer_p_};
const TTCN_Typedescriptor_t TalkerIdentity__TLV_talkerIdentityField_descr_ = { "@MobileL3_RRM_Types.TalkerIdentity_TLV.talkerIdentityField", &OCTETSTRING_ber_, &General__Types::OCT17_raw_, &OCTETSTRING_text_, &TalkerIdentity__TLV_talkerIdentityField_xer_, &OCTETSTRING_json_, &TalkerIdentity__TLV_talkerIdentityField_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING TalkerIdentity__TLV_talkerIdentityField_default_coding("RAW");
UNIVERSAL_CHARSTRING TalkerIdentity__TLV_default_coding("RAW");
const XERdescriptor_t       Token__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int Token__TV_elementIdentifier_oer_ext_arr_[0] = {};
const int Token__TV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t Token__TV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, Token__TV_elementIdentifier_oer_ext_arr_, 0, Token__TV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t Token__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.Token_TV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &Token__TV_elementIdentifier_xer_, &OCTETSTRING_json_, &Token__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING Token__TV_elementIdentifier_default_coding("RAW");
const XERdescriptor_t       Token__TV_tokenValue_xer_ = { {"tokenValue>\n", "tokenValue>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int Token__TV_tokenValue_oer_ext_arr_[0] = {};
const int Token__TV_tokenValue_oer_p_[0] = {};
const TTCN_OERdescriptor_t Token__TV_tokenValue_oer_ = { -1, TRUE, 4, FALSE, 0, 0, Token__TV_tokenValue_oer_ext_arr_, 0, Token__TV_tokenValue_oer_p_};
const TTCN_Typedescriptor_t Token__TV_tokenValue_descr_ = { "@MobileL3_RRM_Types.Token_TV.tokenValue", &OCTETSTRING_ber_, &General__Types::OCT4_raw_, &OCTETSTRING_text_, &Token__TV_tokenValue_xer_, &OCTETSTRING_json_, &Token__TV_tokenValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING Token__TV_tokenValue_default_coding("RAW");
const TTCN_RAWdescriptor_t Token__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for Token__TV
const TTCN_Typedescriptor_t Token__TV_descr_ = { "@MobileL3_RRM_Types.Token_TV", NULL, &Token__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING Token__TV_default_coding("RAW");
const XERdescriptor_t       PS__Cause__TV_causeValue_xer_ = { {"causeValue>\n", "causeValue>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PS__Cause__TV_causeValue_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PS__Cause__TV_causeValue_descr_ = { "@MobileL3_RRM_Types.PS_Cause_TV.causeValue", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &PS__Cause__TV_causeValue_xer_, &BITSTRING_json_, &PS__Cause__TV_causeValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PS__Cause__TV_causeValue_default_coding("RAW");
const XERdescriptor_t       PS__Cause__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PS__Cause__TV_elementIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PS__Cause__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.PS_Cause_TV.elementIdentifier", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &PS__Cause__TV_elementIdentifier_xer_, &BITSTRING_json_, &PS__Cause__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PS__Cause__TV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t PS__Cause__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PS__Cause__TV
const TTCN_Typedescriptor_t PS__Cause__TV_descr_ = { "@MobileL3_RRM_Types.PS_Cause_TV", NULL, &PS__Cause__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PS__Cause__TV_default_coding("RAW");
const XERdescriptor_t       VGCS__AMR__Configuration__TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int VGCS__AMR__Configuration__TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int VGCS__AMR__Configuration__TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t VGCS__AMR__Configuration__TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, VGCS__AMR__Configuration__TLV_elementIdentifier_oer_ext_arr_, 0, VGCS__AMR__Configuration__TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t VGCS__AMR__Configuration__TLV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.VGCS_AMR_Configuration_TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &VGCS__AMR__Configuration__TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &VGCS__AMR__Configuration__TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VGCS__AMR__Configuration__TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t VGCS__AMR__Configuration__TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       VGCS__AMR__Configuration__TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t VGCS__AMR__Configuration__TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t VGCS__AMR__Configuration__TLV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.VGCS_AMR_Configuration_TLV.lengthIndicator", &INTEGER_ber_, &VGCS__AMR__Configuration__TLV_lengthIndicator_raw_, &INTEGER_text_, &VGCS__AMR__Configuration__TLV_lengthIndicator_xer_, &INTEGER_json_, &VGCS__AMR__Configuration__TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VGCS__AMR__Configuration__TLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       VGCS__AMR__Configuration__TLV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t VGCS__AMR__Configuration__TLV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t VGCS__AMR__Configuration__TLV_spare_descr_ = { "@MobileL3_RRM_Types.VGCS_AMR_Configuration_TLV.spare", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &VGCS__AMR__Configuration__TLV_spare_xer_, &BITSTRING_json_, &VGCS__AMR__Configuration__TLV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VGCS__AMR__Configuration__TLV_spare_default_coding("RAW");
const XERdescriptor_t       VGCS__AMR__Configuration__TLV_aMR__ConfigurationValue_xer_ = { {"aMR_ConfigurationValue>\n", "aMR_ConfigurationValue>\n"}, {24, 24}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t VGCS__AMR__Configuration__TLV_aMR__ConfigurationValue_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t VGCS__AMR__Configuration__TLV_aMR__ConfigurationValue_descr_ = { "@MobileL3_RRM_Types.VGCS_AMR_Configuration_TLV.aMR_ConfigurationValue", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &VGCS__AMR__Configuration__TLV_aMR__ConfigurationValue_xer_, &BITSTRING_json_, &VGCS__AMR__Configuration__TLV_aMR__ConfigurationValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VGCS__AMR__Configuration__TLV_aMR__ConfigurationValue_default_coding("RAW");
const TTCN_RAWdescriptor_t VGCS__AMR__Configuration__TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for VGCS__AMR__Configuration__TLV
const TTCN_Typedescriptor_t VGCS__AMR__Configuration__TLV_descr_ = { "@MobileL3_RRM_Types.VGCS_AMR_Configuration_TLV", NULL, &VGCS__AMR__Configuration__TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING VGCS__AMR__Configuration__TLV_default_coding("RAW");
const XERdescriptor_t       CarrierIndication__TV_cI_xer_ = { {"cI>\n", "cI>\n"}, {4, 4}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t CarrierIndication__TV_cI_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t CarrierIndication__TV_cI_descr_ = { "@MobileL3_RRM_Types.CarrierIndication_TV.cI", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &CarrierIndication__TV_cI_xer_, &BITSTRING_json_, &CarrierIndication__TV_cI_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CarrierIndication__TV_cI_default_coding("RAW");
const XERdescriptor_t       CarrierIndication__TV_spare1__3_xer_ = { {"spare1_3>\n", "spare1_3>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t CarrierIndication__TV_spare1__3_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t CarrierIndication__TV_spare1__3_descr_ = { "@MobileL3_RRM_Types.CarrierIndication_TV.spare1_3", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &CarrierIndication__TV_spare1__3_xer_, &BITSTRING_json_, &CarrierIndication__TV_spare1__3_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CarrierIndication__TV_spare1__3_default_coding("RAW");
const XERdescriptor_t       CarrierIndication__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t CarrierIndication__TV_elementIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t CarrierIndication__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.CarrierIndication_TV.elementIdentifier", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &CarrierIndication__TV_elementIdentifier_xer_, &BITSTRING_json_, &CarrierIndication__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CarrierIndication__TV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t CarrierIndication__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for CarrierIndication__TV
const TTCN_Typedescriptor_t CarrierIndication__TV_descr_ = { "@MobileL3_RRM_Types.CarrierIndication_TV", NULL, &CarrierIndication__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CarrierIndication__TV_default_coding("RAW");
const XERdescriptor_t       UplinkAccessIndication__TV_uA__Ind_xer_ = { {"uA_Ind>\n", "uA_Ind>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UplinkAccessIndication__TV_uA__Ind_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UplinkAccessIndication__TV_uA__Ind_descr_ = { "@MobileL3_RRM_Types.UplinkAccessIndication_TV.uA_Ind", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &UplinkAccessIndication__TV_uA__Ind_xer_, &BITSTRING_json_, &UplinkAccessIndication__TV_uA__Ind_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UplinkAccessIndication__TV_uA__Ind_default_coding("RAW");
const XERdescriptor_t       UplinkAccessIndication__TV_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UplinkAccessIndication__TV_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UplinkAccessIndication__TV_spare_descr_ = { "@MobileL3_RRM_Types.UplinkAccessIndication_TV.spare", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &UplinkAccessIndication__TV_spare_xer_, &BITSTRING_json_, &UplinkAccessIndication__TV_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UplinkAccessIndication__TV_spare_default_coding("RAW");
const XERdescriptor_t       UplinkAccessIndication__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t UplinkAccessIndication__TV_elementIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t UplinkAccessIndication__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.UplinkAccessIndication_TV.elementIdentifier", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &UplinkAccessIndication__TV_elementIdentifier_xer_, &BITSTRING_json_, &UplinkAccessIndication__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UplinkAccessIndication__TV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t UplinkAccessIndication__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for UplinkAccessIndication__TV
const TTCN_Typedescriptor_t UplinkAccessIndication__TV_descr_ = { "@MobileL3_RRM_Types.UplinkAccessIndication_TV", NULL, &UplinkAccessIndication__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING UplinkAccessIndication__TV_default_coding("RAW");
const XERdescriptor_t       Individual__Priorities__TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int Individual__Priorities__TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int Individual__Priorities__TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t Individual__Priorities__TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, Individual__Priorities__TLV_elementIdentifier_oer_ext_arr_, 0, Individual__Priorities__TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t Individual__Priorities__TLV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.Individual_Priorities_TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &Individual__Priorities__TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &Individual__Priorities__TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING Individual__Priorities__TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t Individual__Priorities__TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       Individual__Priorities__TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t Individual__Priorities__TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t Individual__Priorities__TLV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.Individual_Priorities_TLV.lengthIndicator", &INTEGER_ber_, &Individual__Priorities__TLV_lengthIndicator_raw_, &INTEGER_text_, &Individual__Priorities__TLV_lengthIndicator_xer_, &INTEGER_json_, &Individual__Priorities__TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING Individual__Priorities__TLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       Individual__Priorities__TLV_individualPrioritiesValue_xer_ = { {"individualPrioritiesValue>\n", "individualPrioritiesValue>\n"}, {27, 27}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int Individual__Priorities__TLV_individualPrioritiesValue_oer_ext_arr_[0] = {};
const int Individual__Priorities__TLV_individualPrioritiesValue_oer_p_[0] = {};
const TTCN_OERdescriptor_t Individual__Priorities__TLV_individualPrioritiesValue_oer_ = { -1, TRUE, -1, FALSE, 0, 0, Individual__Priorities__TLV_individualPrioritiesValue_oer_ext_arr_, 0, Individual__Priorities__TLV_individualPrioritiesValue_oer_p_};
const TTCN_Typedescriptor_t Individual__Priorities__TLV_individualPrioritiesValue_descr_ = { "@MobileL3_RRM_Types.Individual_Priorities_TLV.individualPrioritiesValue", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &Individual__Priorities__TLV_individualPrioritiesValue_xer_, &OCTETSTRING_json_, &Individual__Priorities__TLV_individualPrioritiesValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING Individual__Priorities__TLV_individualPrioritiesValue_default_coding("RAW");
const TTCN_RAWdescriptor_t Individual__Priorities__TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for Individual__Priorities__TLV
const TTCN_Typedescriptor_t Individual__Priorities__TLV_descr_ = { "@MobileL3_RRM_Types.Individual_Priorities_TLV", NULL, &Individual__Priorities__TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING Individual__Priorities__TLV_default_coding("RAW");
const XERdescriptor_t       FeatureIndicator__V_pS__IR_xer_ = { {"pS_IR>\n", "pS_IR>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t FeatureIndicator__V_pS__IR_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t FeatureIndicator__V_pS__IR_descr_ = { "@MobileL3_RRM_Types.FeatureIndicator_V.pS_IR", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &FeatureIndicator__V_pS__IR_xer_, &BITSTRING_json_, &FeatureIndicator__V_pS__IR_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FeatureIndicator__V_pS__IR_default_coding("RAW");
const XERdescriptor_t       FeatureIndicator__V_cs__IR_xer_ = { {"cs_IR>\n", "cs_IR>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t FeatureIndicator__V_cs__IR_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t FeatureIndicator__V_cs__IR_descr_ = { "@MobileL3_RRM_Types.FeatureIndicator_V.cs_IR", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &FeatureIndicator__V_cs__IR_xer_, &BITSTRING_json_, &FeatureIndicator__V_cs__IR_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FeatureIndicator__V_cs__IR_default_coding("RAW");
const XERdescriptor_t       FeatureIndicator__V_spare_xer_ = { {"spare>\n", "spare>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t FeatureIndicator__V_spare_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t FeatureIndicator__V_spare_descr_ = { "@MobileL3_RRM_Types.FeatureIndicator_V.spare", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &FeatureIndicator__V_spare_xer_, &BITSTRING_json_, &FeatureIndicator__V_spare_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FeatureIndicator__V_spare_default_coding("RAW");
const XERdescriptor_t       FeatureIndicator__V_pEO__BCCH__CHANGE__MARK_xer_ = { {"pEO_BCCH_CHANGE_MARK>\n", "pEO_BCCH_CHANGE_MARK>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t FeatureIndicator__V_pEO__BCCH__CHANGE__MARK_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t FeatureIndicator__V_pEO__BCCH__CHANGE__MARK_descr_ = { "@MobileL3_RRM_Types.FeatureIndicator_V.pEO_BCCH_CHANGE_MARK", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &FeatureIndicator__V_pEO__BCCH__CHANGE__MARK_xer_, &BITSTRING_json_, &FeatureIndicator__V_pEO__BCCH__CHANGE__MARK_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FeatureIndicator__V_pEO__BCCH__CHANGE__MARK_default_coding("RAW");
const TTCN_RAWdescriptor_t FeatureIndicator__V_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for FeatureIndicator__V
const TTCN_Typedescriptor_t FeatureIndicator__V_descr_ = { "@MobileL3_RRM_Types.FeatureIndicator_V", NULL, &FeatureIndicator__V_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING FeatureIndicator__V_default_coding("RAW");
const TTCN_RAWdescriptor_t DL__DCCH__Message__LV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       DL__DCCH__Message__LV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t DL__DCCH__Message__LV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t DL__DCCH__Message__LV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.DL_DCCH_Message_LV.lengthIndicator", &INTEGER_ber_, &DL__DCCH__Message__LV_lengthIndicator_raw_, &INTEGER_text_, &DL__DCCH__Message__LV_lengthIndicator_xer_, &INTEGER_json_, &DL__DCCH__Message__LV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DL__DCCH__Message__LV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       DL__DCCH__Message__LV_dL__DCCH__MessageValue_xer_ = { {"dL_DCCH_MessageValue>\n", "dL_DCCH_MessageValue>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int DL__DCCH__Message__LV_dL__DCCH__MessageValue_oer_ext_arr_[0] = {};
const int DL__DCCH__Message__LV_dL__DCCH__MessageValue_oer_p_[0] = {};
const TTCN_OERdescriptor_t DL__DCCH__Message__LV_dL__DCCH__MessageValue_oer_ = { -1, TRUE, -1, FALSE, 0, 0, DL__DCCH__Message__LV_dL__DCCH__MessageValue_oer_ext_arr_, 0, DL__DCCH__Message__LV_dL__DCCH__MessageValue_oer_p_};
const TTCN_Typedescriptor_t DL__DCCH__Message__LV_dL__DCCH__MessageValue_descr_ = { "@MobileL3_RRM_Types.DL_DCCH_Message_LV.dL_DCCH_MessageValue", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &DL__DCCH__Message__LV_dL__DCCH__MessageValue_xer_, &OCTETSTRING_json_, &DL__DCCH__Message__LV_dL__DCCH__MessageValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DL__DCCH__Message__LV_dL__DCCH__MessageValue_default_coding("RAW");
const TTCN_RAWdescriptor_t DL__DCCH__Message__LV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for DL__DCCH__Message__LV
const TTCN_Typedescriptor_t DL__DCCH__Message__LV_descr_ = { "@MobileL3_RRM_Types.DL_DCCH_Message_LV", NULL, &DL__DCCH__Message__LV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING DL__DCCH__Message__LV_default_coding("RAW");
const XERdescriptor_t       CNToMSTransparentInformation__TLV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int CNToMSTransparentInformation__TLV_elementIdentifier_oer_ext_arr_[0] = {};
const int CNToMSTransparentInformation__TLV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t CNToMSTransparentInformation__TLV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, CNToMSTransparentInformation__TLV_elementIdentifier_oer_ext_arr_, 0, CNToMSTransparentInformation__TLV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t CNToMSTransparentInformation__TLV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.CNToMSTransparentInformation_TLV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &CNToMSTransparentInformation__TLV_elementIdentifier_xer_, &OCTETSTRING_json_, &CNToMSTransparentInformation__TLV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CNToMSTransparentInformation__TLV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t CNToMSTransparentInformation__TLV_lengthIndicator_raw_ = {8,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       CNToMSTransparentInformation__TLV_lengthIndicator_xer_ = { {"lengthIndicator>\n", "lengthIndicator>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t CNToMSTransparentInformation__TLV_lengthIndicator_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t CNToMSTransparentInformation__TLV_lengthIndicator_descr_ = { "@MobileL3_RRM_Types.CNToMSTransparentInformation_TLV.lengthIndicator", &INTEGER_ber_, &CNToMSTransparentInformation__TLV_lengthIndicator_raw_, &INTEGER_text_, &CNToMSTransparentInformation__TLV_lengthIndicator_xer_, &INTEGER_json_, &CNToMSTransparentInformation__TLV_lengthIndicator_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CNToMSTransparentInformation__TLV_lengthIndicator_default_coding("RAW");
const XERdescriptor_t       CNToMSTransparentInformation__TLV_cNToMSTransparentInformationValue_xer_ = { {"cNToMSTransparentInformationValue>\n", "cNToMSTransparentInformationValue>\n"}, {35, 35}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int CNToMSTransparentInformation__TLV_cNToMSTransparentInformationValue_oer_ext_arr_[0] = {};
const int CNToMSTransparentInformation__TLV_cNToMSTransparentInformationValue_oer_p_[0] = {};
const TTCN_OERdescriptor_t CNToMSTransparentInformation__TLV_cNToMSTransparentInformationValue_oer_ = { -1, TRUE, -1, FALSE, 0, 0, CNToMSTransparentInformation__TLV_cNToMSTransparentInformationValue_oer_ext_arr_, 0, CNToMSTransparentInformation__TLV_cNToMSTransparentInformationValue_oer_p_};
const TTCN_Typedescriptor_t CNToMSTransparentInformation__TLV_cNToMSTransparentInformationValue_descr_ = { "@MobileL3_RRM_Types.CNToMSTransparentInformation_TLV.cNToMSTransparentInformationValue", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &CNToMSTransparentInformation__TLV_cNToMSTransparentInformationValue_xer_, &OCTETSTRING_json_, &CNToMSTransparentInformation__TLV_cNToMSTransparentInformationValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CNToMSTransparentInformation__TLV_cNToMSTransparentInformationValue_default_coding("RAW");
const TTCN_RAWdescriptor_t CNToMSTransparentInformation__TLV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for CNToMSTransparentInformation__TLV
const TTCN_Typedescriptor_t CNToMSTransparentInformation__TLV_descr_ = { "@MobileL3_RRM_Types.CNToMSTransparentInformation_TLV", NULL, &CNToMSTransparentInformation__TLV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING CNToMSTransparentInformation__TLV_default_coding("RAW");
const XERdescriptor_t       PLMNIndex__TV_pLMNIndex_xer_ = { {"pLMNIndex>\n", "pLMNIndex>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PLMNIndex__TV_pLMNIndex_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PLMNIndex__TV_pLMNIndex_descr_ = { "@MobileL3_RRM_Types.PLMNIndex_TV.pLMNIndex", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &PLMNIndex__TV_pLMNIndex_xer_, &BITSTRING_json_, &PLMNIndex__TV_pLMNIndex_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PLMNIndex__TV_pLMNIndex_default_coding("RAW");
const XERdescriptor_t       PLMNIndex__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PLMNIndex__TV_elementIdentifier_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PLMNIndex__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.PLMNIndex_TV.elementIdentifier", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &PLMNIndex__TV_elementIdentifier_xer_, &BITSTRING_json_, &PLMNIndex__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PLMNIndex__TV_elementIdentifier_default_coding("RAW");
const TTCN_RAWdescriptor_t PLMNIndex__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PLMNIndex__TV
const TTCN_Typedescriptor_t PLMNIndex__TV_descr_ = { "@MobileL3_RRM_Types.PLMNIndex_TV", NULL, &PLMNIndex__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PLMNIndex__TV_default_coding("RAW");
const XERdescriptor_t       ExtendedTSCSet__TV_elementIdentifier_xer_ = { {"elementIdentifier>\n", "elementIdentifier>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int ExtendedTSCSet__TV_elementIdentifier_oer_ext_arr_[0] = {};
const int ExtendedTSCSet__TV_elementIdentifier_oer_p_[0] = {};
const TTCN_OERdescriptor_t ExtendedTSCSet__TV_elementIdentifier_oer_ = { -1, TRUE, 1, FALSE, 0, 0, ExtendedTSCSet__TV_elementIdentifier_oer_ext_arr_, 0, ExtendedTSCSet__TV_elementIdentifier_oer_p_};
const TTCN_Typedescriptor_t ExtendedTSCSet__TV_elementIdentifier_descr_ = { "@MobileL3_RRM_Types.ExtendedTSCSet_TV.elementIdentifier", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &ExtendedTSCSet__TV_elementIdentifier_xer_, &OCTETSTRING_json_, &ExtendedTSCSet__TV_elementIdentifier_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ExtendedTSCSet__TV_elementIdentifier_default_coding("RAW");
const XERdescriptor_t       ExtendedTSCSet__TV_cSDomainTSCSet_xer_ = { {"cSDomainTSCSet>\n", "cSDomainTSCSet>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ExtendedTSCSet__TV_cSDomainTSCSet_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ExtendedTSCSet__TV_cSDomainTSCSet_descr_ = { "@MobileL3_RRM_Types.ExtendedTSCSet_TV.cSDomainTSCSet", &BITSTRING_ber_, &General__Types::BIT2_raw_, NULL, &ExtendedTSCSet__TV_cSDomainTSCSet_xer_, &BITSTRING_json_, &ExtendedTSCSet__TV_cSDomainTSCSet_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ExtendedTSCSet__TV_cSDomainTSCSet_default_coding("RAW");
const XERdescriptor_t       ExtendedTSCSet__TV_secondPSDomainTSCAssigned_xer_ = { {"secondPSDomainTSCAssigned>\n", "secondPSDomainTSCAssigned>\n"}, {27, 27}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ExtendedTSCSet__TV_secondPSDomainTSCAssigned_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ExtendedTSCSet__TV_secondPSDomainTSCAssigned_descr_ = { "@MobileL3_RRM_Types.ExtendedTSCSet_TV.secondPSDomainTSCAssigned", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &ExtendedTSCSet__TV_secondPSDomainTSCAssigned_xer_, &BITSTRING_json_, &ExtendedTSCSet__TV_secondPSDomainTSCAssigned_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ExtendedTSCSet__TV_secondPSDomainTSCAssigned_default_coding("RAW");
const XERdescriptor_t       ExtendedTSCSet__TV_primaryPSDomainTSCSet_xer_ = { {"primaryPSDomainTSCSet>\n", "primaryPSDomainTSCSet>\n"}, {23, 23}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ExtendedTSCSet__TV_primaryPSDomainTSCSet_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ExtendedTSCSet__TV_primaryPSDomainTSCSet_descr_ = { "@MobileL3_RRM_Types.ExtendedTSCSet_TV.primaryPSDomainTSCSet", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &ExtendedTSCSet__TV_primaryPSDomainTSCSet_xer_, &BITSTRING_json_, &ExtendedTSCSet__TV_primaryPSDomainTSCSet_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ExtendedTSCSet__TV_primaryPSDomainTSCSet_default_coding("RAW");
const XERdescriptor_t       ExtendedTSCSet__TV_secondaryPSDomainTSCSet_xer_ = { {"secondaryPSDomainTSCSet>\n", "secondaryPSDomainTSCSet>\n"}, {25, 25}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ExtendedTSCSet__TV_secondaryPSDomainTSCSet_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ExtendedTSCSet__TV_secondaryPSDomainTSCSet_descr_ = { "@MobileL3_RRM_Types.ExtendedTSCSet_TV.secondaryPSDomainTSCSet", &BITSTRING_ber_, &General__Types::BIT1_raw_, NULL, &ExtendedTSCSet__TV_secondaryPSDomainTSCSet_xer_, &BITSTRING_json_, &ExtendedTSCSet__TV_secondaryPSDomainTSCSet_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ExtendedTSCSet__TV_secondaryPSDomainTSCSet_default_coding("RAW");
const XERdescriptor_t       ExtendedTSCSet__TV_secondaryPSDomainTSCValue_xer_ = { {"secondaryPSDomainTSCValue>\n", "secondaryPSDomainTSCValue>\n"}, {27, 27}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t ExtendedTSCSet__TV_secondaryPSDomainTSCValue_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t ExtendedTSCSet__TV_secondaryPSDomainTSCValue_descr_ = { "@MobileL3_RRM_Types.ExtendedTSCSet_TV.secondaryPSDomainTSCValue", &BITSTRING_ber_, &General__Types::BIT3_raw_, NULL, &ExtendedTSCSet__TV_secondaryPSDomainTSCValue_xer_, &BITSTRING_json_, &ExtendedTSCSet__TV_secondaryPSDomainTSCValue_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ExtendedTSCSet__TV_secondaryPSDomainTSCValue_default_coding("RAW");
const TTCN_RAWdescriptor_t ExtendedTSCSet__TV_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for ExtendedTSCSet__TV
const TTCN_Typedescriptor_t ExtendedTSCSet__TV_descr_ = { "@MobileL3_RRM_Types.ExtendedTSCSet_TV", NULL, &ExtendedTSCSet__TV_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING ExtendedTSCSet__TV_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__AdditionalAssignment__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__AdditionalAssignment__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__AdditionalAssignment__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_AdditionalAssignment_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__AdditionalAssignment__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__AdditionalAssignment__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__AdditionalAssignment__NW__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AdditionalAssignment__NW__MS_channelDescription_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__AdditionalAssignment__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__AdditionalAssignment__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__AdditionalAssignment__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_AdditionalAssignment_NW_MS", NULL, &PDU__RRM__AdditionalAssignment__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__AdditionalAssignment__NW__MS_mobileAllocation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AdditionalAssignment__NW__MS_startingTime_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AdditionalAssignment__NW__MS_extendedTSCSet_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AdditionalAssignment__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__AssignmentCommand__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__AssignmentCommand__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__AssignmentCommand__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_AssignmentCommand_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__AssignmentCommand__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__AssignmentCommand__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_descrOf1stChAfterTime_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_PowerCommand_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__AssignmentCommand__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__AssignmentCommand__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__AssignmentCommand__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_AssignmentCommand_NW_MS", NULL, &PDU__RRM__AssignmentCommand__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_frequencyList__at_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_cellChannelDescr_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_descrMultislotAllocation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_modeOf1stChannel_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_channelSet2_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_channelSet3_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_channelSet4_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_channelSet5_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_channelSet6_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_channelSet7_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_channelSet8_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_descrOf2ndChAfterTime_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_modeOf2ndChannel_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_mobileAllocation__at_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_startingTime_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_frequencyList__bt_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_descrOf1stCh__bt_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_descrOf2ndCh__bt_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_frequencyChannelSequence_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_mobileAllocation__bt_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_cipherModeSetting_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_vGCS__TargetModeIndication_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_multiRateConfiguration_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_vGCS__Ciphering__Parameters_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_extendedTSCSet__afterTime_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_extendedTSCSet__beforeTime_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentCommand__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__AssignmentComplete__MS__NW_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__AssignmentComplete__MS__NW_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__AssignmentComplete__MS__NW_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_AssignmentComplete_MS_NW.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__AssignmentComplete__MS__NW_messageType_xer_, &BITSTRING_json_, &PDU__RRM__AssignmentComplete__MS__NW_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentComplete__MS__NW_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentComplete__MS__NW_rR__Cause_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__AssignmentComplete__MS__NW_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__AssignmentComplete__MS__NW
const TTCN_Typedescriptor_t PDU__RRM__AssignmentComplete__MS__NW_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_AssignmentComplete_MS_NW", NULL, &PDU__RRM__AssignmentComplete__MS__NW_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentComplete__MS__NW_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__AssignmentFailure__MS__NW_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__AssignmentFailure__MS__NW_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__AssignmentFailure__MS__NW_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_AssignmentFailure_MS_NW.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__AssignmentFailure__MS__NW_messageType_xer_, &BITSTRING_json_, &PDU__RRM__AssignmentFailure__MS__NW_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentFailure__MS__NW_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentFailure__MS__NW_rR__Cause_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__AssignmentFailure__MS__NW_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__AssignmentFailure__MS__NW
const TTCN_Typedescriptor_t PDU__RRM__AssignmentFailure__MS__NW_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_AssignmentFailure_MS_NW", NULL, &PDU__RRM__AssignmentFailure__MS__NW_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__AssignmentFailure__MS__NW_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__ChannelModeModify__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__ChannelModeModify__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__ChannelModeModify__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ChannelModeModify_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__ChannelModeModify__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__ChannelModeModify__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ChannelModeModify__NW__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ChannelModeModify__NW__MS_channelDescription_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ChannelModeModify__NW__MS_channelMode_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__ChannelModeModify__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__ChannelModeModify__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__ChannelModeModify__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ChannelModeModify_NW_MS", NULL, &PDU__RRM__ChannelModeModify__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ChannelModeModify__NW__MS_vGCS__TargetModeIndication_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ChannelModeModify__NW__MS_multiRateConfiguration_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ChannelModeModify__NW__MS_vGCS__Ciphering__Parameters_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ChannelModeModify__NW__MS_extendedTSCSet_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ChannelModeModify__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__ChannelModeModifyAck__MS__NW_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__ChannelModeModifyAck__MS__NW_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__ChannelModeModifyAck__MS__NW_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ChannelModeModifyAck_MS_NW.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__ChannelModeModifyAck__MS__NW_messageType_xer_, &BITSTRING_json_, &PDU__RRM__ChannelModeModifyAck__MS__NW_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ChannelModeModifyAck__MS__NW_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ChannelModeModifyAck__MS__NW_channelDescription_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ChannelModeModifyAck__MS__NW_channelMode_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__ChannelModeModifyAck__MS__NW_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__ChannelModeModifyAck__MS__NW
const TTCN_Typedescriptor_t PDU__RRM__ChannelModeModifyAck__MS__NW_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ChannelModeModifyAck_MS_NW", NULL, &PDU__RRM__ChannelModeModifyAck__MS__NW_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ChannelModeModifyAck__MS__NW_extendedTSCSet_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ChannelModeModifyAck__MS__NW_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__ChannelRelease__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__ChannelRelease__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__ChannelRelease__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ChannelRelease_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__ChannelRelease__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__ChannelRelease__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ChannelRelease__NW__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ChannelRelease__NW__MS_rRCause_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__ChannelRelease__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__ChannelRelease__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__ChannelRelease__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ChannelRelease_NW_MS", NULL, &PDU__RRM__ChannelRelease__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ChannelRelease__NW__MS_bARange_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ChannelRelease__NW__MS_groupChannelDescription_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ChannelRelease__NW__MS_groupCipherKeyNumber_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ChannelRelease__NW__MS_gPRSResumption_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ChannelRelease__NW__MS_bAListPref_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ChannelRelease__NW__MS_uTRANFrequencyList_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ChannelRelease__NW__MS_cellChannelDescr_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ChannelRelease__NW__MS_cellSelectionIndicator_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ChannelRelease__NW__MS_enhanced__DTM__CS__Release__Indication_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ChannelRelease__NW__MS_vGCS__Ciphering__Parameters_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ChannelRelease__NW__MS_group__Channel__Description__2_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ChannelRelease__NW__MS_talkerIdentity_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ChannelRelease__NW__MS_talkerPriorityStatus_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ChannelRelease__NW__MS_vGCS__AMR__Configuration_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ChannelRelease__NW__MS_individual__Priorities_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ChannelRelease__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__CipheringModeCommand__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__CipheringModeCommand__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__CipheringModeCommand__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_CipheringModeCommand_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__CipheringModeCommand__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__CipheringModeCommand__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__CipheringModeCommand__NW__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__CipheringModeCommand__NW__MS_cipherModeSetting_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__CipheringModeCommand__NW__MS_cipherModeResponse_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__CipheringModeCommand__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__CipheringModeCommand__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__CipheringModeCommand__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_CipheringModeCommand_NW_MS", NULL, &PDU__RRM__CipheringModeCommand__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__CipheringModeCommand__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__CipheringModeComplete__MS__NW_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__CipheringModeComplete__MS__NW_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__CipheringModeComplete__MS__NW_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_CipheringModeComplete_MS_NW.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__CipheringModeComplete__MS__NW_messageType_xer_, &BITSTRING_json_, &PDU__RRM__CipheringModeComplete__MS__NW_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__CipheringModeComplete__MS__NW_messageType_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__CipheringModeComplete__MS__NW_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__CipheringModeComplete__MS__NW
const TTCN_Typedescriptor_t PDU__RRM__CipheringModeComplete__MS__NW_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_CipheringModeComplete_MS_NW", NULL, &PDU__RRM__CipheringModeComplete__MS__NW_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__CipheringModeComplete__MS__NW_mobileEquipmentIdentity_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__CipheringModeComplete__MS__NW_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__ClassmarkChange__MS__NW_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__ClassmarkChange__MS__NW_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__ClassmarkChange__MS__NW_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ClassmarkChange_MS_NW.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__ClassmarkChange__MS__NW_messageType_xer_, &BITSTRING_json_, &PDU__RRM__ClassmarkChange__MS__NW_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ClassmarkChange__MS__NW_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ClassmarkChange__MS__NW_mobileStationClassmark2_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__ClassmarkChange__MS__NW_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__ClassmarkChange__MS__NW
const TTCN_Typedescriptor_t PDU__RRM__ClassmarkChange__MS__NW_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ClassmarkChange_MS_NW", NULL, &PDU__RRM__ClassmarkChange__MS__NW_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ClassmarkChange__MS__NW_mobileStationClassmark3_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ClassmarkChange__MS__NW_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__UTRAN__ClassmarkChange__MS__NW_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__UTRAN__ClassmarkChange__MS__NW_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__UTRAN__ClassmarkChange__MS__NW_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_UTRAN_ClassmarkChange_MS_NW.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__UTRAN__ClassmarkChange__MS__NW_messageType_xer_, &BITSTRING_json_, &PDU__RRM__UTRAN__ClassmarkChange__MS__NW_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__UTRAN__ClassmarkChange__MS__NW_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__UTRAN__ClassmarkChange__MS__NW_uTRAN__Classmark_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__UTRAN__ClassmarkChange__MS__NW_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__UTRAN__ClassmarkChange__MS__NW
const TTCN_Typedescriptor_t PDU__RRM__UTRAN__ClassmarkChange__MS__NW_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_UTRAN_ClassmarkChange_MS_NW", NULL, &PDU__RRM__UTRAN__ClassmarkChange__MS__NW_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__UTRAN__ClassmarkChange__MS__NW_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__CDMA2000__ClassmarkChange__MS__NW_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__CDMA2000__ClassmarkChange__MS__NW_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__CDMA2000__ClassmarkChange__MS__NW_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_CDMA2000_ClassmarkChange_MS_NW.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__CDMA2000__ClassmarkChange__MS__NW_messageType_xer_, &BITSTRING_json_, &PDU__RRM__CDMA2000__ClassmarkChange__MS__NW_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__CDMA2000__ClassmarkChange__MS__NW_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__CDMA2000__ClassmarkChange__MS__NW_terminalInformation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__CDMA2000__ClassmarkChange__MS__NW_securityStatus_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__CDMA2000__ClassmarkChange__MS__NW_bandClassInformation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__CDMA2000__ClassmarkChange__MS__NW_powerClassInformation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__CDMA2000__ClassmarkChange__MS__NW_operatingModeInformation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__CDMA2000__ClassmarkChange__MS__NW_serviceOptionInformation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__CDMA2000__ClassmarkChange__MS__NW_multiplexOptionInformation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__CDMA2000__ClassmarkChange__MS__NW_powerControlInformation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__CDMA2000__ClassmarkChange__MS__NW_capabilityInformation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__CDMA2000__ClassmarkChange__MS__NW_channelConfigurationCapabilityInformation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__CDMA2000__ClassmarkChange__MS__NW_extMultiplexOptionInformation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__CDMA2000__ClassmarkChange__MS__NW_bandSubclassInformation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__CDMA2000__ClassmarkChange__MS__NW_encryptionCapability_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__CDMA2000__ClassmarkChange__MS__NW_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__CDMA2000__ClassmarkChange__MS__NW
const TTCN_Typedescriptor_t PDU__RRM__CDMA2000__ClassmarkChange__MS__NW_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_CDMA2000_ClassmarkChange_MS_NW", NULL, &PDU__RRM__CDMA2000__ClassmarkChange__MS__NW_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__CDMA2000__ClassmarkChange__MS__NW_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__GERAN__IU__ModeClassmarkChange__MS__NW_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__GERAN__IU__ModeClassmarkChange__MS__NW_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__GERAN__IU__ModeClassmarkChange__MS__NW_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_GERAN_IU_ModeClassmarkChange_MS_NW.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__GERAN__IU__ModeClassmarkChange__MS__NW_messageType_xer_, &BITSTRING_json_, &PDU__RRM__GERAN__IU__ModeClassmarkChange__MS__NW_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__GERAN__IU__ModeClassmarkChange__MS__NW_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__GERAN__IU__ModeClassmarkChange__MS__NW_gERAN__IU__ModeClassmark_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__GERAN__IU__ModeClassmarkChange__MS__NW_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__GERAN__IU__ModeClassmarkChange__MS__NW
const TTCN_Typedescriptor_t PDU__RRM__GERAN__IU__ModeClassmarkChange__MS__NW_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_GERAN_IU_ModeClassmarkChange_MS_NW", NULL, &PDU__RRM__GERAN__IU__ModeClassmarkChange__MS__NW_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__GERAN__IU__ModeClassmarkChange__MS__NW_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__ClassmarkEnquiry__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__ClassmarkEnquiry__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__ClassmarkEnquiry__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ClassmarkEnquiry_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__ClassmarkEnquiry__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__ClassmarkEnquiry__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ClassmarkEnquiry__NW__MS_messageType_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__ClassmarkEnquiry__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__ClassmarkEnquiry__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__ClassmarkEnquiry__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ClassmarkEnquiry_NW_MS", NULL, &PDU__RRM__ClassmarkEnquiry__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ClassmarkEnquiry__NW__MS_classmarkEnquiryMask_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ClassmarkEnquiry__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__ConfigurationChangeCommand__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__ConfigurationChangeCommand__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__ConfigurationChangeCommand__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ConfigurationChangeCommand_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__ConfigurationChangeCommand__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__ConfigurationChangeCommand__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ConfigurationChangeCommand__NW__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ConfigurationChangeCommand__NW__MS_multislotAllocation_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__ConfigurationChangeCommand__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__ConfigurationChangeCommand__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__ConfigurationChangeCommand__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ConfigurationChangeCommand_NW_MS", NULL, &PDU__RRM__ConfigurationChangeCommand__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ConfigurationChangeCommand__NW__MS_modeOfChannelSet1_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ConfigurationChangeCommand__NW__MS_modeOfChannelSet2_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ConfigurationChangeCommand__NW__MS_modeOfChannelSet3_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ConfigurationChangeCommand__NW__MS_modeOfChannelSet4_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ConfigurationChangeCommand__NW__MS_modeOfChannelSet5_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ConfigurationChangeCommand__NW__MS_modeOfChannelSet6_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ConfigurationChangeCommand__NW__MS_modeOfChannelSet7_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ConfigurationChangeCommand__NW__MS_modeOfChannelSet8_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ConfigurationChangeCommand__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__ConfigurationChangeAck__MS__NW_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__ConfigurationChangeAck__MS__NW_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__ConfigurationChangeAck__MS__NW_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ConfigurationChangeAck_MS_NW.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__ConfigurationChangeAck__MS__NW_messageType_xer_, &BITSTRING_json_, &PDU__RRM__ConfigurationChangeAck__MS__NW_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ConfigurationChangeAck__MS__NW_messageType_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__ConfigurationChangeAck__MS__NW_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__ConfigurationChangeAck__MS__NW
const TTCN_Typedescriptor_t PDU__RRM__ConfigurationChangeAck__MS__NW_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ConfigurationChangeAck_MS_NW", NULL, &PDU__RRM__ConfigurationChangeAck__MS__NW_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ConfigurationChangeAck__MS__NW_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__ConfigurationChangeRej__MS__NW_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__ConfigurationChangeRej__MS__NW_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__ConfigurationChangeRej__MS__NW_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ConfigurationChangeRej_MS_NW.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__ConfigurationChangeRej__MS__NW_messageType_xer_, &BITSTRING_json_, &PDU__RRM__ConfigurationChangeRej__MS__NW_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ConfigurationChangeRej__MS__NW_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ConfigurationChangeRej__MS__NW_rR__Cause_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__ConfigurationChangeRej__MS__NW_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__ConfigurationChangeRej__MS__NW
const TTCN_Typedescriptor_t PDU__RRM__ConfigurationChangeRej__MS__NW_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ConfigurationChangeRej_MS_NW", NULL, &PDU__RRM__ConfigurationChangeRej__MS__NW_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ConfigurationChangeRej__MS__NW_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__DTM__AssignmentCommand__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__DTM__AssignmentCommand__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__DTM__AssignmentCommand__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_DTM_AssignmentCommand_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__DTM__AssignmentCommand__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__DTM__AssignmentCommand__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__DTM__AssignmentCommand__NW__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__DTM__AssignmentCommand__NW__MS_cS__PowerCommand_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__DTM__AssignmentCommand__NW__MS_description__CS__Channel_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__DTM__AssignmentCommand__NW__MS_gPRS__BroadcastInformation_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__DTM__AssignmentCommand__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__DTM__AssignmentCommand__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__DTM__AssignmentCommand__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_DTM_AssignmentCommand_NW_MS", NULL, &PDU__RRM__DTM__AssignmentCommand__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__DTM__AssignmentCommand__NW__MS_cellChannelDescr_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__DTM__AssignmentCommand__NW__MS_channelMode_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__DTM__AssignmentCommand__NW__MS_frequencyList_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__DTM__AssignmentCommand__NW__MS_mobileAllocation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__DTM__AssignmentCommand__NW__MS_descrUplinkPacketChannelAssignment_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__DTM__AssignmentCommand__NW__MS_descrDownlinkPacketChannelAssignment_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__DTM__AssignmentCommand__NW__MS_multiRateConfiguration_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__DTM__AssignmentCommand__NW__MS_cipherModeSetting_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__DTM__AssignmentCommand__NW__MS_mobileAllocationC2_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__DTM__AssignmentCommand__NW__MS_frequencyListC2_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__DTM__AssignmentCommand__NW__MS_descriptionDualCarrierPacketDownlinkAssignment_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__DTM__AssignmentCommand__NW__MS_channelDescriptionC2_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__DTM__AssignmentCommand__NW__MS_extendedTSCSet_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__DTM__AssignmentCommand__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__DTM__AssignmentFailure__MS__NW_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__DTM__AssignmentFailure__MS__NW_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__DTM__AssignmentFailure__MS__NW_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_DTM_AssignmentFailure_MS_NW.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__DTM__AssignmentFailure__MS__NW_messageType_xer_, &BITSTRING_json_, &PDU__RRM__DTM__AssignmentFailure__MS__NW_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__DTM__AssignmentFailure__MS__NW_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__DTM__AssignmentFailure__MS__NW_rR__Cause_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__DTM__AssignmentFailure__MS__NW_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__DTM__AssignmentFailure__MS__NW
const TTCN_Typedescriptor_t PDU__RRM__DTM__AssignmentFailure__MS__NW_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_DTM_AssignmentFailure_MS_NW", NULL, &PDU__RRM__DTM__AssignmentFailure__MS__NW_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__DTM__AssignmentFailure__MS__NW_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__DTM__Information__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__DTM__Information__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__DTM__Information__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_DTM_Information_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__DTM__Information__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__DTM__Information__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__DTM__Information__NW__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__DTM__Information__NW__MS_routingAreaIdentification_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__DTM__Information__NW__MS_dTM__InformationDetails_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__DTM__Information__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__DTM__Information__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__DTM__Information__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_DTM_Information_NW_MS", NULL, &PDU__RRM__DTM__Information__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__DTM__Information__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__DTM__Reject__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__DTM__Reject__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__DTM__Reject__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_DTM_Reject_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__DTM__Reject__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__DTM__Reject__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__DTM__Reject__NW__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__DTM__Reject__NW__MS_waitIndication_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__DTM__Reject__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__DTM__Reject__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__DTM__Reject__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_DTM_Reject_NW_MS", NULL, &PDU__RRM__DTM__Reject__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__DTM__Reject__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__DTM__Request__MS__NW_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__DTM__Request__MS__NW_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__DTM__Request__MS__NW_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_DTM_Request_MS_NW.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__DTM__Request__MS__NW_messageType_xer_, &BITSTRING_json_, &PDU__RRM__DTM__Request__MS__NW_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__DTM__Request__MS__NW_messageType_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__DTM__Request__MS__NW_tLLI_xer_ = { {"tLLI>\n", "tLLI>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__RRM__DTM__Request__MS__NW_tLLI_oer_ext_arr_[0] = {};
const int PDU__RRM__DTM__Request__MS__NW_tLLI_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__RRM__DTM__Request__MS__NW_tLLI_oer_ = { -1, TRUE, 4, FALSE, 0, 0, PDU__RRM__DTM__Request__MS__NW_tLLI_oer_ext_arr_, 0, PDU__RRM__DTM__Request__MS__NW_tLLI_oer_p_};
const TTCN_Typedescriptor_t PDU__RRM__DTM__Request__MS__NW_tLLI_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_DTM_Request_MS_NW.tLLI", &OCTETSTRING_ber_, &General__Types::OCT4_raw_, &OCTETSTRING_text_, &PDU__RRM__DTM__Request__MS__NW_tLLI_xer_, &OCTETSTRING_json_, &PDU__RRM__DTM__Request__MS__NW_tLLI_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__DTM__Request__MS__NW_tLLI_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__DTM__Request__MS__NW_channelRequestDescription2_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__DTM__Request__MS__NW_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__DTM__Request__MS__NW
const TTCN_Typedescriptor_t PDU__RRM__DTM__Request__MS__NW_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_DTM_Request_MS_NW", NULL, &PDU__RRM__DTM__Request__MS__NW_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__DTM__Request__MS__NW_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__Frequency__Redefinition__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__Frequency__Redefinition__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__Frequency__Redefinition__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_Frequency_Redefinition_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__Frequency__Redefinition__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__Frequency__Redefinition__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__Frequency__Redefinition__NW__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__Frequency__Redefinition__NW__MS_channelDescription_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__Frequency__Redefinition__NW__MS_mobileAllocation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__Frequency__Redefinition__NW__MS_startingTime_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__Frequency__Redefinition__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__Frequency__Redefinition__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__Frequency__Redefinition__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_Frequency_Redefinition_NW_MS", NULL, &PDU__RRM__Frequency__Redefinition__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__Frequency__Redefinition__NW__MS_cellChannelDescr_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__Frequency__Redefinition__NW__MS_carrierIndication_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__Frequency__Redefinition__NW__MS_mobileAllocationC2_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__Frequency__Redefinition__NW__MS_channelDescriptionC2_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__Frequency__Redefinition__NW__MS_extendedTSCSet_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__Frequency__Redefinition__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__GPRS__SuspensionRequest__MS__NW_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__GPRS__SuspensionRequest__MS__NW_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__GPRS__SuspensionRequest__MS__NW_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_GPRS_SuspensionRequest_MS_NW.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__GPRS__SuspensionRequest__MS__NW_messageType_xer_, &BITSTRING_json_, &PDU__RRM__GPRS__SuspensionRequest__MS__NW_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__GPRS__SuspensionRequest__MS__NW_messageType_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__GPRS__SuspensionRequest__MS__NW_tLLI_xer_ = { {"tLLI>\n", "tLLI>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__RRM__GPRS__SuspensionRequest__MS__NW_tLLI_oer_ext_arr_[0] = {};
const int PDU__RRM__GPRS__SuspensionRequest__MS__NW_tLLI_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__RRM__GPRS__SuspensionRequest__MS__NW_tLLI_oer_ = { -1, TRUE, 4, FALSE, 0, 0, PDU__RRM__GPRS__SuspensionRequest__MS__NW_tLLI_oer_ext_arr_, 0, PDU__RRM__GPRS__SuspensionRequest__MS__NW_tLLI_oer_p_};
const TTCN_Typedescriptor_t PDU__RRM__GPRS__SuspensionRequest__MS__NW_tLLI_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_GPRS_SuspensionRequest_MS_NW.tLLI", &OCTETSTRING_ber_, &General__Types::OCT4_raw_, &OCTETSTRING_text_, &PDU__RRM__GPRS__SuspensionRequest__MS__NW_tLLI_xer_, &OCTETSTRING_json_, &PDU__RRM__GPRS__SuspensionRequest__MS__NW_tLLI_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__GPRS__SuspensionRequest__MS__NW_tLLI_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__GPRS__SuspensionRequest__MS__NW_routingAreaIdentification_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__GPRS__SuspensionRequest__MS__NW_suspensionCause_xer_ = { {"suspensionCause>\n", "suspensionCause>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__RRM__GPRS__SuspensionRequest__MS__NW_suspensionCause_oer_ext_arr_[0] = {};
const int PDU__RRM__GPRS__SuspensionRequest__MS__NW_suspensionCause_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__RRM__GPRS__SuspensionRequest__MS__NW_suspensionCause_oer_ = { -1, TRUE, 1, FALSE, 0, 0, PDU__RRM__GPRS__SuspensionRequest__MS__NW_suspensionCause_oer_ext_arr_, 0, PDU__RRM__GPRS__SuspensionRequest__MS__NW_suspensionCause_oer_p_};
const TTCN_Typedescriptor_t PDU__RRM__GPRS__SuspensionRequest__MS__NW_suspensionCause_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_GPRS_SuspensionRequest_MS_NW.suspensionCause", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &PDU__RRM__GPRS__SuspensionRequest__MS__NW_suspensionCause_xer_, &OCTETSTRING_json_, &PDU__RRM__GPRS__SuspensionRequest__MS__NW_suspensionCause_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__GPRS__SuspensionRequest__MS__NW_suspensionCause_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__GPRS__SuspensionRequest__MS__NW_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__GPRS__SuspensionRequest__MS__NW
const TTCN_Typedescriptor_t PDU__RRM__GPRS__SuspensionRequest__MS__NW_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_GPRS_SuspensionRequest_MS_NW", NULL, &PDU__RRM__GPRS__SuspensionRequest__MS__NW_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__GPRS__SuspensionRequest__MS__NW_service__Support_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__GPRS__SuspensionRequest__MS__NW_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__HandoverAccess__NW__MS_handoverReference_xer_ = { {"handoverReference>\n", "handoverReference>\n"}, {19, 19}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__HandoverAccess__NW__MS_handoverReference_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__HandoverAccess__NW__MS_handoverReference_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_HandoverAccess_NW_MS.handoverReference", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__HandoverAccess__NW__MS_handoverReference_xer_, &BITSTRING_json_, &PDU__RRM__HandoverAccess__NW__MS_handoverReference_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__HandoverAccess__NW__MS_handoverReference_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__HandoverAccess__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__HandoverAccess__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__HandoverAccess__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_HandoverAccess_NW_MS", NULL, &PDU__RRM__HandoverAccess__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__HandoverAccess__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__HandoverCommand__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__HandoverCommand__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__HandoverCommand__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_HandoverCommand_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__HandoverCommand__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__HandoverCommand__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_cellDescription_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_channelDescription2_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_handoverReference_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_powerCommandAndAccesstype_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__HandoverCommand__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__HandoverCommand__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__HandoverCommand__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_HandoverCommand_NW_MS", NULL, &PDU__RRM__HandoverCommand__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_synchronizationIndication_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_frequencyShortListAfterTime_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_frequencyListAfterTime_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_cellChannelDescription_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_multislotAllocation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_modeOfChannelSet1_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_modeOfChannelSet2_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_modeOfChannelSet3_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_modeOfChannelSet4_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_modeOfChannelSet5_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_modeOfChannelSet6_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_modeOfChannelSet7_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_modeOfChannelSet8_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_descrOf2ndCh__at_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_modeOf2ndChannel_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_frequencyChannelSequence__at_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_mobileAllocation__at_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_startingTime_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_timeDifference_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_timingAdvance_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_frequencyShortListBeforeTime_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_frequencyListBeforeTime_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_descrOf1stCh__bt_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_descrOf2ndCh__bt_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_frequencyChannelSequence__bt_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_mobileAllocation__bt_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_cipherModeSetting_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_vGCS__TargetModeIndication_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_multiRateConfiguration_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_dynamicARFCN__Mapping_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_vGCS__Ciphering__Parameters_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_dedicatedServiceInformation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_pLMNIndex_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_extendedTSCSet__afterTime_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_extendedTSCSet__beforeTime_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverCommand__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__InterSystemToUTRAN__HandoverCommand__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__InterSystemToUTRAN__HandoverCommand__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__InterSystemToUTRAN__HandoverCommand__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_InterSystemToUTRAN_HandoverCommand_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__InterSystemToUTRAN__HandoverCommand__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__InterSystemToUTRAN__HandoverCommand__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__InterSystemToUTRAN__HandoverCommand__NW__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__InterSystemToUTRAN__HandoverCommand__NW__MS_handoverToUTRANCommand_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__InterSystemToUTRAN__HandoverCommand__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__InterSystemToUTRAN__HandoverCommand__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__InterSystemToUTRAN__HandoverCommand__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_InterSystemToUTRAN_HandoverCommand_NW_MS", NULL, &PDU__RRM__InterSystemToUTRAN__HandoverCommand__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__InterSystemToUTRAN__HandoverCommand__NW__MS_cNToMSTransparentInformation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__InterSystemToUTRAN__HandoverCommand__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__InterSystemToCDMA2000HandoverCommand__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__InterSystemToCDMA2000HandoverCommand__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__InterSystemToCDMA2000HandoverCommand__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_InterSystemToCDMA2000HandoverCommand_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__InterSystemToCDMA2000HandoverCommand__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__InterSystemToCDMA2000HandoverCommand__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__InterSystemToCDMA2000HandoverCommand__NW__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__InterSystemToCDMA2000HandoverCommand__NW__MS_handoverToCDMA2000Command_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__InterSystemToCDMA2000HandoverCommand__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__InterSystemToCDMA2000HandoverCommand__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__InterSystemToCDMA2000HandoverCommand__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_InterSystemToCDMA2000HandoverCommand_NW_MS", NULL, &PDU__RRM__InterSystemToCDMA2000HandoverCommand__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__InterSystemToCDMA2000HandoverCommand__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__HandoverToGERAN__IuModeCommand__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__HandoverToGERAN__IuModeCommand__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__HandoverToGERAN__IuModeCommand__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_HandoverToGERAN_IuModeCommand_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__HandoverToGERAN__IuModeCommand__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__HandoverToGERAN__IuModeCommand__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__HandoverToGERAN__IuModeCommand__NW__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverToGERAN__IuModeCommand__NW__MS_radioBearerReconfiguration_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__HandoverToGERAN__IuModeCommand__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__HandoverToGERAN__IuModeCommand__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__HandoverToGERAN__IuModeCommand__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_HandoverToGERAN_IuModeCommand_NW_MS", NULL, &PDU__RRM__HandoverToGERAN__IuModeCommand__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__HandoverToGERAN__IuModeCommand__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__InterSystemToEUTRAN__HandoverCommand__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__InterSystemToEUTRAN__HandoverCommand__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__InterSystemToEUTRAN__HandoverCommand__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_InterSystemToEUTRAN_HandoverCommand_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__InterSystemToEUTRAN__HandoverCommand__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__InterSystemToEUTRAN__HandoverCommand__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__InterSystemToEUTRAN__HandoverCommand__NW__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__InterSystemToEUTRAN__HandoverCommand__NW__MS_dL__DCCH__Message_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__InterSystemToEUTRAN__HandoverCommand__NW__MS_cNToMSTransparentInformation_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__InterSystemToEUTRAN__HandoverCommand__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__InterSystemToEUTRAN__HandoverCommand__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__InterSystemToEUTRAN__HandoverCommand__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_InterSystemToEUTRAN_HandoverCommand_NW_MS", NULL, &PDU__RRM__InterSystemToEUTRAN__HandoverCommand__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__InterSystemToEUTRAN__HandoverCommand__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__HandoverComplete__MS__NW_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__HandoverComplete__MS__NW_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__HandoverComplete__MS__NW_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_HandoverComplete_MS_NW.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__HandoverComplete__MS__NW_messageType_xer_, &BITSTRING_json_, &PDU__RRM__HandoverComplete__MS__NW_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__HandoverComplete__MS__NW_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverComplete__MS__NW_rRCause_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__HandoverComplete__MS__NW_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__HandoverComplete__MS__NW
const TTCN_Typedescriptor_t PDU__RRM__HandoverComplete__MS__NW_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_HandoverComplete_MS_NW", NULL, &PDU__RRM__HandoverComplete__MS__NW_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__HandoverComplete__MS__NW_mobileObsservedTimeDiff_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverComplete__MS__NW_mobileTimeDifferenceHyperframe_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverComplete__MS__NW_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__HandoverFailure__MS__NW_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__HandoverFailure__MS__NW_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__HandoverFailure__MS__NW_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_HandoverFailure_MS_NW.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__HandoverFailure__MS__NW_messageType_xer_, &BITSTRING_json_, &PDU__RRM__HandoverFailure__MS__NW_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__HandoverFailure__MS__NW_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverFailure__MS__NW_rRCause_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__HandoverFailure__MS__NW_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__HandoverFailure__MS__NW
const TTCN_Typedescriptor_t PDU__RRM__HandoverFailure__MS__NW_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_HandoverFailure_MS_NW", NULL, &PDU__RRM__HandoverFailure__MS__NW_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__HandoverFailure__MS__NW_pSCause_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__HandoverFailure__MS__NW_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__ImmediateAssignment__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__ImmediateAssignment__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__ImmediateAssignment__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ImmediateAssignment_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__ImmediateAssignment__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__ImmediateAssignment__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignment__NW__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignment__NW__MS_pageMode_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignment__NW__MS_dedicatedModeOrTBF_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignment__NW__MS_requestReference_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__ImmediateAssignment__NW__MS_timingAdvance_xer_ = { {"timingAdvance>\n", "timingAdvance>\n"}, {15, 15}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__RRM__ImmediateAssignment__NW__MS_timingAdvance_oer_ext_arr_[0] = {};
const int PDU__RRM__ImmediateAssignment__NW__MS_timingAdvance_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__RRM__ImmediateAssignment__NW__MS_timingAdvance_oer_ = { -1, TRUE, 1, FALSE, 0, 0, PDU__RRM__ImmediateAssignment__NW__MS_timingAdvance_oer_ext_arr_, 0, PDU__RRM__ImmediateAssignment__NW__MS_timingAdvance_oer_p_};
const TTCN_Typedescriptor_t PDU__RRM__ImmediateAssignment__NW__MS_timingAdvance_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ImmediateAssignment_NW_MS.timingAdvance", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &PDU__RRM__ImmediateAssignment__NW__MS_timingAdvance_xer_, &OCTETSTRING_json_, &PDU__RRM__ImmediateAssignment__NW__MS_timingAdvance_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignment__NW__MS_timingAdvance_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignment__NW__MS_mobileAllocation_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__ImmediateAssignment__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__ImmediateAssignment__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__ImmediateAssignment__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ImmediateAssignment_NW_MS", NULL, &PDU__RRM__ImmediateAssignment__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
const TTCN_RAWdescriptor_t PDU__RRM__ImmediateAssignment__NW__MS_channelDescription_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__ImmediateAssignment__NW__MS_channelDescription
const TTCN_Typedescriptor_t PDU__RRM__ImmediateAssignment__NW__MS_channelDescription_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ImmediateAssignment_NW_MS.channelDescription", NULL, &PDU__RRM__ImmediateAssignment__NW__MS_channelDescription_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignment__NW__MS_channelDescription_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__ImmediateAssignment__NW__MS_packetChannelDescription_raw_ = {24,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,3,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       PDU__RRM__ImmediateAssignment__NW__MS_packetChannelDescription_xer_ = { {"packetChannelDescription>\n", "packetChannelDescription>\n"}, {26, 26}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__RRM__ImmediateAssignment__NW__MS_packetChannelDescription_oer_ext_arr_[0] = {};
const int PDU__RRM__ImmediateAssignment__NW__MS_packetChannelDescription_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__RRM__ImmediateAssignment__NW__MS_packetChannelDescription_oer_ = { -1, TRUE, 3, FALSE, 0, 0, PDU__RRM__ImmediateAssignment__NW__MS_packetChannelDescription_oer_ext_arr_, 0, PDU__RRM__ImmediateAssignment__NW__MS_packetChannelDescription_oer_p_};
const TTCN_Typedescriptor_t PDU__RRM__ImmediateAssignment__NW__MS_packetChannelDescription_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ImmediateAssignment_NW_MS.packetChannelDescription", &OCTETSTRING_ber_, &PDU__RRM__ImmediateAssignment__NW__MS_packetChannelDescription_raw_, &OCTETSTRING_text_, &PDU__RRM__ImmediateAssignment__NW__MS_packetChannelDescription_xer_, &OCTETSTRING_json_, &PDU__RRM__ImmediateAssignment__NW__MS_packetChannelDescription_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignment__NW__MS_packetChannelDescription_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignment__NW__MS_startingTime_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__ImmediateAssignment__NW__MS_iA__RestOctets_xer_ = { {"iA_RestOctets>\n", "iA_RestOctets>\n"}, {15, 15}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__RRM__ImmediateAssignment__NW__MS_iA__RestOctets_oer_ext_arr_[0] = {};
const int PDU__RRM__ImmediateAssignment__NW__MS_iA__RestOctets_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__RRM__ImmediateAssignment__NW__MS_iA__RestOctets_oer_ = { -1, TRUE, -1, FALSE, 0, 0, PDU__RRM__ImmediateAssignment__NW__MS_iA__RestOctets_oer_ext_arr_, 0, PDU__RRM__ImmediateAssignment__NW__MS_iA__RestOctets_oer_p_};
const TTCN_Typedescriptor_t PDU__RRM__ImmediateAssignment__NW__MS_iA__RestOctets_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ImmediateAssignment_NW_MS.iA_RestOctets", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &PDU__RRM__ImmediateAssignment__NW__MS_iA__RestOctets_xer_, &OCTETSTRING_json_, &PDU__RRM__ImmediateAssignment__NW__MS_iA__RestOctets_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignment__NW__MS_iA__RestOctets_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignment__NW__MS_extendedTSCSet_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignment__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__ImmediatePacketAssignment__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__ImmediatePacketAssignment__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__ImmediatePacketAssignment__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ImmediatePacketAssignment_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__ImmediatePacketAssignment__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__ImmediatePacketAssignment__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ImmediatePacketAssignment__NW__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediatePacketAssignment__NW__MS_pageMode_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediatePacketAssignment__NW__MS_featureIndicator_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__ImmediatePacketAssignment__NW__MS_iPA__RestOctets_raw_ = {152,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       PDU__RRM__ImmediatePacketAssignment__NW__MS_iPA__RestOctets_xer_ = { {"iPA_RestOctets>\n", "iPA_RestOctets>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__RRM__ImmediatePacketAssignment__NW__MS_iPA__RestOctets_oer_ext_arr_[0] = {};
const int PDU__RRM__ImmediatePacketAssignment__NW__MS_iPA__RestOctets_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__RRM__ImmediatePacketAssignment__NW__MS_iPA__RestOctets_oer_ = { -1, TRUE, 19, FALSE, 0, 0, PDU__RRM__ImmediatePacketAssignment__NW__MS_iPA__RestOctets_oer_ext_arr_, 0, PDU__RRM__ImmediatePacketAssignment__NW__MS_iPA__RestOctets_oer_p_};
const TTCN_Typedescriptor_t PDU__RRM__ImmediatePacketAssignment__NW__MS_iPA__RestOctets_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ImmediatePacketAssignment_NW_MS.iPA_RestOctets", &OCTETSTRING_ber_, &PDU__RRM__ImmediatePacketAssignment__NW__MS_iPA__RestOctets_raw_, &OCTETSTRING_text_, &PDU__RRM__ImmediatePacketAssignment__NW__MS_iPA__RestOctets_xer_, &OCTETSTRING_json_, &PDU__RRM__ImmediatePacketAssignment__NW__MS_iPA__RestOctets_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ImmediatePacketAssignment__NW__MS_iPA__RestOctets_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__ImmediatePacketAssignment__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__ImmediatePacketAssignment__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__ImmediatePacketAssignment__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ImmediatePacketAssignment_NW_MS", NULL, &PDU__RRM__ImmediatePacketAssignment__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ImmediatePacketAssignment__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__ImmediateAssignmentExtended__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__ImmediateAssignmentExtended__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__ImmediateAssignmentExtended__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ImmediateAssignmentExtended_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__ImmediateAssignmentExtended__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__ImmediateAssignmentExtended__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentExtended__NW__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentExtended__NW__MS_pageMode_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentExtended__NW__MS_featureIndicator_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentExtended__NW__MS_channelDescription1_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentExtended__NW__MS_requestReference1_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__ImmediateAssignmentExtended__NW__MS_timingAdvance1_xer_ = { {"timingAdvance1>\n", "timingAdvance1>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__RRM__ImmediateAssignmentExtended__NW__MS_timingAdvance1_oer_ext_arr_[0] = {};
const int PDU__RRM__ImmediateAssignmentExtended__NW__MS_timingAdvance1_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__RRM__ImmediateAssignmentExtended__NW__MS_timingAdvance1_oer_ = { -1, TRUE, 1, FALSE, 0, 0, PDU__RRM__ImmediateAssignmentExtended__NW__MS_timingAdvance1_oer_ext_arr_, 0, PDU__RRM__ImmediateAssignmentExtended__NW__MS_timingAdvance1_oer_p_};
const TTCN_Typedescriptor_t PDU__RRM__ImmediateAssignmentExtended__NW__MS_timingAdvance1_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ImmediateAssignmentExtended_NW_MS.timingAdvance1", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &PDU__RRM__ImmediateAssignmentExtended__NW__MS_timingAdvance1_xer_, &OCTETSTRING_json_, &PDU__RRM__ImmediateAssignmentExtended__NW__MS_timingAdvance1_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentExtended__NW__MS_timingAdvance1_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentExtended__NW__MS_channelDescription2_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentExtended__NW__MS_requestReference2_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__ImmediateAssignmentExtended__NW__MS_timingAdvance2_xer_ = { {"timingAdvance2>\n", "timingAdvance2>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__RRM__ImmediateAssignmentExtended__NW__MS_timingAdvance2_oer_ext_arr_[0] = {};
const int PDU__RRM__ImmediateAssignmentExtended__NW__MS_timingAdvance2_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__RRM__ImmediateAssignmentExtended__NW__MS_timingAdvance2_oer_ = { -1, TRUE, 1, FALSE, 0, 0, PDU__RRM__ImmediateAssignmentExtended__NW__MS_timingAdvance2_oer_ext_arr_, 0, PDU__RRM__ImmediateAssignmentExtended__NW__MS_timingAdvance2_oer_p_};
const TTCN_Typedescriptor_t PDU__RRM__ImmediateAssignmentExtended__NW__MS_timingAdvance2_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ImmediateAssignmentExtended_NW_MS.timingAdvance2", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &PDU__RRM__ImmediateAssignmentExtended__NW__MS_timingAdvance2_xer_, &OCTETSTRING_json_, &PDU__RRM__ImmediateAssignmentExtended__NW__MS_timingAdvance2_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentExtended__NW__MS_timingAdvance2_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentExtended__NW__MS_mobileAllocation_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__ImmediateAssignmentExtended__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__ImmediateAssignmentExtended__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__ImmediateAssignmentExtended__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ImmediateAssignmentExtended_NW_MS", NULL, &PDU__RRM__ImmediateAssignmentExtended__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentExtended__NW__MS_startingTime_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__ImmediateAssignmentExtended__NW__MS_iAX__RestOctets_xer_ = { {"iAX_RestOctets>\n", "iAX_RestOctets>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED |XER_OPTIONAL, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__RRM__ImmediateAssignmentExtended__NW__MS_iAX__RestOctets_oer_ext_arr_[0] = {};
const int PDU__RRM__ImmediateAssignmentExtended__NW__MS_iAX__RestOctets_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__RRM__ImmediateAssignmentExtended__NW__MS_iAX__RestOctets_oer_ = { -1, TRUE, -1, FALSE, 0, 0, PDU__RRM__ImmediateAssignmentExtended__NW__MS_iAX__RestOctets_oer_ext_arr_, 0, PDU__RRM__ImmediateAssignmentExtended__NW__MS_iAX__RestOctets_oer_p_};
const TTCN_Typedescriptor_t PDU__RRM__ImmediateAssignmentExtended__NW__MS_iAX__RestOctets_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ImmediateAssignmentExtended_NW_MS.iAX_RestOctets", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &PDU__RRM__ImmediateAssignmentExtended__NW__MS_iAX__RestOctets_xer_, &OCTETSTRING_json_, &PDU__RRM__ImmediateAssignmentExtended__NW__MS_iAX__RestOctets_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentExtended__NW__MS_iAX__RestOctets_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentExtended__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__ImmediateAssignmentReject__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__ImmediateAssignmentReject__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__ImmediateAssignmentReject__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ImmediateAssignmentReject_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__ImmediateAssignmentReject__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__ImmediateAssignmentReject__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentReject__NW__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentReject__NW__MS_pageMode_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentReject__NW__MS_featureIndicator_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentReject__NW__MS_requestReference1_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentReject__NW__MS_waitIndication1_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentReject__NW__MS_requestReference2_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentReject__NW__MS_waitIndication2_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentReject__NW__MS_requestReference3_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentReject__NW__MS_waitIndication3_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentReject__NW__MS_requestReference4_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentReject__NW__MS_waitIndication4_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__ImmediateAssignmentReject__NW__MS_iAR__RestOctets_raw_ = {24,SG_NO,ORDER_LSB,ORDER_MSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
const XERdescriptor_t       PDU__RRM__ImmediateAssignmentReject__NW__MS_iAR__RestOctets_xer_ = { {"iAR_RestOctets>\n", "iAR_RestOctets>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__RRM__ImmediateAssignmentReject__NW__MS_iAR__RestOctets_oer_ext_arr_[0] = {};
const int PDU__RRM__ImmediateAssignmentReject__NW__MS_iAR__RestOctets_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__RRM__ImmediateAssignmentReject__NW__MS_iAR__RestOctets_oer_ = { -1, TRUE, 3, FALSE, 0, 0, PDU__RRM__ImmediateAssignmentReject__NW__MS_iAR__RestOctets_oer_ext_arr_, 0, PDU__RRM__ImmediateAssignmentReject__NW__MS_iAR__RestOctets_oer_p_};
const TTCN_Typedescriptor_t PDU__RRM__ImmediateAssignmentReject__NW__MS_iAR__RestOctets_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ImmediateAssignmentReject_NW_MS.iAR_RestOctets", &OCTETSTRING_ber_, &PDU__RRM__ImmediateAssignmentReject__NW__MS_iAR__RestOctets_raw_, &OCTETSTRING_text_, &PDU__RRM__ImmediateAssignmentReject__NW__MS_iAR__RestOctets_xer_, &OCTETSTRING_json_, &PDU__RRM__ImmediateAssignmentReject__NW__MS_iAR__RestOctets_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentReject__NW__MS_iAR__RestOctets_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__ImmediateAssignmentReject__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__ImmediateAssignmentReject__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__ImmediateAssignmentReject__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ImmediateAssignmentReject_NW_MS", NULL, &PDU__RRM__ImmediateAssignmentReject__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ImmediateAssignmentReject__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__NotificationResponse__MS__NW_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__NotificationResponse__MS__NW_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__NotificationResponse__MS__NW_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_NotificationResponse_MS_NW.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__NotificationResponse__MS__NW_messageType_xer_, &BITSTRING_json_, &PDU__RRM__NotificationResponse__MS__NW_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__NotificationResponse__MS__NW_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NotificationResponse__MS__NW_mobileStationClassmark_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NotificationResponse__MS__NW_mobileIdentity_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NotificationResponse__MS__NW_groupOrBroadcastCallReference_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__NotificationResponse__MS__NW_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__NotificationResponse__MS__NW
const TTCN_Typedescriptor_t PDU__RRM__NotificationResponse__MS__NW_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_NotificationResponse_MS_NW", NULL, &PDU__RRM__NotificationResponse__MS__NW_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__NotificationResponse__MS__NW_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__PacketNotification__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__PacketNotification__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__PacketNotification__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PacketNotification_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__PacketNotification__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__PacketNotification__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PacketNotification__NW__MS_messageType_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__PacketNotification__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__PacketNotification__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__PacketNotification__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PacketNotification_NW_MS", NULL, &PDU__RRM__PacketNotification__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PacketNotification__NW__MS_p__TMSI_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__PacketNotification__NW__MS_mobileIdentity_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__PacketNotification__NW__MS_default_coding("RAW");
const XERdescriptor_t       MBMS__Announcement__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t MBMS__Announcement__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t MBMS__Announcement__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.MBMS_Announcement_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &MBMS__Announcement__NW__MS_messageType_xer_, &BITSTRING_json_, &MBMS__Announcement__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MBMS__Announcement__NW__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING MBMS__Announcement__NW__MS_tMGI_default_coding("RAW");
const TTCN_RAWdescriptor_t MBMS__Announcement__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for MBMS__Announcement__NW__MS
const TTCN_Typedescriptor_t MBMS__Announcement__NW__MS_descr_ = { "@MobileL3_RRM_Types.MBMS_Announcement_NW_MS", NULL, &MBMS__Announcement__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING MBMS__Announcement__NW__MS_mBMS__SessionIdentity_default_coding("RAW");
UNIVERSAL_CHARSTRING MBMS__Announcement__NW__MS_mBMS__CountingChannelDescription_default_coding("RAW");
UNIVERSAL_CHARSTRING MBMS__Announcement__NW__MS_mBMS__ptm__ChannelDescription_default_coding("RAW");
UNIVERSAL_CHARSTRING MBMS__Announcement__NW__MS_mBMS__SessionParameterList_default_coding("RAW");
UNIVERSAL_CHARSTRING MBMS__Announcement__NW__MS_restrictionTimer_default_coding("RAW");
UNIVERSAL_CHARSTRING MBMS__Announcement__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__PagingReq__Type1__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__PagingReq__Type1__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__PagingReq__Type1__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PagingReq_Type1_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__PagingReq__Type1__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__PagingReq__Type1__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PagingReq__Type1__NW__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__PagingReq__Type1__NW__MS_pageMode_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__PagingReq__Type1__NW__MS_channelNeeded_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__PagingReq__Type1__NW__MS_mobileIdentity1_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__PagingReq__Type1__NW__MS_p1RestOctets_xer_ = { {"p1RestOctets>\n", "p1RestOctets>\n"}, {14, 14}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__RRM__PagingReq__Type1__NW__MS_p1RestOctets_oer_ext_arr_[0] = {};
const int PDU__RRM__PagingReq__Type1__NW__MS_p1RestOctets_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__RRM__PagingReq__Type1__NW__MS_p1RestOctets_oer_ = { -1, TRUE, -1, FALSE, 0, 0, PDU__RRM__PagingReq__Type1__NW__MS_p1RestOctets_oer_ext_arr_, 0, PDU__RRM__PagingReq__Type1__NW__MS_p1RestOctets_oer_p_};
const TTCN_Typedescriptor_t PDU__RRM__PagingReq__Type1__NW__MS_p1RestOctets_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PagingReq_Type1_NW_MS.p1RestOctets", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &PDU__RRM__PagingReq__Type1__NW__MS_p1RestOctets_xer_, &OCTETSTRING_json_, &PDU__RRM__PagingReq__Type1__NW__MS_p1RestOctets_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PagingReq__Type1__NW__MS_p1RestOctets_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__PagingReq__Type1__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__PagingReq__Type1__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__PagingReq__Type1__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PagingReq_Type1_NW_MS", NULL, &PDU__RRM__PagingReq__Type1__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PagingReq__Type1__NW__MS_mobileIdentity2_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__PagingReq__Type1__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__PagingReq__Type2__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__PagingReq__Type2__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__PagingReq__Type2__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PagingReq_Type2_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__PagingReq__Type2__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__PagingReq__Type2__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PagingReq__Type2__NW__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__PagingReq__Type2__NW__MS_pageMode_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__PagingReq__Type2__NW__MS_channelNeeded_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__PagingReq__Type2__NW__MS_mobileIdentity1_xer_ = { {"mobileIdentity1>\n", "mobileIdentity1>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__RRM__PagingReq__Type2__NW__MS_mobileIdentity1_oer_ext_arr_[0] = {};
const int PDU__RRM__PagingReq__Type2__NW__MS_mobileIdentity1_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__RRM__PagingReq__Type2__NW__MS_mobileIdentity1_oer_ = { -1, TRUE, 4, FALSE, 0, 0, PDU__RRM__PagingReq__Type2__NW__MS_mobileIdentity1_oer_ext_arr_, 0, PDU__RRM__PagingReq__Type2__NW__MS_mobileIdentity1_oer_p_};
const TTCN_Typedescriptor_t PDU__RRM__PagingReq__Type2__NW__MS_mobileIdentity1_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PagingReq_Type2_NW_MS.mobileIdentity1", &OCTETSTRING_ber_, &General__Types::OCT4_raw_, &OCTETSTRING_text_, &PDU__RRM__PagingReq__Type2__NW__MS_mobileIdentity1_xer_, &OCTETSTRING_json_, &PDU__RRM__PagingReq__Type2__NW__MS_mobileIdentity1_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PagingReq__Type2__NW__MS_mobileIdentity1_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__PagingReq__Type2__NW__MS_mobileIdentity2_xer_ = { {"mobileIdentity2>\n", "mobileIdentity2>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__RRM__PagingReq__Type2__NW__MS_mobileIdentity2_oer_ext_arr_[0] = {};
const int PDU__RRM__PagingReq__Type2__NW__MS_mobileIdentity2_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__RRM__PagingReq__Type2__NW__MS_mobileIdentity2_oer_ = { -1, TRUE, 4, FALSE, 0, 0, PDU__RRM__PagingReq__Type2__NW__MS_mobileIdentity2_oer_ext_arr_, 0, PDU__RRM__PagingReq__Type2__NW__MS_mobileIdentity2_oer_p_};
const TTCN_Typedescriptor_t PDU__RRM__PagingReq__Type2__NW__MS_mobileIdentity2_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PagingReq_Type2_NW_MS.mobileIdentity2", &OCTETSTRING_ber_, &General__Types::OCT4_raw_, &OCTETSTRING_text_, &PDU__RRM__PagingReq__Type2__NW__MS_mobileIdentity2_xer_, &OCTETSTRING_json_, &PDU__RRM__PagingReq__Type2__NW__MS_mobileIdentity2_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PagingReq__Type2__NW__MS_mobileIdentity2_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__PagingReq__Type2__NW__MS_p2RestOctets_xer_ = { {"p2RestOctets>\n", "p2RestOctets>\n"}, {14, 14}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__RRM__PagingReq__Type2__NW__MS_p2RestOctets_oer_ext_arr_[0] = {};
const int PDU__RRM__PagingReq__Type2__NW__MS_p2RestOctets_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__RRM__PagingReq__Type2__NW__MS_p2RestOctets_oer_ = { -1, TRUE, -1, FALSE, 0, 0, PDU__RRM__PagingReq__Type2__NW__MS_p2RestOctets_oer_ext_arr_, 0, PDU__RRM__PagingReq__Type2__NW__MS_p2RestOctets_oer_p_};
const TTCN_Typedescriptor_t PDU__RRM__PagingReq__Type2__NW__MS_p2RestOctets_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PagingReq_Type2_NW_MS.p2RestOctets", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &PDU__RRM__PagingReq__Type2__NW__MS_p2RestOctets_xer_, &OCTETSTRING_json_, &PDU__RRM__PagingReq__Type2__NW__MS_p2RestOctets_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PagingReq__Type2__NW__MS_p2RestOctets_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__PagingReq__Type2__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__PagingReq__Type2__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__PagingReq__Type2__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PagingReq_Type2_NW_MS", NULL, &PDU__RRM__PagingReq__Type2__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PagingReq__Type2__NW__MS_mobileIdentity3_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__PagingReq__Type2__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__PagingReq__Type3__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__PagingReq__Type3__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__PagingReq__Type3__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PagingReq_Type3_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__PagingReq__Type3__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__PagingReq__Type3__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PagingReq__Type3__NW__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__PagingReq__Type3__NW__MS_pageMode_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__PagingReq__Type3__NW__MS_channelNeeded_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity1_xer_ = { {"mobileIdentity1>\n", "mobileIdentity1>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity1_oer_ext_arr_[0] = {};
const int PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity1_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity1_oer_ = { -1, TRUE, 4, FALSE, 0, 0, PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity1_oer_ext_arr_, 0, PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity1_oer_p_};
const TTCN_Typedescriptor_t PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity1_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PagingReq_Type3_NW_MS.mobileIdentity1", &OCTETSTRING_ber_, &General__Types::OCT4_raw_, &OCTETSTRING_text_, &PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity1_xer_, &OCTETSTRING_json_, &PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity1_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity1_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity2_xer_ = { {"mobileIdentity2>\n", "mobileIdentity2>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity2_oer_ext_arr_[0] = {};
const int PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity2_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity2_oer_ = { -1, TRUE, 4, FALSE, 0, 0, PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity2_oer_ext_arr_, 0, PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity2_oer_p_};
const TTCN_Typedescriptor_t PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity2_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PagingReq_Type3_NW_MS.mobileIdentity2", &OCTETSTRING_ber_, &General__Types::OCT4_raw_, &OCTETSTRING_text_, &PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity2_xer_, &OCTETSTRING_json_, &PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity2_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity2_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity3_xer_ = { {"mobileIdentity3>\n", "mobileIdentity3>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity3_oer_ext_arr_[0] = {};
const int PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity3_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity3_oer_ = { -1, TRUE, 4, FALSE, 0, 0, PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity3_oer_ext_arr_, 0, PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity3_oer_p_};
const TTCN_Typedescriptor_t PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity3_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PagingReq_Type3_NW_MS.mobileIdentity3", &OCTETSTRING_ber_, &General__Types::OCT4_raw_, &OCTETSTRING_text_, &PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity3_xer_, &OCTETSTRING_json_, &PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity3_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity3_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity4_xer_ = { {"mobileIdentity4>\n", "mobileIdentity4>\n"}, {17, 17}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity4_oer_ext_arr_[0] = {};
const int PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity4_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity4_oer_ = { -1, TRUE, 4, FALSE, 0, 0, PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity4_oer_ext_arr_, 0, PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity4_oer_p_};
const TTCN_Typedescriptor_t PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity4_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PagingReq_Type3_NW_MS.mobileIdentity4", &OCTETSTRING_ber_, &General__Types::OCT4_raw_, &OCTETSTRING_text_, &PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity4_xer_, &OCTETSTRING_json_, &PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity4_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PagingReq__Type3__NW__MS_mobileIdentity4_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__PagingReq__Type3__NW__MS_p3RestOctets_xer_ = { {"p3RestOctets>\n", "p3RestOctets>\n"}, {14, 14}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__RRM__PagingReq__Type3__NW__MS_p3RestOctets_oer_ext_arr_[0] = {};
const int PDU__RRM__PagingReq__Type3__NW__MS_p3RestOctets_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__RRM__PagingReq__Type3__NW__MS_p3RestOctets_oer_ = { -1, TRUE, 3, FALSE, 0, 0, PDU__RRM__PagingReq__Type3__NW__MS_p3RestOctets_oer_ext_arr_, 0, PDU__RRM__PagingReq__Type3__NW__MS_p3RestOctets_oer_p_};
const TTCN_Typedescriptor_t PDU__RRM__PagingReq__Type3__NW__MS_p3RestOctets_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PagingReq_Type3_NW_MS.p3RestOctets", &OCTETSTRING_ber_, &General__Types::OCT3_raw_, &OCTETSTRING_text_, &PDU__RRM__PagingReq__Type3__NW__MS_p3RestOctets_xer_, &OCTETSTRING_json_, &PDU__RRM__PagingReq__Type3__NW__MS_p3RestOctets_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PagingReq__Type3__NW__MS_p3RestOctets_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__PagingReq__Type3__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__PagingReq__Type3__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__PagingReq__Type3__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PagingReq_Type3_NW_MS", NULL, &PDU__RRM__PagingReq__Type3__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PagingReq__Type3__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__PagingResponse__MS__NW_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__PagingResponse__MS__NW_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__PagingResponse__MS__NW_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PagingResponse_MS_NW.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__PagingResponse__MS__NW_messageType_xer_, &BITSTRING_json_, &PDU__RRM__PagingResponse__MS__NW_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PagingResponse__MS__NW_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__PagingResponse__MS__NW_cipheringKeySequenceNumber_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__PagingResponse__MS__NW_spare1__4_xer_ = { {"spare1_4>\n", "spare1_4>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__PagingResponse__MS__NW_spare1__4_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__PagingResponse__MS__NW_spare1__4_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PagingResponse_MS_NW.spare1_4", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &PDU__RRM__PagingResponse__MS__NW_spare1__4_xer_, &BITSTRING_json_, &PDU__RRM__PagingResponse__MS__NW_spare1__4_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PagingResponse__MS__NW_spare1__4_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__PagingResponse__MS__NW_mobileStationClassmark_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__PagingResponse__MS__NW_mobileIdentity_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__PagingResponse__MS__NW_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__PagingResponse__MS__NW
const TTCN_Typedescriptor_t PDU__RRM__PagingResponse__MS__NW_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PagingResponse_MS_NW", NULL, &PDU__RRM__PagingResponse__MS__NW_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PagingResponse__MS__NW_additionalUpdateParameters_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__PagingResponse__MS__NW_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__PartialRelease__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__PartialRelease__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__PartialRelease__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PartialRelease_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__PartialRelease__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__PartialRelease__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PartialRelease__NW__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__PartialRelease__NW__MS_channelDescription_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__PartialRelease__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__PartialRelease__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__PartialRelease__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PartialRelease_NW_MS", NULL, &PDU__RRM__PartialRelease__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PartialRelease__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__PartialReleaseComplete__MS__NW_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__PartialReleaseComplete__MS__NW_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__PartialReleaseComplete__MS__NW_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PartialReleaseComplete_MS_NW.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__PartialReleaseComplete__MS__NW_messageType_xer_, &BITSTRING_json_, &PDU__RRM__PartialReleaseComplete__MS__NW_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PartialReleaseComplete__MS__NW_messageType_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__PartialReleaseComplete__MS__NW_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__PartialReleaseComplete__MS__NW
const TTCN_Typedescriptor_t PDU__RRM__PartialReleaseComplete__MS__NW_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PartialReleaseComplete_MS_NW", NULL, &PDU__RRM__PartialReleaseComplete__MS__NW_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PartialReleaseComplete__MS__NW_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__PhysicalInformation__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__PhysicalInformation__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__PhysicalInformation__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PhysicalInformation_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__PhysicalInformation__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__PhysicalInformation__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PhysicalInformation__NW__MS_messageType_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__PhysicalInformation__NW__MS_timingAdvance_xer_ = { {"timingAdvance>\n", "timingAdvance>\n"}, {15, 15}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__RRM__PhysicalInformation__NW__MS_timingAdvance_oer_ext_arr_[0] = {};
const int PDU__RRM__PhysicalInformation__NW__MS_timingAdvance_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__RRM__PhysicalInformation__NW__MS_timingAdvance_oer_ = { -1, TRUE, 1, FALSE, 0, 0, PDU__RRM__PhysicalInformation__NW__MS_timingAdvance_oer_ext_arr_, 0, PDU__RRM__PhysicalInformation__NW__MS_timingAdvance_oer_p_};
const TTCN_Typedescriptor_t PDU__RRM__PhysicalInformation__NW__MS_timingAdvance_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PhysicalInformation_NW_MS.timingAdvance", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &PDU__RRM__PhysicalInformation__NW__MS_timingAdvance_xer_, &OCTETSTRING_json_, &PDU__RRM__PhysicalInformation__NW__MS_timingAdvance_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PhysicalInformation__NW__MS_timingAdvance_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__PhysicalInformation__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__PhysicalInformation__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__PhysicalInformation__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_PhysicalInformation_NW_MS", NULL, &PDU__RRM__PhysicalInformation__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__PhysicalInformation__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__RR__Status_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__RR__Status_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__RR__Status_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_RR_Status.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__RR__Status_messageType_xer_, &BITSTRING_json_, &PDU__RRM__RR__Status_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__RR__Status_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__RR__Status_rR__Cause_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__RR__Status_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__RR__Status
const TTCN_Typedescriptor_t PDU__RRM__RR__Status_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_RR_Status", NULL, &PDU__RRM__RR__Status_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__RR__Status_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__TalkerIndication__MS__NW_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__TalkerIndication__MS__NW_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__TalkerIndication__MS__NW_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_TalkerIndication_MS_NW.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__TalkerIndication__MS__NW_messageType_xer_, &BITSTRING_json_, &PDU__RRM__TalkerIndication__MS__NW_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__TalkerIndication__MS__NW_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__TalkerIndication__MS__NW_mobileStationClassmark_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__TalkerIndication__MS__NW_mobileIdentity_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__TalkerIndication__MS__NW_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__TalkerIndication__MS__NW
const TTCN_Typedescriptor_t PDU__RRM__TalkerIndication__MS__NW_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_TalkerIndication_MS_NW", NULL, &PDU__RRM__TalkerIndication__MS__NW_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__TalkerIndication__MS__NW_cipheringKeySequenceNumber_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__TalkerIndication__MS__NW_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__UplinkBusy__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__UplinkBusy__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__UplinkBusy__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_UplinkBusy_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__UplinkBusy__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__UplinkBusy__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__UplinkBusy__NW__MS_messageType_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__UplinkBusy__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__UplinkBusy__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__UplinkBusy__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_UplinkBusy_NW_MS", NULL, &PDU__RRM__UplinkBusy__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__UplinkBusy__NW__MS_talkerPriorityStatus_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__UplinkBusy__NW__MS_token_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__UplinkBusy__NW__MS_talkerIdentity_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__UplinkBusy__NW__MS_uplinkAccessIndication_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__UplinkBusy__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__UplinkRelease_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__UplinkRelease_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__UplinkRelease_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_UplinkRelease.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__UplinkRelease_messageType_xer_, &BITSTRING_json_, &PDU__RRM__UplinkRelease_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__UplinkRelease_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__UplinkRelease_rR__Cause_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__UplinkRelease_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__UplinkRelease
const TTCN_Typedescriptor_t PDU__RRM__UplinkRelease_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_UplinkRelease", NULL, &PDU__RRM__UplinkRelease_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__UplinkRelease_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__VGCS__UplinkGrant__NW__MS_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__VGCS__UplinkGrant__NW__MS_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__VGCS__UplinkGrant__NW__MS_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_VGCS_UplinkGrant_NW_MS.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__VGCS__UplinkGrant__NW__MS_messageType_xer_, &BITSTRING_json_, &PDU__RRM__VGCS__UplinkGrant__NW__MS_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__VGCS__UplinkGrant__NW__MS_messageType_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__VGCS__UplinkGrant__NW__MS_requestReference_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__VGCS__UplinkGrant__NW__MS_timingAdvance_xer_ = { {"timingAdvance>\n", "timingAdvance>\n"}, {15, 15}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__RRM__VGCS__UplinkGrant__NW__MS_timingAdvance_oer_ext_arr_[0] = {};
const int PDU__RRM__VGCS__UplinkGrant__NW__MS_timingAdvance_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__RRM__VGCS__UplinkGrant__NW__MS_timingAdvance_oer_ = { -1, TRUE, 1, FALSE, 0, 0, PDU__RRM__VGCS__UplinkGrant__NW__MS_timingAdvance_oer_ext_arr_, 0, PDU__RRM__VGCS__UplinkGrant__NW__MS_timingAdvance_oer_p_};
const TTCN_Typedescriptor_t PDU__RRM__VGCS__UplinkGrant__NW__MS_timingAdvance_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_VGCS_UplinkGrant_NW_MS.timingAdvance", &OCTETSTRING_ber_, &General__Types::OCT1_raw_, &OCTETSTRING_text_, &PDU__RRM__VGCS__UplinkGrant__NW__MS_timingAdvance_xer_, &OCTETSTRING_json_, &PDU__RRM__VGCS__UplinkGrant__NW__MS_timingAdvance_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__VGCS__UplinkGrant__NW__MS_timingAdvance_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__VGCS__UplinkGrant__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__VGCS__UplinkGrant__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__VGCS__UplinkGrant__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_VGCS_UplinkGrant_NW_MS", NULL, &PDU__RRM__VGCS__UplinkGrant__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__VGCS__UplinkGrant__NW__MS_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__ApplicationInformation_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__ApplicationInformation_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__ApplicationInformation_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ApplicationInformation.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__ApplicationInformation_messageType_xer_, &BITSTRING_json_, &PDU__RRM__ApplicationInformation_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ApplicationInformation_messageType_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__ApplicationInformation_aPDU__ID_xer_ = { {"aPDU_ID>\n", "aPDU_ID>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__ApplicationInformation_aPDU__ID_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__ApplicationInformation_aPDU__ID_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ApplicationInformation.aPDU_ID", &BITSTRING_ber_, &General__Types::BIT4_raw_, NULL, &PDU__RRM__ApplicationInformation_aPDU__ID_xer_, &BITSTRING_json_, &PDU__RRM__ApplicationInformation_aPDU__ID_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ApplicationInformation_aPDU__ID_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ApplicationInformation_aPDU__Flags_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ApplicationInformation_aPDU__Data_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__ApplicationInformation_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__ApplicationInformation
const TTCN_Typedescriptor_t PDU__RRM__ApplicationInformation_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ApplicationInformation", NULL, &PDU__RRM__ApplicationInformation_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ApplicationInformation_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__ServiceInformationMessage__MS__NW_messageType_xer_ = { {"messageType>\n", "messageType>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const TTCN_OERdescriptor_t PDU__RRM__ServiceInformationMessage__MS__NW_messageType_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL };
const TTCN_Typedescriptor_t PDU__RRM__ServiceInformationMessage__MS__NW_messageType_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ServiceInformationMessage_MS_NW.messageType", &BITSTRING_ber_, &General__Types::BIT8_raw_, NULL, &PDU__RRM__ServiceInformationMessage__MS__NW_messageType_xer_, &BITSTRING_json_, &PDU__RRM__ServiceInformationMessage__MS__NW_messageType_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ServiceInformationMessage__MS__NW_messageType_default_coding("RAW");
const XERdescriptor_t       PDU__RRM__ServiceInformationMessage__MS__NW_tLLI_xer_ = { {"tLLI>\n", "tLLI>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE,  NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE };
const int PDU__RRM__ServiceInformationMessage__MS__NW_tLLI_oer_ext_arr_[0] = {};
const int PDU__RRM__ServiceInformationMessage__MS__NW_tLLI_oer_p_[0] = {};
const TTCN_OERdescriptor_t PDU__RRM__ServiceInformationMessage__MS__NW_tLLI_oer_ = { -1, TRUE, 4, FALSE, 0, 0, PDU__RRM__ServiceInformationMessage__MS__NW_tLLI_oer_ext_arr_, 0, PDU__RRM__ServiceInformationMessage__MS__NW_tLLI_oer_p_};
const TTCN_Typedescriptor_t PDU__RRM__ServiceInformationMessage__MS__NW_tLLI_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ServiceInformationMessage_MS_NW.tLLI", &OCTETSTRING_ber_, &General__Types::OCT4_raw_, &OCTETSTRING_text_, &PDU__RRM__ServiceInformationMessage__MS__NW_tLLI_xer_, &OCTETSTRING_json_, &PDU__RRM__ServiceInformationMessage__MS__NW_tLLI_oer_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ServiceInformationMessage__MS__NW_tLLI_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ServiceInformationMessage__MS__NW_routingAreaIdentification_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__ServiceInformationMessage__MS__NW_serviceSupport_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__ServiceInformationMessage__MS__NW_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__ServiceInformationMessage__MS__NW
const TTCN_Typedescriptor_t PDU__RRM__ServiceInformationMessage__MS__NW_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_ServiceInformationMessage_MS_NW", NULL, &PDU__RRM__ServiceInformationMessage__MS__NW_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__ServiceInformationMessage__MS__NW_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__MS__NW_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__MS__NW
const TTCN_Typedescriptor_t PDU__RRM__MS__NW_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_MS_NW", NULL, &PDU__RRM__MS__NW_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__MS__NW_cipheringModeComplete_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__MS__NW_configurationChangeAck_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__MS__NW_configurationChangeRej_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__MS__NW_assignmentComplete_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__MS__NW_assignmentFailure_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__MS__NW_handoverComplete_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__MS__NW_handoverFailure_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__MS__NW_partialReleaseComplete_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__MS__NW_pagingResponse_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__MS__NW_notificationResponse_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__MS__NW_rR__Status_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__MS__NW_channelModeModifyAck_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__MS__NW_classmarkChange_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__MS__NW_gPRS__suspensionRequest_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__MS__NW_serviceInformationMessage_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__MS__NW_uplinkRelease_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__MS__NW_talkerIndication_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__MS__NW_applicationInformation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__MS__NW_dTM__AssignmentFailure_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__MS__NW_dTM__Request_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__MS__NW_uTRAN__ClassmarkChange_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__MS__NW_cDMA2000__ClassmarkChange_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__MS__NW_gERAN__IU__ModeClassmarkChange_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__MS__NW_default_coding("RAW");
const TTCN_RAWdescriptor_t PDU__RRM__NW__MS_raw_ = {0,SG_NO,ORDER_LSB,ORDER_LSB,ORDER_LSB,ORDER_LSB,EXT_BIT_NO,ORDER_LSB,ORDER_LSB,TOP_BIT_INHERITED,0,0,0,8,0,NULL,-1,CharCoding::UNKNOWN_CHAR_CODING,NULL,false};
// No XER for PDU__RRM__NW__MS
const TTCN_Typedescriptor_t PDU__RRM__NW__MS_descr_ = { "@MobileL3_RRM_Types.PDU_RRM_NW_MS", NULL, &PDU__RRM__NW__MS_raw_, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE };
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_additionalAssignment_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_immediatePacketAssignment_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_cipheringModeCommand_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_configurationChangeCommand_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_assignmentCommand_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_handoverCommand_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_physicalInformation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_channelRelease_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_partialRelease_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_pagingReq__Type1_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_pagingReq__Type2_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_pagingReq__Type3_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_channelModeModify_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_rR__Status_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_frequency__Redefinition_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_classmarkEnquiry_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_mBMS__Announcement_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_vGCS__UplinkGrant_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_uplinkRelease_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_uplinkBusy_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_applicationInformation_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_dTM__AssignmentCommand_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_dTM__Information_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_dTM__Reject_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_packetNotification_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_interSystemToUTRAN__HandoverCommand_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_interSystemToCDMA2000HandoverCommand_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_interSystemToEUTRAN__HandoverCommand_default_coding("RAW");
UNIVERSAL_CHARSTRING PDU__RRM__NW__MS_default_coding("RAW");
TTCN_Module module_object("MobileL3_RRM_Types", __DATE__, __TIME__, module_checksum, pre_init_module, "", 0U, 2U, 0U, 99U, "", 0LU, 0, post_init_module, NULL, NULL, NULL, NULL, NULL, NULL, NULL);

const RuntimeVersionChecker ver_checker(  current_runtime_version.requires_major_version_11,
  current_runtime_version.requires_minor_version_1,
  current_runtime_version.requires_patch_level_0,  current_runtime_version.requires_runtime_1);

/* Member functions of C++ classes */

BARange__TLV::BARange__TLV()
{
}

BARange__TLV::BARange__TLV(const OCTETSTRING& par_elementIdentifier,
    const INTEGER& par_lengthIndicator,
    const OCTETSTRING& par_numberOfRanges,
    const OCTETSTRING& par_ranges)
  :   field_elementIdentifier(par_elementIdentifier),
  field_lengthIndicator(par_lengthIndicator),
  field_numberOfRanges(par_numberOfRanges),
  field_ranges(par_ranges)
{
}

BARange__TLV::BARange__TLV(const BARange__TLV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.BARange_TLV.");
if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
else field_elementIdentifier.clean_up();
if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
else field_lengthIndicator.clean_up();
if (other_value.numberOfRanges().is_bound()) field_numberOfRanges = other_value.numberOfRanges();
else field_numberOfRanges.clean_up();
if (other_value.ranges().is_bound()) field_ranges = other_value.ranges();
else field_ranges.clean_up();
}

void BARange__TLV::clean_up()
{
field_elementIdentifier.clean_up();
field_lengthIndicator.clean_up();
field_numberOfRanges.clean_up();
field_ranges.clean_up();
}

const TTCN_Typedescriptor_t* BARange__TLV::get_descriptor() const { return &BARange__TLV_descr_; }
BARange__TLV& BARange__TLV::operator=(const BARange__TLV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.BARange_TLV.");
  if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
  else field_elementIdentifier.clean_up();
  if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
  else field_lengthIndicator.clean_up();
  if (other_value.numberOfRanges().is_bound()) field_numberOfRanges = other_value.numberOfRanges();
  else field_numberOfRanges.clean_up();
  if (other_value.ranges().is_bound()) field_ranges = other_value.ranges();
  else field_ranges.clean_up();
}
return *this;
}

boolean BARange__TLV::operator==(const BARange__TLV& other_value) const
{
return field_elementIdentifier==other_value.field_elementIdentifier
  && field_lengthIndicator==other_value.field_lengthIndicator
  && field_numberOfRanges==other_value.field_numberOfRanges
  && field_ranges==other_value.field_ranges;
}

boolean BARange__TLV::is_bound() const
{
return (field_elementIdentifier.is_bound())
  || (field_lengthIndicator.is_bound())
  || (field_numberOfRanges.is_bound())
  || (field_ranges.is_bound());
}
boolean BARange__TLV::is_value() const
{
return field_elementIdentifier.is_value()
  && field_lengthIndicator.is_value()
  && field_numberOfRanges.is_value()
  && field_ranges.is_value();
}
void BARange__TLV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ elementIdentifier := ");
field_elementIdentifier.log();
TTCN_Logger::log_event_str(", lengthIndicator := ");
field_lengthIndicator.log();
TTCN_Logger::log_event_str(", numberOfRanges := ");
field_numberOfRanges.log();
TTCN_Logger::log_event_str(", ranges := ");
field_ranges.log();
TTCN_Logger::log_event_str(" }");
}

void BARange__TLV::set_implicit_omit()
{
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (numberOfRanges().is_bound()) numberOfRanges().set_implicit_omit();
if (ranges().is_bound()) ranges().set_implicit_omit();
}

void BARange__TLV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (4<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.BARange_TLV has 4 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) numberOfRanges().set_param(*param.get_elem(2));
    if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) ranges().set_param(*param.get_elem(3));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "numberOfRanges")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          numberOfRanges().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "ranges")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          ranges().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.BARange_TLV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.BARange_TLV");
  }
}

void BARange__TLV::encode_text(Text_Buf& text_buf) const
{
field_elementIdentifier.encode_text(text_buf);
field_lengthIndicator.encode_text(text_buf);
field_numberOfRanges.encode_text(text_buf);
field_ranges.encode_text(text_buf);
}

void BARange__TLV::decode_text(Text_Buf& text_buf)
{
field_elementIdentifier.decode_text(text_buf);
field_lengthIndicator.decode_text(text_buf);
field_numberOfRanges.decode_text(text_buf);
field_ranges.decode_text(text_buf);
}

void BARange__TLV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void BARange__TLV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int BARange__TLV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  int value_of_length_field1 = 0;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_elementIdentifier.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, BARange__TLV_lengthIndicator_descr_.raw->forceomit);
  decoded_field_length = field_lengthIndicator.RAW_decode(BARange__TLV_lengthIndicator_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  INTEGER tmp1 = field_lengthIndicator.convert_to_Integer(BARange__TLV_lengthIndicator_descr_);
  field_lengthIndicator = tmp1;
  value_of_length_field1 += tmp1.get_long_long_val() * 8;
  RAW_Force_Omit field_2_force_omit(2, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_numberOfRanges.RAW_decode(General__Types::OCT1_descr_, p_buf, min_of_ints(2, limit, value_of_length_field1), local_top_order, no_err, -1, TRUE, &field_2_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  value_of_length_field1 -= decoded_field_length;
  RAW_Force_Omit field_3_force_omit(3, force_omit, General__Types::OCTN_descr_.raw->forceomit);
  decoded_field_length = field_ranges.RAW_decode(General__Types::OCTN_descr_, p_buf, min_of_ints(2, limit, value_of_length_field1), local_top_order, no_err, -1, TRUE, &field_3_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  value_of_length_field1 -= decoded_field_length;
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int BARange__TLV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 4;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(4);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::OCT1_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, BARange__TLV_lengthIndicator_descr_.raw);
  myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, General__Types::OCT1_descr_.raw);
  myleaf.body.node.nodes[3] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 3, General__Types::OCTN_descr_.raw);
  encoded_length += field_elementIdentifier.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += 8;
  myleaf.body.node.nodes[1]->calc = CALC_LENGTH;
  myleaf.body.node.nodes[1]->coding_descr = &BARange__TLV_lengthIndicator_descr_;
  myleaf.body.node.nodes[1]->calcof.lengthto.num_of_fields = 2;
  myleaf.body.node.nodes[1]->calcof.lengthto.unit = 8;
  myleaf.body.node.nodes[1]->calcof.lengthto.offset = 0;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields = init_lengthto_fields_list(2);
  myleaf.body.node.nodes[1]->length = 8;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields[0].level = myleaf.body.node.nodes[2]->curr_pos.level;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields[0].pos = myleaf.body.node.nodes[2]->curr_pos.pos;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields[1].level = myleaf.body.node.nodes[3]->curr_pos.level;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields[1].pos = myleaf.body.node.nodes[3]->curr_pos.pos;
  encoded_length += field_numberOfRanges.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[2]);
  encoded_length += field_ranges.RAW_encode(General__Types::OCTN_descr_, *myleaf.body.node.nodes[3]);
  return myleaf.length = encoded_length;
}

struct BARange__TLV_template::single_value_struct {
OCTETSTRING_template field_elementIdentifier;
INTEGER_template field_lengthIndicator;
OCTETSTRING_template field_numberOfRanges;
OCTETSTRING_template field_ranges;
};

void BARange__TLV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_elementIdentifier = ANY_VALUE;
single_value->field_lengthIndicator = ANY_VALUE;
single_value->field_numberOfRanges = ANY_VALUE;
single_value->field_ranges = ANY_VALUE;
}
}
}

void BARange__TLV_template::copy_value(const BARange__TLV& other_value)
{
single_value = new single_value_struct;
if (other_value.elementIdentifier().is_bound()) {
  single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
  single_value->field_elementIdentifier.clean_up();
}
if (other_value.lengthIndicator().is_bound()) {
  single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
  single_value->field_lengthIndicator.clean_up();
}
if (other_value.numberOfRanges().is_bound()) {
  single_value->field_numberOfRanges = other_value.numberOfRanges();
} else {
  single_value->field_numberOfRanges.clean_up();
}
if (other_value.ranges().is_bound()) {
  single_value->field_ranges = other_value.ranges();
} else {
  single_value->field_ranges.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void BARange__TLV_template::copy_template(const BARange__TLV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.elementIdentifier().get_selection()) {
single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
single_value->field_elementIdentifier.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.lengthIndicator().get_selection()) {
single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
single_value->field_lengthIndicator.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.numberOfRanges().get_selection()) {
single_value->field_numberOfRanges = other_value.numberOfRanges();
} else {
single_value->field_numberOfRanges.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.ranges().get_selection()) {
single_value->field_ranges = other_value.ranges();
} else {
single_value->field_ranges.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new BARange__TLV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new BARange__TLV_template(*other_value.implication_.precondition);
implication_.implied_template = new BARange__TLV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.BARange_TLV.");
break;
}
set_selection(other_value);
}

BARange__TLV_template::BARange__TLV_template()
{
}

BARange__TLV_template::BARange__TLV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

BARange__TLV_template::BARange__TLV_template(const BARange__TLV& other_value)
{
copy_value(other_value);
}

BARange__TLV_template::BARange__TLV_template(const OPTIONAL<BARange__TLV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const BARange__TLV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.BARange_TLV from an unbound optional field.");
}
}

BARange__TLV_template::BARange__TLV_template(BARange__TLV_template* p_precondition, BARange__TLV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

BARange__TLV_template::BARange__TLV_template(Dynamic_Match_Interface<BARange__TLV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<BARange__TLV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

BARange__TLV_template::BARange__TLV_template(const BARange__TLV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

BARange__TLV_template::~BARange__TLV_template()
{
clean_up();
}

BARange__TLV_template& BARange__TLV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

BARange__TLV_template& BARange__TLV_template::operator=(const BARange__TLV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

BARange__TLV_template& BARange__TLV_template::operator=(const OPTIONAL<BARange__TLV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const BARange__TLV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.BARange_TLV.");
}
return *this;
}

BARange__TLV_template& BARange__TLV_template::operator=(const BARange__TLV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean BARange__TLV_template::match(const BARange__TLV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.elementIdentifier().is_bound()) return FALSE;
if(!single_value->field_elementIdentifier.match(other_value.elementIdentifier(), legacy))return FALSE;
if(!other_value.lengthIndicator().is_bound()) return FALSE;
if(!single_value->field_lengthIndicator.match(other_value.lengthIndicator(), legacy))return FALSE;
if(!other_value.numberOfRanges().is_bound()) return FALSE;
if(!single_value->field_numberOfRanges.match(other_value.numberOfRanges(), legacy))return FALSE;
if(!other_value.ranges().is_bound()) return FALSE;
if(!single_value->field_ranges.match(other_value.ranges(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.BARange_TLV.");
}
return FALSE;
}

boolean BARange__TLV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_elementIdentifier.is_bound()
 || single_value->field_lengthIndicator.is_bound()
 || single_value->field_numberOfRanges.is_bound()
 || single_value->field_ranges.is_bound();
}

boolean BARange__TLV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_elementIdentifier.is_value()
 && single_value->field_lengthIndicator.is_value()
 && single_value->field_numberOfRanges.is_value()
 && single_value->field_ranges.is_value();
}

void BARange__TLV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

BARange__TLV BARange__TLV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.BARange_TLV.");
BARange__TLV ret_val;
if (single_value->field_elementIdentifier.is_bound()) {
ret_val.elementIdentifier() = single_value->field_elementIdentifier.valueof();
}
if (single_value->field_lengthIndicator.is_bound()) {
ret_val.lengthIndicator() = single_value->field_lengthIndicator.valueof();
}
if (single_value->field_numberOfRanges.is_bound()) {
ret_val.numberOfRanges() = single_value->field_numberOfRanges.valueof();
}
if (single_value->field_ranges.is_bound()) {
ret_val.ranges() = single_value->field_ranges.valueof();
}
return ret_val;
}

void BARange__TLV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.BARange_TLV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new BARange__TLV_template[list_length];
}

BARange__TLV_template& BARange__TLV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.BARange_TLV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.BARange_TLV.");
return value_list.list_value[list_index];
}

OCTETSTRING_template& BARange__TLV_template::elementIdentifier()
{
set_specific();
return single_value->field_elementIdentifier;
}

const OCTETSTRING_template& BARange__TLV_template::elementIdentifier() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field elementIdentifier of a non-specific template of type @MobileL3_RRM_Types.BARange_TLV.");
return single_value->field_elementIdentifier;
}

INTEGER_template& BARange__TLV_template::lengthIndicator()
{
set_specific();
return single_value->field_lengthIndicator;
}

const INTEGER_template& BARange__TLV_template::lengthIndicator() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field lengthIndicator of a non-specific template of type @MobileL3_RRM_Types.BARange_TLV.");
return single_value->field_lengthIndicator;
}

OCTETSTRING_template& BARange__TLV_template::numberOfRanges()
{
set_specific();
return single_value->field_numberOfRanges;
}

const OCTETSTRING_template& BARange__TLV_template::numberOfRanges() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field numberOfRanges of a non-specific template of type @MobileL3_RRM_Types.BARange_TLV.");
return single_value->field_numberOfRanges;
}

OCTETSTRING_template& BARange__TLV_template::ranges()
{
set_specific();
return single_value->field_ranges;
}

const OCTETSTRING_template& BARange__TLV_template::ranges() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field ranges of a non-specific template of type @MobileL3_RRM_Types.BARange_TLV.");
return single_value->field_ranges;
}

int BARange__TLV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.BARange_TLV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 4;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.BARange_TLV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.BARange_TLV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.BARange_TLV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.BARange_TLV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.BARange_TLV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.BARange_TLV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.BARange_TLV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.BARange_TLV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.BARange_TLV.");
  }
  return 0;
}

void BARange__TLV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log();
TTCN_Logger::log_event_str(", lengthIndicator := ");
single_value->field_lengthIndicator.log();
TTCN_Logger::log_event_str(", numberOfRanges := ");
single_value->field_numberOfRanges.log();
TTCN_Logger::log_event_str(", ranges := ");
single_value->field_ranges.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void BARange__TLV_template::log_match(const BARange__TLV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_elementIdentifier.match(match_value.elementIdentifier(), legacy)){
TTCN_Logger::log_logmatch_info(".elementIdentifier");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_lengthIndicator.match(match_value.lengthIndicator(), legacy)){
TTCN_Logger::log_logmatch_info(".lengthIndicator");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_numberOfRanges.match(match_value.numberOfRanges(), legacy)){
TTCN_Logger::log_logmatch_info(".numberOfRanges");
single_value->field_numberOfRanges.log_match(match_value.numberOfRanges(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_ranges.match(match_value.ranges(), legacy)){
TTCN_Logger::log_logmatch_info(".ranges");
single_value->field_ranges.log_match(match_value.ranges(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::log_event_str(", lengthIndicator := ");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::log_event_str(", numberOfRanges := ");
single_value->field_numberOfRanges.log_match(match_value.numberOfRanges(), legacy);
TTCN_Logger::log_event_str(", ranges := ");
single_value->field_ranges.log_match(match_value.ranges(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void BARange__TLV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (numberOfRanges().is_bound()) numberOfRanges().set_implicit_omit();
if (ranges().is_bound()) ranges().set_implicit_omit();
}

void BARange__TLV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_elementIdentifier.encode_text(text_buf);
single_value->field_lengthIndicator.encode_text(text_buf);
single_value->field_numberOfRanges.encode_text(text_buf);
single_value->field_ranges.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.BARange_TLV.");
}
}

void BARange__TLV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_elementIdentifier.decode_text(text_buf);
single_value->field_lengthIndicator.decode_text(text_buf);
single_value->field_numberOfRanges.decode_text(text_buf);
single_value->field_ranges.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new BARange__TLV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.BARange_TLV.");
}
}

void BARange__TLV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    BARange__TLV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (4<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.BARange_TLV has 4 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) numberOfRanges().set_param(*param.get_elem(2));
    if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) ranges().set_param(*param.get_elem(3));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "numberOfRanges")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          numberOfRanges().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "ranges")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          ranges().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.BARange_TLV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    BARange__TLV_template* precondition = new BARange__TLV_template;
    precondition->set_param(*param.get_elem(0));
    BARange__TLV_template* implied_template = new BARange__TLV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = BARange__TLV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.BARange_TLV");
  }
  is_ifpresent = param.get_ifpresent();
}

void BARange__TLV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_elementIdentifier.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.BARange_TLV");
single_value->field_lengthIndicator.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.BARange_TLV");
single_value->field_numberOfRanges.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.BARange_TLV");
single_value->field_ranges.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.BARange_TLV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.BARange_TLV");
}

boolean BARange__TLV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean BARange__TLV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

CellChannelDescription__TV::CellChannelDescription__TV()
{
}

CellChannelDescription__TV::CellChannelDescription__TV(const OCTETSTRING& par_elementIdentifier,
    const OCTETSTRING& par_octet2__17)
  :   field_elementIdentifier(par_elementIdentifier),
  field_octet2__17(par_octet2__17)
{
}

CellChannelDescription__TV::CellChannelDescription__TV(const CellChannelDescription__TV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.CellChannelDescription_TV.");
if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
else field_elementIdentifier.clean_up();
if (other_value.octet2__17().is_bound()) field_octet2__17 = other_value.octet2__17();
else field_octet2__17.clean_up();
}

void CellChannelDescription__TV::clean_up()
{
field_elementIdentifier.clean_up();
field_octet2__17.clean_up();
}

const TTCN_Typedescriptor_t* CellChannelDescription__TV::get_descriptor() const { return &CellChannelDescription__TV_descr_; }
CellChannelDescription__TV& CellChannelDescription__TV::operator=(const CellChannelDescription__TV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.CellChannelDescription_TV.");
  if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
  else field_elementIdentifier.clean_up();
  if (other_value.octet2__17().is_bound()) field_octet2__17 = other_value.octet2__17();
  else field_octet2__17.clean_up();
}
return *this;
}

boolean CellChannelDescription__TV::operator==(const CellChannelDescription__TV& other_value) const
{
return field_elementIdentifier==other_value.field_elementIdentifier
  && field_octet2__17==other_value.field_octet2__17;
}

boolean CellChannelDescription__TV::is_bound() const
{
return (field_elementIdentifier.is_bound())
  || (field_octet2__17.is_bound());
}
boolean CellChannelDescription__TV::is_value() const
{
return field_elementIdentifier.is_value()
  && field_octet2__17.is_value();
}
void CellChannelDescription__TV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ elementIdentifier := ");
field_elementIdentifier.log();
TTCN_Logger::log_event_str(", octet2_17 := ");
field_octet2__17.log();
TTCN_Logger::log_event_str(" }");
}

void CellChannelDescription__TV::set_implicit_omit()
{
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (octet2__17().is_bound()) octet2__17().set_implicit_omit();
}

void CellChannelDescription__TV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.CellChannelDescription_TV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) octet2__17().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "octet2_17")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          octet2__17().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.CellChannelDescription_TV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.CellChannelDescription_TV");
  }
}

void CellChannelDescription__TV::encode_text(Text_Buf& text_buf) const
{
field_elementIdentifier.encode_text(text_buf);
field_octet2__17.encode_text(text_buf);
}

void CellChannelDescription__TV::decode_text(Text_Buf& text_buf)
{
field_elementIdentifier.decode_text(text_buf);
field_octet2__17.decode_text(text_buf);
}

void CellChannelDescription__TV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void CellChannelDescription__TV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int CellChannelDescription__TV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_elementIdentifier.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::OCT16_descr_.raw->forceomit);
  decoded_field_length = field_octet2__17.RAW_decode(General__Types::OCT16_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int CellChannelDescription__TV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::OCT1_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::OCT16_descr_.raw);
  encoded_length += field_elementIdentifier.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_octet2__17.RAW_encode(General__Types::OCT16_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct CellChannelDescription__TV_template::single_value_struct {
OCTETSTRING_template field_elementIdentifier;
OCTETSTRING_template field_octet2__17;
};

void CellChannelDescription__TV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_elementIdentifier = ANY_VALUE;
single_value->field_octet2__17 = ANY_VALUE;
}
}
}

void CellChannelDescription__TV_template::copy_value(const CellChannelDescription__TV& other_value)
{
single_value = new single_value_struct;
if (other_value.elementIdentifier().is_bound()) {
  single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
  single_value->field_elementIdentifier.clean_up();
}
if (other_value.octet2__17().is_bound()) {
  single_value->field_octet2__17 = other_value.octet2__17();
} else {
  single_value->field_octet2__17.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void CellChannelDescription__TV_template::copy_template(const CellChannelDescription__TV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.elementIdentifier().get_selection()) {
single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
single_value->field_elementIdentifier.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.octet2__17().get_selection()) {
single_value->field_octet2__17 = other_value.octet2__17();
} else {
single_value->field_octet2__17.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new CellChannelDescription__TV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new CellChannelDescription__TV_template(*other_value.implication_.precondition);
implication_.implied_template = new CellChannelDescription__TV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.CellChannelDescription_TV.");
break;
}
set_selection(other_value);
}

CellChannelDescription__TV_template::CellChannelDescription__TV_template()
{
}

CellChannelDescription__TV_template::CellChannelDescription__TV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

CellChannelDescription__TV_template::CellChannelDescription__TV_template(const CellChannelDescription__TV& other_value)
{
copy_value(other_value);
}

CellChannelDescription__TV_template::CellChannelDescription__TV_template(const OPTIONAL<CellChannelDescription__TV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const CellChannelDescription__TV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.CellChannelDescription_TV from an unbound optional field.");
}
}

CellChannelDescription__TV_template::CellChannelDescription__TV_template(CellChannelDescription__TV_template* p_precondition, CellChannelDescription__TV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

CellChannelDescription__TV_template::CellChannelDescription__TV_template(Dynamic_Match_Interface<CellChannelDescription__TV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<CellChannelDescription__TV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

CellChannelDescription__TV_template::CellChannelDescription__TV_template(const CellChannelDescription__TV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

CellChannelDescription__TV_template::~CellChannelDescription__TV_template()
{
clean_up();
}

CellChannelDescription__TV_template& CellChannelDescription__TV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

CellChannelDescription__TV_template& CellChannelDescription__TV_template::operator=(const CellChannelDescription__TV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

CellChannelDescription__TV_template& CellChannelDescription__TV_template::operator=(const OPTIONAL<CellChannelDescription__TV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const CellChannelDescription__TV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.CellChannelDescription_TV.");
}
return *this;
}

CellChannelDescription__TV_template& CellChannelDescription__TV_template::operator=(const CellChannelDescription__TV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean CellChannelDescription__TV_template::match(const CellChannelDescription__TV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.elementIdentifier().is_bound()) return FALSE;
if(!single_value->field_elementIdentifier.match(other_value.elementIdentifier(), legacy))return FALSE;
if(!other_value.octet2__17().is_bound()) return FALSE;
if(!single_value->field_octet2__17.match(other_value.octet2__17(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.CellChannelDescription_TV.");
}
return FALSE;
}

boolean CellChannelDescription__TV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_elementIdentifier.is_bound()
 || single_value->field_octet2__17.is_bound();
}

boolean CellChannelDescription__TV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_elementIdentifier.is_value()
 && single_value->field_octet2__17.is_value();
}

void CellChannelDescription__TV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

CellChannelDescription__TV CellChannelDescription__TV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.CellChannelDescription_TV.");
CellChannelDescription__TV ret_val;
if (single_value->field_elementIdentifier.is_bound()) {
ret_val.elementIdentifier() = single_value->field_elementIdentifier.valueof();
}
if (single_value->field_octet2__17.is_bound()) {
ret_val.octet2__17() = single_value->field_octet2__17.valueof();
}
return ret_val;
}

void CellChannelDescription__TV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.CellChannelDescription_TV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new CellChannelDescription__TV_template[list_length];
}

CellChannelDescription__TV_template& CellChannelDescription__TV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.CellChannelDescription_TV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.CellChannelDescription_TV.");
return value_list.list_value[list_index];
}

OCTETSTRING_template& CellChannelDescription__TV_template::elementIdentifier()
{
set_specific();
return single_value->field_elementIdentifier;
}

const OCTETSTRING_template& CellChannelDescription__TV_template::elementIdentifier() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field elementIdentifier of a non-specific template of type @MobileL3_RRM_Types.CellChannelDescription_TV.");
return single_value->field_elementIdentifier;
}

OCTETSTRING_template& CellChannelDescription__TV_template::octet2__17()
{
set_specific();
return single_value->field_octet2__17;
}

const OCTETSTRING_template& CellChannelDescription__TV_template::octet2__17() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field octet2_17 of a non-specific template of type @MobileL3_RRM_Types.CellChannelDescription_TV.");
return single_value->field_octet2__17;
}

int CellChannelDescription__TV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellChannelDescription_TV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellChannelDescription_TV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellChannelDescription_TV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellChannelDescription_TV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellChannelDescription_TV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellChannelDescription_TV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellChannelDescription_TV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellChannelDescription_TV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellChannelDescription_TV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.CellChannelDescription_TV.");
  }
  return 0;
}

void CellChannelDescription__TV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log();
TTCN_Logger::log_event_str(", octet2_17 := ");
single_value->field_octet2__17.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void CellChannelDescription__TV_template::log_match(const CellChannelDescription__TV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_elementIdentifier.match(match_value.elementIdentifier(), legacy)){
TTCN_Logger::log_logmatch_info(".elementIdentifier");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_octet2__17.match(match_value.octet2__17(), legacy)){
TTCN_Logger::log_logmatch_info(".octet2_17");
single_value->field_octet2__17.log_match(match_value.octet2__17(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::log_event_str(", octet2_17 := ");
single_value->field_octet2__17.log_match(match_value.octet2__17(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void CellChannelDescription__TV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (octet2__17().is_bound()) octet2__17().set_implicit_omit();
}

void CellChannelDescription__TV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_elementIdentifier.encode_text(text_buf);
single_value->field_octet2__17.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.CellChannelDescription_TV.");
}
}

void CellChannelDescription__TV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_elementIdentifier.decode_text(text_buf);
single_value->field_octet2__17.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new CellChannelDescription__TV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.CellChannelDescription_TV.");
}
}

void CellChannelDescription__TV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    CellChannelDescription__TV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.CellChannelDescription_TV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) octet2__17().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "octet2_17")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          octet2__17().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.CellChannelDescription_TV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    CellChannelDescription__TV_template* precondition = new CellChannelDescription__TV_template;
    precondition->set_param(*param.get_elem(0));
    CellChannelDescription__TV_template* implied_template = new CellChannelDescription__TV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = CellChannelDescription__TV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.CellChannelDescription_TV");
  }
  is_ifpresent = param.get_ifpresent();
}

void CellChannelDescription__TV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_elementIdentifier.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.CellChannelDescription_TV");
single_value->field_octet2__17.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.CellChannelDescription_TV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.CellChannelDescription_TV");
}

boolean CellChannelDescription__TV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean CellChannelDescription__TV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

BAListPref__TLV::BAListPref__TLV()
{
}

BAListPref__TLV::BAListPref__TLV(const OCTETSTRING& par_elementIdentifier,
    const INTEGER& par_lengthIndicator,
    const OCTETSTRING& par_range__bafreq__info)
  :   field_elementIdentifier(par_elementIdentifier),
  field_lengthIndicator(par_lengthIndicator),
  field_range__bafreq__info(par_range__bafreq__info)
{
}

BAListPref__TLV::BAListPref__TLV(const BAListPref__TLV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.BAListPref_TLV.");
if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
else field_elementIdentifier.clean_up();
if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
else field_lengthIndicator.clean_up();
if (other_value.range__bafreq__info().is_bound()) field_range__bafreq__info = other_value.range__bafreq__info();
else field_range__bafreq__info.clean_up();
}

void BAListPref__TLV::clean_up()
{
field_elementIdentifier.clean_up();
field_lengthIndicator.clean_up();
field_range__bafreq__info.clean_up();
}

const TTCN_Typedescriptor_t* BAListPref__TLV::get_descriptor() const { return &BAListPref__TLV_descr_; }
BAListPref__TLV& BAListPref__TLV::operator=(const BAListPref__TLV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.BAListPref_TLV.");
  if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
  else field_elementIdentifier.clean_up();
  if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
  else field_lengthIndicator.clean_up();
  if (other_value.range__bafreq__info().is_bound()) field_range__bafreq__info = other_value.range__bafreq__info();
  else field_range__bafreq__info.clean_up();
}
return *this;
}

boolean BAListPref__TLV::operator==(const BAListPref__TLV& other_value) const
{
return field_elementIdentifier==other_value.field_elementIdentifier
  && field_lengthIndicator==other_value.field_lengthIndicator
  && field_range__bafreq__info==other_value.field_range__bafreq__info;
}

boolean BAListPref__TLV::is_bound() const
{
return (field_elementIdentifier.is_bound())
  || (field_lengthIndicator.is_bound())
  || (field_range__bafreq__info.is_bound());
}
boolean BAListPref__TLV::is_value() const
{
return field_elementIdentifier.is_value()
  && field_lengthIndicator.is_value()
  && field_range__bafreq__info.is_value();
}
void BAListPref__TLV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ elementIdentifier := ");
field_elementIdentifier.log();
TTCN_Logger::log_event_str(", lengthIndicator := ");
field_lengthIndicator.log();
TTCN_Logger::log_event_str(", range_bafreq_info := ");
field_range__bafreq__info.log();
TTCN_Logger::log_event_str(" }");
}

void BAListPref__TLV::set_implicit_omit()
{
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (range__bafreq__info().is_bound()) range__bafreq__info().set_implicit_omit();
}

void BAListPref__TLV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (3<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.BAListPref_TLV has 3 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) range__bafreq__info().set_param(*param.get_elem(2));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "range_bafreq_info")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          range__bafreq__info().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.BAListPref_TLV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.BAListPref_TLV");
  }
}

void BAListPref__TLV::encode_text(Text_Buf& text_buf) const
{
field_elementIdentifier.encode_text(text_buf);
field_lengthIndicator.encode_text(text_buf);
field_range__bafreq__info.encode_text(text_buf);
}

void BAListPref__TLV::decode_text(Text_Buf& text_buf)
{
field_elementIdentifier.decode_text(text_buf);
field_lengthIndicator.decode_text(text_buf);
field_range__bafreq__info.decode_text(text_buf);
}

void BAListPref__TLV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void BAListPref__TLV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int BAListPref__TLV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  int value_of_length_field1 = 0;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_elementIdentifier.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, BAListPref__TLV_lengthIndicator_descr_.raw->forceomit);
  decoded_field_length = field_lengthIndicator.RAW_decode(BAListPref__TLV_lengthIndicator_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  INTEGER tmp1 = field_lengthIndicator.convert_to_Integer(BAListPref__TLV_lengthIndicator_descr_);
  field_lengthIndicator = tmp1;
  value_of_length_field1 += tmp1.get_long_long_val() * 8;
  RAW_Force_Omit field_2_force_omit(2, force_omit, General__Types::OCTN_descr_.raw->forceomit);
  decoded_field_length = field_range__bafreq__info.RAW_decode(General__Types::OCTN_descr_, p_buf, min_of_ints(2, limit, value_of_length_field1), local_top_order, no_err, -1, TRUE, &field_2_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  value_of_length_field1 -= decoded_field_length;
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int BAListPref__TLV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 3;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(3);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::OCT1_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, BAListPref__TLV_lengthIndicator_descr_.raw);
  myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, General__Types::OCTN_descr_.raw);
  encoded_length += field_elementIdentifier.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += 8;
  myleaf.body.node.nodes[1]->calc = CALC_LENGTH;
  myleaf.body.node.nodes[1]->coding_descr = &BAListPref__TLV_lengthIndicator_descr_;
  myleaf.body.node.nodes[1]->calcof.lengthto.num_of_fields = 1;
  myleaf.body.node.nodes[1]->calcof.lengthto.unit = 8;
  myleaf.body.node.nodes[1]->calcof.lengthto.offset = 0;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields = init_lengthto_fields_list(1);
  myleaf.body.node.nodes[1]->length = 8;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields[0].level = myleaf.body.node.nodes[2]->curr_pos.level;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields[0].pos = myleaf.body.node.nodes[2]->curr_pos.pos;
  encoded_length += field_range__bafreq__info.RAW_encode(General__Types::OCTN_descr_, *myleaf.body.node.nodes[2]);
  return myleaf.length = encoded_length;
}

struct BAListPref__TLV_template::single_value_struct {
OCTETSTRING_template field_elementIdentifier;
INTEGER_template field_lengthIndicator;
OCTETSTRING_template field_range__bafreq__info;
};

void BAListPref__TLV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_elementIdentifier = ANY_VALUE;
single_value->field_lengthIndicator = ANY_VALUE;
single_value->field_range__bafreq__info = ANY_VALUE;
}
}
}

void BAListPref__TLV_template::copy_value(const BAListPref__TLV& other_value)
{
single_value = new single_value_struct;
if (other_value.elementIdentifier().is_bound()) {
  single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
  single_value->field_elementIdentifier.clean_up();
}
if (other_value.lengthIndicator().is_bound()) {
  single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
  single_value->field_lengthIndicator.clean_up();
}
if (other_value.range__bafreq__info().is_bound()) {
  single_value->field_range__bafreq__info = other_value.range__bafreq__info();
} else {
  single_value->field_range__bafreq__info.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void BAListPref__TLV_template::copy_template(const BAListPref__TLV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.elementIdentifier().get_selection()) {
single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
single_value->field_elementIdentifier.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.lengthIndicator().get_selection()) {
single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
single_value->field_lengthIndicator.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.range__bafreq__info().get_selection()) {
single_value->field_range__bafreq__info = other_value.range__bafreq__info();
} else {
single_value->field_range__bafreq__info.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new BAListPref__TLV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new BAListPref__TLV_template(*other_value.implication_.precondition);
implication_.implied_template = new BAListPref__TLV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.BAListPref_TLV.");
break;
}
set_selection(other_value);
}

BAListPref__TLV_template::BAListPref__TLV_template()
{
}

BAListPref__TLV_template::BAListPref__TLV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

BAListPref__TLV_template::BAListPref__TLV_template(const BAListPref__TLV& other_value)
{
copy_value(other_value);
}

BAListPref__TLV_template::BAListPref__TLV_template(const OPTIONAL<BAListPref__TLV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const BAListPref__TLV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.BAListPref_TLV from an unbound optional field.");
}
}

BAListPref__TLV_template::BAListPref__TLV_template(BAListPref__TLV_template* p_precondition, BAListPref__TLV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

BAListPref__TLV_template::BAListPref__TLV_template(Dynamic_Match_Interface<BAListPref__TLV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<BAListPref__TLV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

BAListPref__TLV_template::BAListPref__TLV_template(const BAListPref__TLV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

BAListPref__TLV_template::~BAListPref__TLV_template()
{
clean_up();
}

BAListPref__TLV_template& BAListPref__TLV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

BAListPref__TLV_template& BAListPref__TLV_template::operator=(const BAListPref__TLV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

BAListPref__TLV_template& BAListPref__TLV_template::operator=(const OPTIONAL<BAListPref__TLV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const BAListPref__TLV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.BAListPref_TLV.");
}
return *this;
}

BAListPref__TLV_template& BAListPref__TLV_template::operator=(const BAListPref__TLV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean BAListPref__TLV_template::match(const BAListPref__TLV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.elementIdentifier().is_bound()) return FALSE;
if(!single_value->field_elementIdentifier.match(other_value.elementIdentifier(), legacy))return FALSE;
if(!other_value.lengthIndicator().is_bound()) return FALSE;
if(!single_value->field_lengthIndicator.match(other_value.lengthIndicator(), legacy))return FALSE;
if(!other_value.range__bafreq__info().is_bound()) return FALSE;
if(!single_value->field_range__bafreq__info.match(other_value.range__bafreq__info(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.BAListPref_TLV.");
}
return FALSE;
}

boolean BAListPref__TLV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_elementIdentifier.is_bound()
 || single_value->field_lengthIndicator.is_bound()
 || single_value->field_range__bafreq__info.is_bound();
}

boolean BAListPref__TLV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_elementIdentifier.is_value()
 && single_value->field_lengthIndicator.is_value()
 && single_value->field_range__bafreq__info.is_value();
}

void BAListPref__TLV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

BAListPref__TLV BAListPref__TLV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.BAListPref_TLV.");
BAListPref__TLV ret_val;
if (single_value->field_elementIdentifier.is_bound()) {
ret_val.elementIdentifier() = single_value->field_elementIdentifier.valueof();
}
if (single_value->field_lengthIndicator.is_bound()) {
ret_val.lengthIndicator() = single_value->field_lengthIndicator.valueof();
}
if (single_value->field_range__bafreq__info.is_bound()) {
ret_val.range__bafreq__info() = single_value->field_range__bafreq__info.valueof();
}
return ret_val;
}

void BAListPref__TLV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.BAListPref_TLV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new BAListPref__TLV_template[list_length];
}

BAListPref__TLV_template& BAListPref__TLV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.BAListPref_TLV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.BAListPref_TLV.");
return value_list.list_value[list_index];
}

OCTETSTRING_template& BAListPref__TLV_template::elementIdentifier()
{
set_specific();
return single_value->field_elementIdentifier;
}

const OCTETSTRING_template& BAListPref__TLV_template::elementIdentifier() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field elementIdentifier of a non-specific template of type @MobileL3_RRM_Types.BAListPref_TLV.");
return single_value->field_elementIdentifier;
}

INTEGER_template& BAListPref__TLV_template::lengthIndicator()
{
set_specific();
return single_value->field_lengthIndicator;
}

const INTEGER_template& BAListPref__TLV_template::lengthIndicator() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field lengthIndicator of a non-specific template of type @MobileL3_RRM_Types.BAListPref_TLV.");
return single_value->field_lengthIndicator;
}

OCTETSTRING_template& BAListPref__TLV_template::range__bafreq__info()
{
set_specific();
return single_value->field_range__bafreq__info;
}

const OCTETSTRING_template& BAListPref__TLV_template::range__bafreq__info() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field range_bafreq_info of a non-specific template of type @MobileL3_RRM_Types.BAListPref_TLV.");
return single_value->field_range__bafreq__info;
}

int BAListPref__TLV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.BAListPref_TLV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 3;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.BAListPref_TLV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.BAListPref_TLV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.BAListPref_TLV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.BAListPref_TLV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.BAListPref_TLV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.BAListPref_TLV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.BAListPref_TLV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.BAListPref_TLV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.BAListPref_TLV.");
  }
  return 0;
}

void BAListPref__TLV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log();
TTCN_Logger::log_event_str(", lengthIndicator := ");
single_value->field_lengthIndicator.log();
TTCN_Logger::log_event_str(", range_bafreq_info := ");
single_value->field_range__bafreq__info.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void BAListPref__TLV_template::log_match(const BAListPref__TLV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_elementIdentifier.match(match_value.elementIdentifier(), legacy)){
TTCN_Logger::log_logmatch_info(".elementIdentifier");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_lengthIndicator.match(match_value.lengthIndicator(), legacy)){
TTCN_Logger::log_logmatch_info(".lengthIndicator");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_range__bafreq__info.match(match_value.range__bafreq__info(), legacy)){
TTCN_Logger::log_logmatch_info(".range_bafreq_info");
single_value->field_range__bafreq__info.log_match(match_value.range__bafreq__info(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::log_event_str(", lengthIndicator := ");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::log_event_str(", range_bafreq_info := ");
single_value->field_range__bafreq__info.log_match(match_value.range__bafreq__info(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void BAListPref__TLV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (range__bafreq__info().is_bound()) range__bafreq__info().set_implicit_omit();
}

void BAListPref__TLV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_elementIdentifier.encode_text(text_buf);
single_value->field_lengthIndicator.encode_text(text_buf);
single_value->field_range__bafreq__info.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.BAListPref_TLV.");
}
}

void BAListPref__TLV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_elementIdentifier.decode_text(text_buf);
single_value->field_lengthIndicator.decode_text(text_buf);
single_value->field_range__bafreq__info.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new BAListPref__TLV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.BAListPref_TLV.");
}
}

void BAListPref__TLV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    BAListPref__TLV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (3<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.BAListPref_TLV has 3 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) range__bafreq__info().set_param(*param.get_elem(2));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "range_bafreq_info")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          range__bafreq__info().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.BAListPref_TLV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    BAListPref__TLV_template* precondition = new BAListPref__TLV_template;
    precondition->set_param(*param.get_elem(0));
    BAListPref__TLV_template* implied_template = new BAListPref__TLV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = BAListPref__TLV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.BAListPref_TLV");
  }
  is_ifpresent = param.get_ifpresent();
}

void BAListPref__TLV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_elementIdentifier.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.BAListPref_TLV");
single_value->field_lengthIndicator.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.BAListPref_TLV");
single_value->field_range__bafreq__info.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.BAListPref_TLV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.BAListPref_TLV");
}

boolean BAListPref__TLV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean BAListPref__TLV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

UTRANFrequencyList__TLV::UTRANFrequencyList__TLV()
{
}

UTRANFrequencyList__TLV::UTRANFrequencyList__TLV(const OCTETSTRING& par_elementIdentifier,
    const INTEGER& par_lengthIndicator,
    const OCTETSTRING& par_fdd__tdd)
  :   field_elementIdentifier(par_elementIdentifier),
  field_lengthIndicator(par_lengthIndicator),
  field_fdd__tdd(par_fdd__tdd)
{
}

UTRANFrequencyList__TLV::UTRANFrequencyList__TLV(const UTRANFrequencyList__TLV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV.");
if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
else field_elementIdentifier.clean_up();
if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
else field_lengthIndicator.clean_up();
if (other_value.fdd__tdd().is_bound()) field_fdd__tdd = other_value.fdd__tdd();
else field_fdd__tdd.clean_up();
}

void UTRANFrequencyList__TLV::clean_up()
{
field_elementIdentifier.clean_up();
field_lengthIndicator.clean_up();
field_fdd__tdd.clean_up();
}

const TTCN_Typedescriptor_t* UTRANFrequencyList__TLV::get_descriptor() const { return &UTRANFrequencyList__TLV_descr_; }
UTRANFrequencyList__TLV& UTRANFrequencyList__TLV::operator=(const UTRANFrequencyList__TLV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV.");
  if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
  else field_elementIdentifier.clean_up();
  if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
  else field_lengthIndicator.clean_up();
  if (other_value.fdd__tdd().is_bound()) field_fdd__tdd = other_value.fdd__tdd();
  else field_fdd__tdd.clean_up();
}
return *this;
}

boolean UTRANFrequencyList__TLV::operator==(const UTRANFrequencyList__TLV& other_value) const
{
return field_elementIdentifier==other_value.field_elementIdentifier
  && field_lengthIndicator==other_value.field_lengthIndicator
  && field_fdd__tdd==other_value.field_fdd__tdd;
}

boolean UTRANFrequencyList__TLV::is_bound() const
{
return (field_elementIdentifier.is_bound())
  || (field_lengthIndicator.is_bound())
  || (field_fdd__tdd.is_bound());
}
boolean UTRANFrequencyList__TLV::is_value() const
{
return field_elementIdentifier.is_value()
  && field_lengthIndicator.is_value()
  && field_fdd__tdd.is_value();
}
void UTRANFrequencyList__TLV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ elementIdentifier := ");
field_elementIdentifier.log();
TTCN_Logger::log_event_str(", lengthIndicator := ");
field_lengthIndicator.log();
TTCN_Logger::log_event_str(", fdd_tdd := ");
field_fdd__tdd.log();
TTCN_Logger::log_event_str(" }");
}

void UTRANFrequencyList__TLV::set_implicit_omit()
{
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (fdd__tdd().is_bound()) fdd__tdd().set_implicit_omit();
}

void UTRANFrequencyList__TLV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (3<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV has 3 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) fdd__tdd().set_param(*param.get_elem(2));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "fdd_tdd")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          fdd__tdd().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.UTRANFrequencyList_TLV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.UTRANFrequencyList_TLV");
  }
}

void UTRANFrequencyList__TLV::encode_text(Text_Buf& text_buf) const
{
field_elementIdentifier.encode_text(text_buf);
field_lengthIndicator.encode_text(text_buf);
field_fdd__tdd.encode_text(text_buf);
}

void UTRANFrequencyList__TLV::decode_text(Text_Buf& text_buf)
{
field_elementIdentifier.decode_text(text_buf);
field_lengthIndicator.decode_text(text_buf);
field_fdd__tdd.decode_text(text_buf);
}

void UTRANFrequencyList__TLV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void UTRANFrequencyList__TLV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int UTRANFrequencyList__TLV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  int value_of_length_field1 = 0;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_elementIdentifier.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, UTRANFrequencyList__TLV_lengthIndicator_descr_.raw->forceomit);
  decoded_field_length = field_lengthIndicator.RAW_decode(UTRANFrequencyList__TLV_lengthIndicator_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  INTEGER tmp1 = field_lengthIndicator.convert_to_Integer(UTRANFrequencyList__TLV_lengthIndicator_descr_);
  field_lengthIndicator = tmp1;
  value_of_length_field1 += tmp1.get_long_long_val() * 8;
  RAW_Force_Omit field_2_force_omit(2, force_omit, General__Types::OCTN_descr_.raw->forceomit);
  decoded_field_length = field_fdd__tdd.RAW_decode(General__Types::OCTN_descr_, p_buf, min_of_ints(2, limit, value_of_length_field1), local_top_order, no_err, -1, TRUE, &field_2_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  value_of_length_field1 -= decoded_field_length;
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int UTRANFrequencyList__TLV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 3;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(3);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::OCT1_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, UTRANFrequencyList__TLV_lengthIndicator_descr_.raw);
  myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, General__Types::OCTN_descr_.raw);
  encoded_length += field_elementIdentifier.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += 8;
  myleaf.body.node.nodes[1]->calc = CALC_LENGTH;
  myleaf.body.node.nodes[1]->coding_descr = &UTRANFrequencyList__TLV_lengthIndicator_descr_;
  myleaf.body.node.nodes[1]->calcof.lengthto.num_of_fields = 1;
  myleaf.body.node.nodes[1]->calcof.lengthto.unit = 8;
  myleaf.body.node.nodes[1]->calcof.lengthto.offset = 0;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields = init_lengthto_fields_list(1);
  myleaf.body.node.nodes[1]->length = 8;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields[0].level = myleaf.body.node.nodes[2]->curr_pos.level;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields[0].pos = myleaf.body.node.nodes[2]->curr_pos.pos;
  encoded_length += field_fdd__tdd.RAW_encode(General__Types::OCTN_descr_, *myleaf.body.node.nodes[2]);
  return myleaf.length = encoded_length;
}

struct UTRANFrequencyList__TLV_template::single_value_struct {
OCTETSTRING_template field_elementIdentifier;
INTEGER_template field_lengthIndicator;
OCTETSTRING_template field_fdd__tdd;
};

void UTRANFrequencyList__TLV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_elementIdentifier = ANY_VALUE;
single_value->field_lengthIndicator = ANY_VALUE;
single_value->field_fdd__tdd = ANY_VALUE;
}
}
}

void UTRANFrequencyList__TLV_template::copy_value(const UTRANFrequencyList__TLV& other_value)
{
single_value = new single_value_struct;
if (other_value.elementIdentifier().is_bound()) {
  single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
  single_value->field_elementIdentifier.clean_up();
}
if (other_value.lengthIndicator().is_bound()) {
  single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
  single_value->field_lengthIndicator.clean_up();
}
if (other_value.fdd__tdd().is_bound()) {
  single_value->field_fdd__tdd = other_value.fdd__tdd();
} else {
  single_value->field_fdd__tdd.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void UTRANFrequencyList__TLV_template::copy_template(const UTRANFrequencyList__TLV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.elementIdentifier().get_selection()) {
single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
single_value->field_elementIdentifier.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.lengthIndicator().get_selection()) {
single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
single_value->field_lengthIndicator.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.fdd__tdd().get_selection()) {
single_value->field_fdd__tdd = other_value.fdd__tdd();
} else {
single_value->field_fdd__tdd.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new UTRANFrequencyList__TLV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new UTRANFrequencyList__TLV_template(*other_value.implication_.precondition);
implication_.implied_template = new UTRANFrequencyList__TLV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV.");
break;
}
set_selection(other_value);
}

UTRANFrequencyList__TLV_template::UTRANFrequencyList__TLV_template()
{
}

UTRANFrequencyList__TLV_template::UTRANFrequencyList__TLV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

UTRANFrequencyList__TLV_template::UTRANFrequencyList__TLV_template(const UTRANFrequencyList__TLV& other_value)
{
copy_value(other_value);
}

UTRANFrequencyList__TLV_template::UTRANFrequencyList__TLV_template(const OPTIONAL<UTRANFrequencyList__TLV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const UTRANFrequencyList__TLV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV from an unbound optional field.");
}
}

UTRANFrequencyList__TLV_template::UTRANFrequencyList__TLV_template(UTRANFrequencyList__TLV_template* p_precondition, UTRANFrequencyList__TLV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

UTRANFrequencyList__TLV_template::UTRANFrequencyList__TLV_template(Dynamic_Match_Interface<UTRANFrequencyList__TLV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<UTRANFrequencyList__TLV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

UTRANFrequencyList__TLV_template::UTRANFrequencyList__TLV_template(const UTRANFrequencyList__TLV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

UTRANFrequencyList__TLV_template::~UTRANFrequencyList__TLV_template()
{
clean_up();
}

UTRANFrequencyList__TLV_template& UTRANFrequencyList__TLV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

UTRANFrequencyList__TLV_template& UTRANFrequencyList__TLV_template::operator=(const UTRANFrequencyList__TLV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

UTRANFrequencyList__TLV_template& UTRANFrequencyList__TLV_template::operator=(const OPTIONAL<UTRANFrequencyList__TLV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const UTRANFrequencyList__TLV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV.");
}
return *this;
}

UTRANFrequencyList__TLV_template& UTRANFrequencyList__TLV_template::operator=(const UTRANFrequencyList__TLV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean UTRANFrequencyList__TLV_template::match(const UTRANFrequencyList__TLV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.elementIdentifier().is_bound()) return FALSE;
if(!single_value->field_elementIdentifier.match(other_value.elementIdentifier(), legacy))return FALSE;
if(!other_value.lengthIndicator().is_bound()) return FALSE;
if(!single_value->field_lengthIndicator.match(other_value.lengthIndicator(), legacy))return FALSE;
if(!other_value.fdd__tdd().is_bound()) return FALSE;
if(!single_value->field_fdd__tdd.match(other_value.fdd__tdd(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV.");
}
return FALSE;
}

boolean UTRANFrequencyList__TLV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_elementIdentifier.is_bound()
 || single_value->field_lengthIndicator.is_bound()
 || single_value->field_fdd__tdd.is_bound();
}

boolean UTRANFrequencyList__TLV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_elementIdentifier.is_value()
 && single_value->field_lengthIndicator.is_value()
 && single_value->field_fdd__tdd.is_value();
}

void UTRANFrequencyList__TLV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

UTRANFrequencyList__TLV UTRANFrequencyList__TLV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV.");
UTRANFrequencyList__TLV ret_val;
if (single_value->field_elementIdentifier.is_bound()) {
ret_val.elementIdentifier() = single_value->field_elementIdentifier.valueof();
}
if (single_value->field_lengthIndicator.is_bound()) {
ret_val.lengthIndicator() = single_value->field_lengthIndicator.valueof();
}
if (single_value->field_fdd__tdd.is_bound()) {
ret_val.fdd__tdd() = single_value->field_fdd__tdd.valueof();
}
return ret_val;
}

void UTRANFrequencyList__TLV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new UTRANFrequencyList__TLV_template[list_length];
}

UTRANFrequencyList__TLV_template& UTRANFrequencyList__TLV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV.");
return value_list.list_value[list_index];
}

OCTETSTRING_template& UTRANFrequencyList__TLV_template::elementIdentifier()
{
set_specific();
return single_value->field_elementIdentifier;
}

const OCTETSTRING_template& UTRANFrequencyList__TLV_template::elementIdentifier() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field elementIdentifier of a non-specific template of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV.");
return single_value->field_elementIdentifier;
}

INTEGER_template& UTRANFrequencyList__TLV_template::lengthIndicator()
{
set_specific();
return single_value->field_lengthIndicator;
}

const INTEGER_template& UTRANFrequencyList__TLV_template::lengthIndicator() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field lengthIndicator of a non-specific template of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV.");
return single_value->field_lengthIndicator;
}

OCTETSTRING_template& UTRANFrequencyList__TLV_template::fdd__tdd()
{
set_specific();
return single_value->field_fdd__tdd;
}

const OCTETSTRING_template& UTRANFrequencyList__TLV_template::fdd__tdd() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field fdd_tdd of a non-specific template of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV.");
return single_value->field_fdd__tdd;
}

int UTRANFrequencyList__TLV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 3;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV.");
  }
  return 0;
}

void UTRANFrequencyList__TLV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log();
TTCN_Logger::log_event_str(", lengthIndicator := ");
single_value->field_lengthIndicator.log();
TTCN_Logger::log_event_str(", fdd_tdd := ");
single_value->field_fdd__tdd.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void UTRANFrequencyList__TLV_template::log_match(const UTRANFrequencyList__TLV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_elementIdentifier.match(match_value.elementIdentifier(), legacy)){
TTCN_Logger::log_logmatch_info(".elementIdentifier");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_lengthIndicator.match(match_value.lengthIndicator(), legacy)){
TTCN_Logger::log_logmatch_info(".lengthIndicator");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_fdd__tdd.match(match_value.fdd__tdd(), legacy)){
TTCN_Logger::log_logmatch_info(".fdd_tdd");
single_value->field_fdd__tdd.log_match(match_value.fdd__tdd(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::log_event_str(", lengthIndicator := ");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::log_event_str(", fdd_tdd := ");
single_value->field_fdd__tdd.log_match(match_value.fdd__tdd(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void UTRANFrequencyList__TLV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (fdd__tdd().is_bound()) fdd__tdd().set_implicit_omit();
}

void UTRANFrequencyList__TLV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_elementIdentifier.encode_text(text_buf);
single_value->field_lengthIndicator.encode_text(text_buf);
single_value->field_fdd__tdd.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV.");
}
}

void UTRANFrequencyList__TLV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_elementIdentifier.decode_text(text_buf);
single_value->field_lengthIndicator.decode_text(text_buf);
single_value->field_fdd__tdd.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new UTRANFrequencyList__TLV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV.");
}
}

void UTRANFrequencyList__TLV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    UTRANFrequencyList__TLV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (3<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.UTRANFrequencyList_TLV has 3 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) fdd__tdd().set_param(*param.get_elem(2));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "fdd_tdd")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          fdd__tdd().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.UTRANFrequencyList_TLV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    UTRANFrequencyList__TLV_template* precondition = new UTRANFrequencyList__TLV_template;
    precondition->set_param(*param.get_elem(0));
    UTRANFrequencyList__TLV_template* implied_template = new UTRANFrequencyList__TLV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = UTRANFrequencyList__TLV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.UTRANFrequencyList_TLV");
  }
  is_ifpresent = param.get_ifpresent();
}

void UTRANFrequencyList__TLV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_elementIdentifier.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.UTRANFrequencyList_TLV");
single_value->field_lengthIndicator.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.UTRANFrequencyList_TLV");
single_value->field_fdd__tdd.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.UTRANFrequencyList_TLV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.UTRANFrequencyList_TLV");
}

boolean UTRANFrequencyList__TLV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean UTRANFrequencyList__TLV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE::CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE()
{
}

CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE::CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE(const OCTETSTRING& par_elementIdentifier,
    const INTEGER& par_lengthIndicator,
    const OCTETSTRING& par_cellSelectionIndicatorValue)
  :   field_elementIdentifier(par_elementIdentifier),
  field_lengthIndicator(par_lengthIndicator),
  field_cellSelectionIndicatorValue(par_cellSelectionIndicatorValue)
{
}

CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE::CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE(const CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE.");
if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
else field_elementIdentifier.clean_up();
if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
else field_lengthIndicator.clean_up();
if (other_value.cellSelectionIndicatorValue().is_bound()) field_cellSelectionIndicatorValue = other_value.cellSelectionIndicatorValue();
else field_cellSelectionIndicatorValue.clean_up();
}

void CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE::clean_up()
{
field_elementIdentifier.clean_up();
field_lengthIndicator.clean_up();
field_cellSelectionIndicatorValue.clean_up();
}

const TTCN_Typedescriptor_t* CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE::get_descriptor() const { return &CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_descr_; }
CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE& CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE::operator=(const CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE.");
  if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
  else field_elementIdentifier.clean_up();
  if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
  else field_lengthIndicator.clean_up();
  if (other_value.cellSelectionIndicatorValue().is_bound()) field_cellSelectionIndicatorValue = other_value.cellSelectionIndicatorValue();
  else field_cellSelectionIndicatorValue.clean_up();
}
return *this;
}

boolean CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE::operator==(const CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE& other_value) const
{
return field_elementIdentifier==other_value.field_elementIdentifier
  && field_lengthIndicator==other_value.field_lengthIndicator
  && field_cellSelectionIndicatorValue==other_value.field_cellSelectionIndicatorValue;
}

boolean CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE::is_bound() const
{
return (field_elementIdentifier.is_bound())
  || (field_lengthIndicator.is_bound())
  || (field_cellSelectionIndicatorValue.is_bound());
}
boolean CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE::is_value() const
{
return field_elementIdentifier.is_value()
  && field_lengthIndicator.is_value()
  && field_cellSelectionIndicatorValue.is_value();
}
void CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ elementIdentifier := ");
field_elementIdentifier.log();
TTCN_Logger::log_event_str(", lengthIndicator := ");
field_lengthIndicator.log();
TTCN_Logger::log_event_str(", cellSelectionIndicatorValue := ");
field_cellSelectionIndicatorValue.log();
TTCN_Logger::log_event_str(" }");
}

void CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE::set_implicit_omit()
{
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (cellSelectionIndicatorValue().is_bound()) cellSelectionIndicatorValue().set_implicit_omit();
}

void CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (3<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE has 3 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) cellSelectionIndicatorValue().set_param(*param.get_elem(2));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "cellSelectionIndicatorValue")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          cellSelectionIndicatorValue().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE");
  }
}

void CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE::encode_text(Text_Buf& text_buf) const
{
field_elementIdentifier.encode_text(text_buf);
field_lengthIndicator.encode_text(text_buf);
field_cellSelectionIndicatorValue.encode_text(text_buf);
}

void CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE::decode_text(Text_Buf& text_buf)
{
field_elementIdentifier.decode_text(text_buf);
field_lengthIndicator.decode_text(text_buf);
field_cellSelectionIndicatorValue.decode_text(text_buf);
}

void CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  int value_of_length_field1 = 0;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_elementIdentifier.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_lengthIndicator_descr_.raw->forceomit);
  decoded_field_length = field_lengthIndicator.RAW_decode(CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_lengthIndicator_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  INTEGER tmp1 = field_lengthIndicator.convert_to_Integer(CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_lengthIndicator_descr_);
  field_lengthIndicator = tmp1;
  value_of_length_field1 += tmp1.get_long_long_val() * 8;
  RAW_Force_Omit field_2_force_omit(2, force_omit, OCTETSTRING_descr_.raw->forceomit);
  decoded_field_length = field_cellSelectionIndicatorValue.RAW_decode(OCTETSTRING_descr_, p_buf, min_of_ints(2, limit, value_of_length_field1), local_top_order, no_err, -1, TRUE, &field_2_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  value_of_length_field1 -= decoded_field_length;
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 3;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(3);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::OCT1_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_lengthIndicator_descr_.raw);
  myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, OCTETSTRING_descr_.raw);
  encoded_length += field_elementIdentifier.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += 8;
  myleaf.body.node.nodes[1]->calc = CALC_LENGTH;
  myleaf.body.node.nodes[1]->coding_descr = &CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_lengthIndicator_descr_;
  myleaf.body.node.nodes[1]->calcof.lengthto.num_of_fields = 1;
  myleaf.body.node.nodes[1]->calcof.lengthto.unit = 8;
  myleaf.body.node.nodes[1]->calcof.lengthto.offset = 0;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields = init_lengthto_fields_list(1);
  myleaf.body.node.nodes[1]->length = 8;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields[0].level = myleaf.body.node.nodes[2]->curr_pos.level;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields[0].pos = myleaf.body.node.nodes[2]->curr_pos.pos;
  encoded_length += field_cellSelectionIndicatorValue.RAW_encode(OCTETSTRING_descr_, *myleaf.body.node.nodes[2]);
  return myleaf.length = encoded_length;
}

struct CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::single_value_struct {
OCTETSTRING_template field_elementIdentifier;
INTEGER_template field_lengthIndicator;
OCTETSTRING_template field_cellSelectionIndicatorValue;
};

void CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_elementIdentifier = ANY_VALUE;
single_value->field_lengthIndicator = ANY_VALUE;
single_value->field_cellSelectionIndicatorValue = ANY_VALUE;
}
}
}

void CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::copy_value(const CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE& other_value)
{
single_value = new single_value_struct;
if (other_value.elementIdentifier().is_bound()) {
  single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
  single_value->field_elementIdentifier.clean_up();
}
if (other_value.lengthIndicator().is_bound()) {
  single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
  single_value->field_lengthIndicator.clean_up();
}
if (other_value.cellSelectionIndicatorValue().is_bound()) {
  single_value->field_cellSelectionIndicatorValue = other_value.cellSelectionIndicatorValue();
} else {
  single_value->field_cellSelectionIndicatorValue.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::copy_template(const CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.elementIdentifier().get_selection()) {
single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
single_value->field_elementIdentifier.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.lengthIndicator().get_selection()) {
single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
single_value->field_lengthIndicator.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.cellSelectionIndicatorValue().get_selection()) {
single_value->field_cellSelectionIndicatorValue = other_value.cellSelectionIndicatorValue();
} else {
single_value->field_cellSelectionIndicatorValue.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template(*other_value.implication_.precondition);
implication_.implied_template = new CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE.");
break;
}
set_selection(other_value);
}

CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template()
{
}

CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template(const CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE& other_value)
{
copy_value(other_value);
}

CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template(const OPTIONAL<CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE from an unbound optional field.");
}
}

CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template(CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template* p_precondition, CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template(Dynamic_Match_Interface<CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template(const CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::~CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template()
{
clean_up();
}

CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template& CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template& CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::operator=(const CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template& CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::operator=(const OPTIONAL<CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE.");
}
return *this;
}

CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template& CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::operator=(const CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::match(const CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.elementIdentifier().is_bound()) return FALSE;
if(!single_value->field_elementIdentifier.match(other_value.elementIdentifier(), legacy))return FALSE;
if(!other_value.lengthIndicator().is_bound()) return FALSE;
if(!single_value->field_lengthIndicator.match(other_value.lengthIndicator(), legacy))return FALSE;
if(!other_value.cellSelectionIndicatorValue().is_bound()) return FALSE;
if(!single_value->field_cellSelectionIndicatorValue.match(other_value.cellSelectionIndicatorValue(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE.");
}
return FALSE;
}

boolean CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_elementIdentifier.is_bound()
 || single_value->field_lengthIndicator.is_bound()
 || single_value->field_cellSelectionIndicatorValue.is_bound();
}

boolean CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_elementIdentifier.is_value()
 && single_value->field_lengthIndicator.is_value()
 && single_value->field_cellSelectionIndicatorValue.is_value();
}

void CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE.");
CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE ret_val;
if (single_value->field_elementIdentifier.is_bound()) {
ret_val.elementIdentifier() = single_value->field_elementIdentifier.valueof();
}
if (single_value->field_lengthIndicator.is_bound()) {
ret_val.lengthIndicator() = single_value->field_lengthIndicator.valueof();
}
if (single_value->field_cellSelectionIndicatorValue.is_bound()) {
ret_val.cellSelectionIndicatorValue() = single_value->field_cellSelectionIndicatorValue.valueof();
}
return ret_val;
}

void CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template[list_length];
}

CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template& CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE.");
return value_list.list_value[list_index];
}

OCTETSTRING_template& CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::elementIdentifier()
{
set_specific();
return single_value->field_elementIdentifier;
}

const OCTETSTRING_template& CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::elementIdentifier() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field elementIdentifier of a non-specific template of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE.");
return single_value->field_elementIdentifier;
}

INTEGER_template& CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::lengthIndicator()
{
set_specific();
return single_value->field_lengthIndicator;
}

const INTEGER_template& CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::lengthIndicator() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field lengthIndicator of a non-specific template of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE.");
return single_value->field_lengthIndicator;
}

OCTETSTRING_template& CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::cellSelectionIndicatorValue()
{
set_specific();
return single_value->field_cellSelectionIndicatorValue;
}

const OCTETSTRING_template& CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::cellSelectionIndicatorValue() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field cellSelectionIndicatorValue of a non-specific template of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE.");
return single_value->field_cellSelectionIndicatorValue;
}

int CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 3;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE.");
  }
  return 0;
}

void CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log();
TTCN_Logger::log_event_str(", lengthIndicator := ");
single_value->field_lengthIndicator.log();
TTCN_Logger::log_event_str(", cellSelectionIndicatorValue := ");
single_value->field_cellSelectionIndicatorValue.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::log_match(const CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_elementIdentifier.match(match_value.elementIdentifier(), legacy)){
TTCN_Logger::log_logmatch_info(".elementIdentifier");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_lengthIndicator.match(match_value.lengthIndicator(), legacy)){
TTCN_Logger::log_logmatch_info(".lengthIndicator");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_cellSelectionIndicatorValue.match(match_value.cellSelectionIndicatorValue(), legacy)){
TTCN_Logger::log_logmatch_info(".cellSelectionIndicatorValue");
single_value->field_cellSelectionIndicatorValue.log_match(match_value.cellSelectionIndicatorValue(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::log_event_str(", lengthIndicator := ");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::log_event_str(", cellSelectionIndicatorValue := ");
single_value->field_cellSelectionIndicatorValue.log_match(match_value.cellSelectionIndicatorValue(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (cellSelectionIndicatorValue().is_bound()) cellSelectionIndicatorValue().set_implicit_omit();
}

void CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_elementIdentifier.encode_text(text_buf);
single_value->field_lengthIndicator.encode_text(text_buf);
single_value->field_cellSelectionIndicatorValue.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE.");
}
}

void CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_elementIdentifier.decode_text(text_buf);
single_value->field_lengthIndicator.decode_text(text_buf);
single_value->field_cellSelectionIndicatorValue.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE.");
}
}

void CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (3<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE has 3 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) cellSelectionIndicatorValue().set_param(*param.get_elem(2));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "cellSelectionIndicatorValue")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          cellSelectionIndicatorValue().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template* precondition = new CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template;
    precondition->set_param(*param.get_elem(0));
    CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template* implied_template = new CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template;
    implied_template->set_param(*param.get_elem(1));
    *this = CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE");
  }
  is_ifpresent = param.get_ifpresent();
}

void CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_elementIdentifier.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE");
single_value->field_lengthIndicator.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE");
single_value->field_cellSelectionIndicatorValue.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.CellSelectionIndicatorAfterReleaseOfAll_TCH_and_SDCCH_IE");
}

boolean CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean CellSelectionIndicatorAfterReleaseOfAll__TCH__and__SDCCH__IE_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

CellDescription__V::CellDescription__V()
{
}

CellDescription__V::CellDescription__V(const BITSTRING& par_bcc,
    const BITSTRING& par_ncc,
    const BITSTRING& par_BCCHArfcn__HighPart,
    const OCTETSTRING& par_BCCHArfcn__LowPart)
  :   field_bcc(par_bcc),
  field_ncc(par_ncc),
  field_BCCHArfcn__HighPart(par_BCCHArfcn__HighPart),
  field_BCCHArfcn__LowPart(par_BCCHArfcn__LowPart)
{
}

CellDescription__V::CellDescription__V(const CellDescription__V& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.CellDescription_V.");
if (other_value.bcc().is_bound()) field_bcc = other_value.bcc();
else field_bcc.clean_up();
if (other_value.ncc().is_bound()) field_ncc = other_value.ncc();
else field_ncc.clean_up();
if (other_value.BCCHArfcn__HighPart().is_bound()) field_BCCHArfcn__HighPart = other_value.BCCHArfcn__HighPart();
else field_BCCHArfcn__HighPart.clean_up();
if (other_value.BCCHArfcn__LowPart().is_bound()) field_BCCHArfcn__LowPart = other_value.BCCHArfcn__LowPart();
else field_BCCHArfcn__LowPart.clean_up();
}

void CellDescription__V::clean_up()
{
field_bcc.clean_up();
field_ncc.clean_up();
field_BCCHArfcn__HighPart.clean_up();
field_BCCHArfcn__LowPart.clean_up();
}

const TTCN_Typedescriptor_t* CellDescription__V::get_descriptor() const { return &CellDescription__V_descr_; }
CellDescription__V& CellDescription__V::operator=(const CellDescription__V& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.CellDescription_V.");
  if (other_value.bcc().is_bound()) field_bcc = other_value.bcc();
  else field_bcc.clean_up();
  if (other_value.ncc().is_bound()) field_ncc = other_value.ncc();
  else field_ncc.clean_up();
  if (other_value.BCCHArfcn__HighPart().is_bound()) field_BCCHArfcn__HighPart = other_value.BCCHArfcn__HighPart();
  else field_BCCHArfcn__HighPart.clean_up();
  if (other_value.BCCHArfcn__LowPart().is_bound()) field_BCCHArfcn__LowPart = other_value.BCCHArfcn__LowPart();
  else field_BCCHArfcn__LowPart.clean_up();
}
return *this;
}

boolean CellDescription__V::operator==(const CellDescription__V& other_value) const
{
return field_bcc==other_value.field_bcc
  && field_ncc==other_value.field_ncc
  && field_BCCHArfcn__HighPart==other_value.field_BCCHArfcn__HighPart
  && field_BCCHArfcn__LowPart==other_value.field_BCCHArfcn__LowPart;
}

boolean CellDescription__V::is_bound() const
{
return (field_bcc.is_bound())
  || (field_ncc.is_bound())
  || (field_BCCHArfcn__HighPart.is_bound())
  || (field_BCCHArfcn__LowPart.is_bound());
}
boolean CellDescription__V::is_value() const
{
return field_bcc.is_value()
  && field_ncc.is_value()
  && field_BCCHArfcn__HighPart.is_value()
  && field_BCCHArfcn__LowPart.is_value();
}
void CellDescription__V::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ bcc := ");
field_bcc.log();
TTCN_Logger::log_event_str(", ncc := ");
field_ncc.log();
TTCN_Logger::log_event_str(", BCCHArfcn_HighPart := ");
field_BCCHArfcn__HighPart.log();
TTCN_Logger::log_event_str(", BCCHArfcn_LowPart := ");
field_BCCHArfcn__LowPart.log();
TTCN_Logger::log_event_str(" }");
}

void CellDescription__V::set_implicit_omit()
{
if (bcc().is_bound()) bcc().set_implicit_omit();
if (ncc().is_bound()) ncc().set_implicit_omit();
if (BCCHArfcn__HighPart().is_bound()) BCCHArfcn__HighPart().set_implicit_omit();
if (BCCHArfcn__LowPart().is_bound()) BCCHArfcn__LowPart().set_implicit_omit();
}

void CellDescription__V::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (4<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.CellDescription_V has 4 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) bcc().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) ncc().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) BCCHArfcn__HighPart().set_param(*param.get_elem(2));
    if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) BCCHArfcn__LowPart().set_param(*param.get_elem(3));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "bcc")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          bcc().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "ncc")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          ncc().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "BCCHArfcn_HighPart")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          BCCHArfcn__HighPart().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "BCCHArfcn_LowPart")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          BCCHArfcn__LowPart().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.CellDescription_V: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.CellDescription_V");
  }
}

void CellDescription__V::encode_text(Text_Buf& text_buf) const
{
field_bcc.encode_text(text_buf);
field_ncc.encode_text(text_buf);
field_BCCHArfcn__HighPart.encode_text(text_buf);
field_BCCHArfcn__LowPart.encode_text(text_buf);
}

void CellDescription__V::decode_text(Text_Buf& text_buf)
{
field_bcc.decode_text(text_buf);
field_ncc.decode_text(text_buf);
field_BCCHArfcn__HighPart.decode_text(text_buf);
field_BCCHArfcn__LowPart.decode_text(text_buf);
}

void CellDescription__V::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void CellDescription__V::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int CellDescription__V::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::BIT3_descr_.raw->forceomit);
  decoded_field_length = field_bcc.RAW_decode(General__Types::BIT3_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT3_descr_.raw->forceomit);
  decoded_field_length = field_ncc.RAW_decode(General__Types::BIT3_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_2_force_omit(2, force_omit, General__Types::BIT2_descr_.raw->forceomit);
  decoded_field_length = field_BCCHArfcn__HighPart.RAW_decode(General__Types::BIT2_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_2_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_3_force_omit(3, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_BCCHArfcn__LowPart.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_3_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int CellDescription__V::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 4;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(4);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::BIT3_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT3_descr_.raw);
  myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, General__Types::BIT2_descr_.raw);
  myleaf.body.node.nodes[3] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 3, General__Types::OCT1_descr_.raw);
  encoded_length += field_bcc.RAW_encode(General__Types::BIT3_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_ncc.RAW_encode(General__Types::BIT3_descr_, *myleaf.body.node.nodes[1]);
  encoded_length += field_BCCHArfcn__HighPart.RAW_encode(General__Types::BIT2_descr_, *myleaf.body.node.nodes[2]);
  encoded_length += field_BCCHArfcn__LowPart.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[3]);
  return myleaf.length = encoded_length;
}

struct CellDescription__V_template::single_value_struct {
BITSTRING_template field_bcc;
BITSTRING_template field_ncc;
BITSTRING_template field_BCCHArfcn__HighPart;
OCTETSTRING_template field_BCCHArfcn__LowPart;
};

void CellDescription__V_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_bcc = ANY_VALUE;
single_value->field_ncc = ANY_VALUE;
single_value->field_BCCHArfcn__HighPart = ANY_VALUE;
single_value->field_BCCHArfcn__LowPart = ANY_VALUE;
}
}
}

void CellDescription__V_template::copy_value(const CellDescription__V& other_value)
{
single_value = new single_value_struct;
if (other_value.bcc().is_bound()) {
  single_value->field_bcc = other_value.bcc();
} else {
  single_value->field_bcc.clean_up();
}
if (other_value.ncc().is_bound()) {
  single_value->field_ncc = other_value.ncc();
} else {
  single_value->field_ncc.clean_up();
}
if (other_value.BCCHArfcn__HighPart().is_bound()) {
  single_value->field_BCCHArfcn__HighPart = other_value.BCCHArfcn__HighPart();
} else {
  single_value->field_BCCHArfcn__HighPart.clean_up();
}
if (other_value.BCCHArfcn__LowPart().is_bound()) {
  single_value->field_BCCHArfcn__LowPart = other_value.BCCHArfcn__LowPart();
} else {
  single_value->field_BCCHArfcn__LowPart.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void CellDescription__V_template::copy_template(const CellDescription__V_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.bcc().get_selection()) {
single_value->field_bcc = other_value.bcc();
} else {
single_value->field_bcc.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.ncc().get_selection()) {
single_value->field_ncc = other_value.ncc();
} else {
single_value->field_ncc.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.BCCHArfcn__HighPart().get_selection()) {
single_value->field_BCCHArfcn__HighPart = other_value.BCCHArfcn__HighPart();
} else {
single_value->field_BCCHArfcn__HighPart.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.BCCHArfcn__LowPart().get_selection()) {
single_value->field_BCCHArfcn__LowPart = other_value.BCCHArfcn__LowPart();
} else {
single_value->field_BCCHArfcn__LowPart.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new CellDescription__V_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new CellDescription__V_template(*other_value.implication_.precondition);
implication_.implied_template = new CellDescription__V_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.CellDescription_V.");
break;
}
set_selection(other_value);
}

CellDescription__V_template::CellDescription__V_template()
{
}

CellDescription__V_template::CellDescription__V_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

CellDescription__V_template::CellDescription__V_template(const CellDescription__V& other_value)
{
copy_value(other_value);
}

CellDescription__V_template::CellDescription__V_template(const OPTIONAL<CellDescription__V>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const CellDescription__V&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.CellDescription_V from an unbound optional field.");
}
}

CellDescription__V_template::CellDescription__V_template(CellDescription__V_template* p_precondition, CellDescription__V_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

CellDescription__V_template::CellDescription__V_template(Dynamic_Match_Interface<CellDescription__V>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<CellDescription__V>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

CellDescription__V_template::CellDescription__V_template(const CellDescription__V_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

CellDescription__V_template::~CellDescription__V_template()
{
clean_up();
}

CellDescription__V_template& CellDescription__V_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

CellDescription__V_template& CellDescription__V_template::operator=(const CellDescription__V& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

CellDescription__V_template& CellDescription__V_template::operator=(const OPTIONAL<CellDescription__V>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const CellDescription__V&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.CellDescription_V.");
}
return *this;
}

CellDescription__V_template& CellDescription__V_template::operator=(const CellDescription__V_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean CellDescription__V_template::match(const CellDescription__V& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.bcc().is_bound()) return FALSE;
if(!single_value->field_bcc.match(other_value.bcc(), legacy))return FALSE;
if(!other_value.ncc().is_bound()) return FALSE;
if(!single_value->field_ncc.match(other_value.ncc(), legacy))return FALSE;
if(!other_value.BCCHArfcn__HighPart().is_bound()) return FALSE;
if(!single_value->field_BCCHArfcn__HighPart.match(other_value.BCCHArfcn__HighPart(), legacy))return FALSE;
if(!other_value.BCCHArfcn__LowPart().is_bound()) return FALSE;
if(!single_value->field_BCCHArfcn__LowPart.match(other_value.BCCHArfcn__LowPart(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.CellDescription_V.");
}
return FALSE;
}

boolean CellDescription__V_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_bcc.is_bound()
 || single_value->field_ncc.is_bound()
 || single_value->field_BCCHArfcn__HighPart.is_bound()
 || single_value->field_BCCHArfcn__LowPart.is_bound();
}

boolean CellDescription__V_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_bcc.is_value()
 && single_value->field_ncc.is_value()
 && single_value->field_BCCHArfcn__HighPart.is_value()
 && single_value->field_BCCHArfcn__LowPart.is_value();
}

void CellDescription__V_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

CellDescription__V CellDescription__V_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.CellDescription_V.");
CellDescription__V ret_val;
if (single_value->field_bcc.is_bound()) {
ret_val.bcc() = single_value->field_bcc.valueof();
}
if (single_value->field_ncc.is_bound()) {
ret_val.ncc() = single_value->field_ncc.valueof();
}
if (single_value->field_BCCHArfcn__HighPart.is_bound()) {
ret_val.BCCHArfcn__HighPart() = single_value->field_BCCHArfcn__HighPart.valueof();
}
if (single_value->field_BCCHArfcn__LowPart.is_bound()) {
ret_val.BCCHArfcn__LowPart() = single_value->field_BCCHArfcn__LowPart.valueof();
}
return ret_val;
}

void CellDescription__V_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.CellDescription_V.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new CellDescription__V_template[list_length];
}

CellDescription__V_template& CellDescription__V_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.CellDescription_V.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.CellDescription_V.");
return value_list.list_value[list_index];
}

BITSTRING_template& CellDescription__V_template::bcc()
{
set_specific();
return single_value->field_bcc;
}

const BITSTRING_template& CellDescription__V_template::bcc() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field bcc of a non-specific template of type @MobileL3_RRM_Types.CellDescription_V.");
return single_value->field_bcc;
}

BITSTRING_template& CellDescription__V_template::ncc()
{
set_specific();
return single_value->field_ncc;
}

const BITSTRING_template& CellDescription__V_template::ncc() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field ncc of a non-specific template of type @MobileL3_RRM_Types.CellDescription_V.");
return single_value->field_ncc;
}

BITSTRING_template& CellDescription__V_template::BCCHArfcn__HighPart()
{
set_specific();
return single_value->field_BCCHArfcn__HighPart;
}

const BITSTRING_template& CellDescription__V_template::BCCHArfcn__HighPart() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field BCCHArfcn_HighPart of a non-specific template of type @MobileL3_RRM_Types.CellDescription_V.");
return single_value->field_BCCHArfcn__HighPart;
}

OCTETSTRING_template& CellDescription__V_template::BCCHArfcn__LowPart()
{
set_specific();
return single_value->field_BCCHArfcn__LowPart;
}

const OCTETSTRING_template& CellDescription__V_template::BCCHArfcn__LowPart() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field BCCHArfcn_LowPart of a non-specific template of type @MobileL3_RRM_Types.CellDescription_V.");
return single_value->field_BCCHArfcn__LowPart;
}

int CellDescription__V_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellDescription_V which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 4;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellDescription_V containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellDescription_V containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellDescription_V containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellDescription_V containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellDescription_V containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellDescription_V containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellDescription_V containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CellDescription_V containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.CellDescription_V.");
  }
  return 0;
}

void CellDescription__V_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ bcc := ");
single_value->field_bcc.log();
TTCN_Logger::log_event_str(", ncc := ");
single_value->field_ncc.log();
TTCN_Logger::log_event_str(", BCCHArfcn_HighPart := ");
single_value->field_BCCHArfcn__HighPart.log();
TTCN_Logger::log_event_str(", BCCHArfcn_LowPart := ");
single_value->field_BCCHArfcn__LowPart.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void CellDescription__V_template::log_match(const CellDescription__V& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_bcc.match(match_value.bcc(), legacy)){
TTCN_Logger::log_logmatch_info(".bcc");
single_value->field_bcc.log_match(match_value.bcc(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_ncc.match(match_value.ncc(), legacy)){
TTCN_Logger::log_logmatch_info(".ncc");
single_value->field_ncc.log_match(match_value.ncc(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_BCCHArfcn__HighPart.match(match_value.BCCHArfcn__HighPart(), legacy)){
TTCN_Logger::log_logmatch_info(".BCCHArfcn_HighPart");
single_value->field_BCCHArfcn__HighPart.log_match(match_value.BCCHArfcn__HighPart(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_BCCHArfcn__LowPart.match(match_value.BCCHArfcn__LowPart(), legacy)){
TTCN_Logger::log_logmatch_info(".BCCHArfcn_LowPart");
single_value->field_BCCHArfcn__LowPart.log_match(match_value.BCCHArfcn__LowPart(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ bcc := ");
single_value->field_bcc.log_match(match_value.bcc(), legacy);
TTCN_Logger::log_event_str(", ncc := ");
single_value->field_ncc.log_match(match_value.ncc(), legacy);
TTCN_Logger::log_event_str(", BCCHArfcn_HighPart := ");
single_value->field_BCCHArfcn__HighPart.log_match(match_value.BCCHArfcn__HighPart(), legacy);
TTCN_Logger::log_event_str(", BCCHArfcn_LowPart := ");
single_value->field_BCCHArfcn__LowPart.log_match(match_value.BCCHArfcn__LowPart(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void CellDescription__V_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (bcc().is_bound()) bcc().set_implicit_omit();
if (ncc().is_bound()) ncc().set_implicit_omit();
if (BCCHArfcn__HighPart().is_bound()) BCCHArfcn__HighPart().set_implicit_omit();
if (BCCHArfcn__LowPart().is_bound()) BCCHArfcn__LowPart().set_implicit_omit();
}

void CellDescription__V_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_bcc.encode_text(text_buf);
single_value->field_ncc.encode_text(text_buf);
single_value->field_BCCHArfcn__HighPart.encode_text(text_buf);
single_value->field_BCCHArfcn__LowPart.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.CellDescription_V.");
}
}

void CellDescription__V_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_bcc.decode_text(text_buf);
single_value->field_ncc.decode_text(text_buf);
single_value->field_BCCHArfcn__HighPart.decode_text(text_buf);
single_value->field_BCCHArfcn__LowPart.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new CellDescription__V_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.CellDescription_V.");
}
}

void CellDescription__V_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    CellDescription__V_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (4<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.CellDescription_V has 4 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) bcc().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) ncc().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) BCCHArfcn__HighPart().set_param(*param.get_elem(2));
    if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) BCCHArfcn__LowPart().set_param(*param.get_elem(3));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "bcc")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          bcc().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "ncc")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          ncc().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "BCCHArfcn_HighPart")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          BCCHArfcn__HighPart().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "BCCHArfcn_LowPart")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          BCCHArfcn__LowPart().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.CellDescription_V: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    CellDescription__V_template* precondition = new CellDescription__V_template;
    precondition->set_param(*param.get_elem(0));
    CellDescription__V_template* implied_template = new CellDescription__V_template;
    implied_template->set_param(*param.get_elem(1));
    *this = CellDescription__V_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.CellDescription_V");
  }
  is_ifpresent = param.get_ifpresent();
}

void CellDescription__V_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_bcc.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.CellDescription_V");
single_value->field_ncc.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.CellDescription_V");
single_value->field_BCCHArfcn__HighPart.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.CellDescription_V");
single_value->field_BCCHArfcn__LowPart.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.CellDescription_V");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.CellDescription_V");
}

boolean CellDescription__V_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean CellDescription__V_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

ChannelDescription__V::ChannelDescription__V()
{
}

ChannelDescription__V::ChannelDescription__V(const BITSTRING& par_timeslotNumber,
    const BITSTRING& par_channelTypeandTDMAOffset,
    const OCTETSTRING& par_octet3,
    const OCTETSTRING& par_octet4)
  :   field_timeslotNumber(par_timeslotNumber),
  field_channelTypeandTDMAOffset(par_channelTypeandTDMAOffset),
  field_octet3(par_octet3),
  field_octet4(par_octet4)
{
}

ChannelDescription__V::ChannelDescription__V(const ChannelDescription__V& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.ChannelDescription_V.");
if (other_value.timeslotNumber().is_bound()) field_timeslotNumber = other_value.timeslotNumber();
else field_timeslotNumber.clean_up();
if (other_value.channelTypeandTDMAOffset().is_bound()) field_channelTypeandTDMAOffset = other_value.channelTypeandTDMAOffset();
else field_channelTypeandTDMAOffset.clean_up();
if (other_value.octet3().is_bound()) field_octet3 = other_value.octet3();
else field_octet3.clean_up();
if (other_value.octet4().is_bound()) field_octet4 = other_value.octet4();
else field_octet4.clean_up();
}

void ChannelDescription__V::clean_up()
{
field_timeslotNumber.clean_up();
field_channelTypeandTDMAOffset.clean_up();
field_octet3.clean_up();
field_octet4.clean_up();
}

const TTCN_Typedescriptor_t* ChannelDescription__V::get_descriptor() const { return &ChannelDescription__V_descr_; }
ChannelDescription__V& ChannelDescription__V::operator=(const ChannelDescription__V& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.ChannelDescription_V.");
  if (other_value.timeslotNumber().is_bound()) field_timeslotNumber = other_value.timeslotNumber();
  else field_timeslotNumber.clean_up();
  if (other_value.channelTypeandTDMAOffset().is_bound()) field_channelTypeandTDMAOffset = other_value.channelTypeandTDMAOffset();
  else field_channelTypeandTDMAOffset.clean_up();
  if (other_value.octet3().is_bound()) field_octet3 = other_value.octet3();
  else field_octet3.clean_up();
  if (other_value.octet4().is_bound()) field_octet4 = other_value.octet4();
  else field_octet4.clean_up();
}
return *this;
}

boolean ChannelDescription__V::operator==(const ChannelDescription__V& other_value) const
{
return field_timeslotNumber==other_value.field_timeslotNumber
  && field_channelTypeandTDMAOffset==other_value.field_channelTypeandTDMAOffset
  && field_octet3==other_value.field_octet3
  && field_octet4==other_value.field_octet4;
}

boolean ChannelDescription__V::is_bound() const
{
return (field_timeslotNumber.is_bound())
  || (field_channelTypeandTDMAOffset.is_bound())
  || (field_octet3.is_bound())
  || (field_octet4.is_bound());
}
boolean ChannelDescription__V::is_value() const
{
return field_timeslotNumber.is_value()
  && field_channelTypeandTDMAOffset.is_value()
  && field_octet3.is_value()
  && field_octet4.is_value();
}
void ChannelDescription__V::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ timeslotNumber := ");
field_timeslotNumber.log();
TTCN_Logger::log_event_str(", channelTypeandTDMAOffset := ");
field_channelTypeandTDMAOffset.log();
TTCN_Logger::log_event_str(", octet3 := ");
field_octet3.log();
TTCN_Logger::log_event_str(", octet4 := ");
field_octet4.log();
TTCN_Logger::log_event_str(" }");
}

void ChannelDescription__V::set_implicit_omit()
{
if (timeslotNumber().is_bound()) timeslotNumber().set_implicit_omit();
if (channelTypeandTDMAOffset().is_bound()) channelTypeandTDMAOffset().set_implicit_omit();
if (octet3().is_bound()) octet3().set_implicit_omit();
if (octet4().is_bound()) octet4().set_implicit_omit();
}

void ChannelDescription__V::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (4<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.ChannelDescription_V has 4 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) timeslotNumber().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) channelTypeandTDMAOffset().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) octet3().set_param(*param.get_elem(2));
    if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) octet4().set_param(*param.get_elem(3));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "timeslotNumber")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          timeslotNumber().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "channelTypeandTDMAOffset")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          channelTypeandTDMAOffset().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "octet3")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          octet3().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "octet4")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          octet4().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.ChannelDescription_V: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.ChannelDescription_V");
  }
}

void ChannelDescription__V::encode_text(Text_Buf& text_buf) const
{
field_timeslotNumber.encode_text(text_buf);
field_channelTypeandTDMAOffset.encode_text(text_buf);
field_octet3.encode_text(text_buf);
field_octet4.encode_text(text_buf);
}

void ChannelDescription__V::decode_text(Text_Buf& text_buf)
{
field_timeslotNumber.decode_text(text_buf);
field_channelTypeandTDMAOffset.decode_text(text_buf);
field_octet3.decode_text(text_buf);
field_octet4.decode_text(text_buf);
}

void ChannelDescription__V::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void ChannelDescription__V::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int ChannelDescription__V::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::BIT3_descr_.raw->forceomit);
  decoded_field_length = field_timeslotNumber.RAW_decode(General__Types::BIT3_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT5_descr_.raw->forceomit);
  decoded_field_length = field_channelTypeandTDMAOffset.RAW_decode(General__Types::BIT5_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_2_force_omit(2, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_octet3.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_2_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_3_force_omit(3, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_octet4.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_3_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int ChannelDescription__V::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 4;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(4);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::BIT3_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT5_descr_.raw);
  myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, General__Types::OCT1_descr_.raw);
  myleaf.body.node.nodes[3] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 3, General__Types::OCT1_descr_.raw);
  encoded_length += field_timeslotNumber.RAW_encode(General__Types::BIT3_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_channelTypeandTDMAOffset.RAW_encode(General__Types::BIT5_descr_, *myleaf.body.node.nodes[1]);
  encoded_length += field_octet3.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[2]);
  encoded_length += field_octet4.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[3]);
  return myleaf.length = encoded_length;
}

struct ChannelDescription__V_template::single_value_struct {
BITSTRING_template field_timeslotNumber;
BITSTRING_template field_channelTypeandTDMAOffset;
OCTETSTRING_template field_octet3;
OCTETSTRING_template field_octet4;
};

void ChannelDescription__V_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_timeslotNumber = ANY_VALUE;
single_value->field_channelTypeandTDMAOffset = ANY_VALUE;
single_value->field_octet3 = ANY_VALUE;
single_value->field_octet4 = ANY_VALUE;
}
}
}

void ChannelDescription__V_template::copy_value(const ChannelDescription__V& other_value)
{
single_value = new single_value_struct;
if (other_value.timeslotNumber().is_bound()) {
  single_value->field_timeslotNumber = other_value.timeslotNumber();
} else {
  single_value->field_timeslotNumber.clean_up();
}
if (other_value.channelTypeandTDMAOffset().is_bound()) {
  single_value->field_channelTypeandTDMAOffset = other_value.channelTypeandTDMAOffset();
} else {
  single_value->field_channelTypeandTDMAOffset.clean_up();
}
if (other_value.octet3().is_bound()) {
  single_value->field_octet3 = other_value.octet3();
} else {
  single_value->field_octet3.clean_up();
}
if (other_value.octet4().is_bound()) {
  single_value->field_octet4 = other_value.octet4();
} else {
  single_value->field_octet4.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void ChannelDescription__V_template::copy_template(const ChannelDescription__V_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.timeslotNumber().get_selection()) {
single_value->field_timeslotNumber = other_value.timeslotNumber();
} else {
single_value->field_timeslotNumber.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.channelTypeandTDMAOffset().get_selection()) {
single_value->field_channelTypeandTDMAOffset = other_value.channelTypeandTDMAOffset();
} else {
single_value->field_channelTypeandTDMAOffset.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.octet3().get_selection()) {
single_value->field_octet3 = other_value.octet3();
} else {
single_value->field_octet3.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.octet4().get_selection()) {
single_value->field_octet4 = other_value.octet4();
} else {
single_value->field_octet4.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new ChannelDescription__V_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new ChannelDescription__V_template(*other_value.implication_.precondition);
implication_.implied_template = new ChannelDescription__V_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelDescription_V.");
break;
}
set_selection(other_value);
}

ChannelDescription__V_template::ChannelDescription__V_template()
{
}

ChannelDescription__V_template::ChannelDescription__V_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

ChannelDescription__V_template::ChannelDescription__V_template(const ChannelDescription__V& other_value)
{
copy_value(other_value);
}

ChannelDescription__V_template::ChannelDescription__V_template(const OPTIONAL<ChannelDescription__V>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ChannelDescription__V&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.ChannelDescription_V from an unbound optional field.");
}
}

ChannelDescription__V_template::ChannelDescription__V_template(ChannelDescription__V_template* p_precondition, ChannelDescription__V_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

ChannelDescription__V_template::ChannelDescription__V_template(Dynamic_Match_Interface<ChannelDescription__V>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<ChannelDescription__V>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

ChannelDescription__V_template::ChannelDescription__V_template(const ChannelDescription__V_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

ChannelDescription__V_template::~ChannelDescription__V_template()
{
clean_up();
}

ChannelDescription__V_template& ChannelDescription__V_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

ChannelDescription__V_template& ChannelDescription__V_template::operator=(const ChannelDescription__V& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

ChannelDescription__V_template& ChannelDescription__V_template::operator=(const OPTIONAL<ChannelDescription__V>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ChannelDescription__V&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.ChannelDescription_V.");
}
return *this;
}

ChannelDescription__V_template& ChannelDescription__V_template::operator=(const ChannelDescription__V_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean ChannelDescription__V_template::match(const ChannelDescription__V& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.timeslotNumber().is_bound()) return FALSE;
if(!single_value->field_timeslotNumber.match(other_value.timeslotNumber(), legacy))return FALSE;
if(!other_value.channelTypeandTDMAOffset().is_bound()) return FALSE;
if(!single_value->field_channelTypeandTDMAOffset.match(other_value.channelTypeandTDMAOffset(), legacy))return FALSE;
if(!other_value.octet3().is_bound()) return FALSE;
if(!single_value->field_octet3.match(other_value.octet3(), legacy))return FALSE;
if(!other_value.octet4().is_bound()) return FALSE;
if(!single_value->field_octet4.match(other_value.octet4(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelDescription_V.");
}
return FALSE;
}

boolean ChannelDescription__V_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_timeslotNumber.is_bound()
 || single_value->field_channelTypeandTDMAOffset.is_bound()
 || single_value->field_octet3.is_bound()
 || single_value->field_octet4.is_bound();
}

boolean ChannelDescription__V_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_timeslotNumber.is_value()
 && single_value->field_channelTypeandTDMAOffset.is_value()
 && single_value->field_octet3.is_value()
 && single_value->field_octet4.is_value();
}

void ChannelDescription__V_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

ChannelDescription__V ChannelDescription__V_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.ChannelDescription_V.");
ChannelDescription__V ret_val;
if (single_value->field_timeslotNumber.is_bound()) {
ret_val.timeslotNumber() = single_value->field_timeslotNumber.valueof();
}
if (single_value->field_channelTypeandTDMAOffset.is_bound()) {
ret_val.channelTypeandTDMAOffset() = single_value->field_channelTypeandTDMAOffset.valueof();
}
if (single_value->field_octet3.is_bound()) {
ret_val.octet3() = single_value->field_octet3.valueof();
}
if (single_value->field_octet4.is_bound()) {
ret_val.octet4() = single_value->field_octet4.valueof();
}
return ret_val;
}

void ChannelDescription__V_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.ChannelDescription_V.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new ChannelDescription__V_template[list_length];
}

ChannelDescription__V_template& ChannelDescription__V_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.ChannelDescription_V.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.ChannelDescription_V.");
return value_list.list_value[list_index];
}

BITSTRING_template& ChannelDescription__V_template::timeslotNumber()
{
set_specific();
return single_value->field_timeslotNumber;
}

const BITSTRING_template& ChannelDescription__V_template::timeslotNumber() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field timeslotNumber of a non-specific template of type @MobileL3_RRM_Types.ChannelDescription_V.");
return single_value->field_timeslotNumber;
}

BITSTRING_template& ChannelDescription__V_template::channelTypeandTDMAOffset()
{
set_specific();
return single_value->field_channelTypeandTDMAOffset;
}

const BITSTRING_template& ChannelDescription__V_template::channelTypeandTDMAOffset() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field channelTypeandTDMAOffset of a non-specific template of type @MobileL3_RRM_Types.ChannelDescription_V.");
return single_value->field_channelTypeandTDMAOffset;
}

OCTETSTRING_template& ChannelDescription__V_template::octet3()
{
set_specific();
return single_value->field_octet3;
}

const OCTETSTRING_template& ChannelDescription__V_template::octet3() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field octet3 of a non-specific template of type @MobileL3_RRM_Types.ChannelDescription_V.");
return single_value->field_octet3;
}

OCTETSTRING_template& ChannelDescription__V_template::octet4()
{
set_specific();
return single_value->field_octet4;
}

const OCTETSTRING_template& ChannelDescription__V_template::octet4() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field octet4 of a non-specific template of type @MobileL3_RRM_Types.ChannelDescription_V.");
return single_value->field_octet4;
}

int ChannelDescription__V_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription_V which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 4;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription_V containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription_V containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription_V containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription_V containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription_V containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription_V containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription_V containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription_V containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelDescription_V.");
  }
  return 0;
}

void ChannelDescription__V_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ timeslotNumber := ");
single_value->field_timeslotNumber.log();
TTCN_Logger::log_event_str(", channelTypeandTDMAOffset := ");
single_value->field_channelTypeandTDMAOffset.log();
TTCN_Logger::log_event_str(", octet3 := ");
single_value->field_octet3.log();
TTCN_Logger::log_event_str(", octet4 := ");
single_value->field_octet4.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void ChannelDescription__V_template::log_match(const ChannelDescription__V& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_timeslotNumber.match(match_value.timeslotNumber(), legacy)){
TTCN_Logger::log_logmatch_info(".timeslotNumber");
single_value->field_timeslotNumber.log_match(match_value.timeslotNumber(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_channelTypeandTDMAOffset.match(match_value.channelTypeandTDMAOffset(), legacy)){
TTCN_Logger::log_logmatch_info(".channelTypeandTDMAOffset");
single_value->field_channelTypeandTDMAOffset.log_match(match_value.channelTypeandTDMAOffset(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_octet3.match(match_value.octet3(), legacy)){
TTCN_Logger::log_logmatch_info(".octet3");
single_value->field_octet3.log_match(match_value.octet3(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_octet4.match(match_value.octet4(), legacy)){
TTCN_Logger::log_logmatch_info(".octet4");
single_value->field_octet4.log_match(match_value.octet4(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ timeslotNumber := ");
single_value->field_timeslotNumber.log_match(match_value.timeslotNumber(), legacy);
TTCN_Logger::log_event_str(", channelTypeandTDMAOffset := ");
single_value->field_channelTypeandTDMAOffset.log_match(match_value.channelTypeandTDMAOffset(), legacy);
TTCN_Logger::log_event_str(", octet3 := ");
single_value->field_octet3.log_match(match_value.octet3(), legacy);
TTCN_Logger::log_event_str(", octet4 := ");
single_value->field_octet4.log_match(match_value.octet4(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void ChannelDescription__V_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (timeslotNumber().is_bound()) timeslotNumber().set_implicit_omit();
if (channelTypeandTDMAOffset().is_bound()) channelTypeandTDMAOffset().set_implicit_omit();
if (octet3().is_bound()) octet3().set_implicit_omit();
if (octet4().is_bound()) octet4().set_implicit_omit();
}

void ChannelDescription__V_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_timeslotNumber.encode_text(text_buf);
single_value->field_channelTypeandTDMAOffset.encode_text(text_buf);
single_value->field_octet3.encode_text(text_buf);
single_value->field_octet4.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelDescription_V.");
}
}

void ChannelDescription__V_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_timeslotNumber.decode_text(text_buf);
single_value->field_channelTypeandTDMAOffset.decode_text(text_buf);
single_value->field_octet3.decode_text(text_buf);
single_value->field_octet4.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new ChannelDescription__V_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.ChannelDescription_V.");
}
}

void ChannelDescription__V_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    ChannelDescription__V_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (4<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.ChannelDescription_V has 4 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) timeslotNumber().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) channelTypeandTDMAOffset().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) octet3().set_param(*param.get_elem(2));
    if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) octet4().set_param(*param.get_elem(3));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "timeslotNumber")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          timeslotNumber().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "channelTypeandTDMAOffset")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          channelTypeandTDMAOffset().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "octet3")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          octet3().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "octet4")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          octet4().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.ChannelDescription_V: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    ChannelDescription__V_template* precondition = new ChannelDescription__V_template;
    precondition->set_param(*param.get_elem(0));
    ChannelDescription__V_template* implied_template = new ChannelDescription__V_template;
    implied_template->set_param(*param.get_elem(1));
    *this = ChannelDescription__V_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.ChannelDescription_V");
  }
  is_ifpresent = param.get_ifpresent();
}

void ChannelDescription__V_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_timeslotNumber.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription_V");
single_value->field_channelTypeandTDMAOffset.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription_V");
single_value->field_octet3.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription_V");
single_value->field_octet4.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription_V");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription_V");
}

boolean ChannelDescription__V_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean ChannelDescription__V_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

ChannelDescription__TV::ChannelDescription__TV()
{
}

ChannelDescription__TV::ChannelDescription__TV(const OCTETSTRING& par_elementIdentifier,
    const BITSTRING& par_timeslotNumber,
    const BITSTRING& par_channelTypeandTDMAOffset,
    const OCTETSTRING& par_octet3,
    const OCTETSTRING& par_octet4)
  :   field_elementIdentifier(par_elementIdentifier),
  field_timeslotNumber(par_timeslotNumber),
  field_channelTypeandTDMAOffset(par_channelTypeandTDMAOffset),
  field_octet3(par_octet3),
  field_octet4(par_octet4)
{
}

ChannelDescription__TV::ChannelDescription__TV(const ChannelDescription__TV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.ChannelDescription_TV.");
if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
else field_elementIdentifier.clean_up();
if (other_value.timeslotNumber().is_bound()) field_timeslotNumber = other_value.timeslotNumber();
else field_timeslotNumber.clean_up();
if (other_value.channelTypeandTDMAOffset().is_bound()) field_channelTypeandTDMAOffset = other_value.channelTypeandTDMAOffset();
else field_channelTypeandTDMAOffset.clean_up();
if (other_value.octet3().is_bound()) field_octet3 = other_value.octet3();
else field_octet3.clean_up();
if (other_value.octet4().is_bound()) field_octet4 = other_value.octet4();
else field_octet4.clean_up();
}

void ChannelDescription__TV::clean_up()
{
field_elementIdentifier.clean_up();
field_timeslotNumber.clean_up();
field_channelTypeandTDMAOffset.clean_up();
field_octet3.clean_up();
field_octet4.clean_up();
}

const TTCN_Typedescriptor_t* ChannelDescription__TV::get_descriptor() const { return &ChannelDescription__TV_descr_; }
ChannelDescription__TV& ChannelDescription__TV::operator=(const ChannelDescription__TV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.ChannelDescription_TV.");
  if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
  else field_elementIdentifier.clean_up();
  if (other_value.timeslotNumber().is_bound()) field_timeslotNumber = other_value.timeslotNumber();
  else field_timeslotNumber.clean_up();
  if (other_value.channelTypeandTDMAOffset().is_bound()) field_channelTypeandTDMAOffset = other_value.channelTypeandTDMAOffset();
  else field_channelTypeandTDMAOffset.clean_up();
  if (other_value.octet3().is_bound()) field_octet3 = other_value.octet3();
  else field_octet3.clean_up();
  if (other_value.octet4().is_bound()) field_octet4 = other_value.octet4();
  else field_octet4.clean_up();
}
return *this;
}

boolean ChannelDescription__TV::operator==(const ChannelDescription__TV& other_value) const
{
return field_elementIdentifier==other_value.field_elementIdentifier
  && field_timeslotNumber==other_value.field_timeslotNumber
  && field_channelTypeandTDMAOffset==other_value.field_channelTypeandTDMAOffset
  && field_octet3==other_value.field_octet3
  && field_octet4==other_value.field_octet4;
}

boolean ChannelDescription__TV::is_bound() const
{
return (field_elementIdentifier.is_bound())
  || (field_timeslotNumber.is_bound())
  || (field_channelTypeandTDMAOffset.is_bound())
  || (field_octet3.is_bound())
  || (field_octet4.is_bound());
}
boolean ChannelDescription__TV::is_value() const
{
return field_elementIdentifier.is_value()
  && field_timeslotNumber.is_value()
  && field_channelTypeandTDMAOffset.is_value()
  && field_octet3.is_value()
  && field_octet4.is_value();
}
void ChannelDescription__TV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ elementIdentifier := ");
field_elementIdentifier.log();
TTCN_Logger::log_event_str(", timeslotNumber := ");
field_timeslotNumber.log();
TTCN_Logger::log_event_str(", channelTypeandTDMAOffset := ");
field_channelTypeandTDMAOffset.log();
TTCN_Logger::log_event_str(", octet3 := ");
field_octet3.log();
TTCN_Logger::log_event_str(", octet4 := ");
field_octet4.log();
TTCN_Logger::log_event_str(" }");
}

void ChannelDescription__TV::set_implicit_omit()
{
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (timeslotNumber().is_bound()) timeslotNumber().set_implicit_omit();
if (channelTypeandTDMAOffset().is_bound()) channelTypeandTDMAOffset().set_implicit_omit();
if (octet3().is_bound()) octet3().set_implicit_omit();
if (octet4().is_bound()) octet4().set_implicit_omit();
}

void ChannelDescription__TV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (5<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.ChannelDescription_TV has 5 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) timeslotNumber().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) channelTypeandTDMAOffset().set_param(*param.get_elem(2));
    if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) octet3().set_param(*param.get_elem(3));
    if (param.get_size()>4 && param.get_elem(4)->get_type()!=Module_Param::MP_NotUsed) octet4().set_param(*param.get_elem(4));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "timeslotNumber")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          timeslotNumber().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "channelTypeandTDMAOffset")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          channelTypeandTDMAOffset().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "octet3")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          octet3().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "octet4")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          octet4().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.ChannelDescription_TV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.ChannelDescription_TV");
  }
}

void ChannelDescription__TV::encode_text(Text_Buf& text_buf) const
{
field_elementIdentifier.encode_text(text_buf);
field_timeslotNumber.encode_text(text_buf);
field_channelTypeandTDMAOffset.encode_text(text_buf);
field_octet3.encode_text(text_buf);
field_octet4.encode_text(text_buf);
}

void ChannelDescription__TV::decode_text(Text_Buf& text_buf)
{
field_elementIdentifier.decode_text(text_buf);
field_timeslotNumber.decode_text(text_buf);
field_channelTypeandTDMAOffset.decode_text(text_buf);
field_octet3.decode_text(text_buf);
field_octet4.decode_text(text_buf);
}

void ChannelDescription__TV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void ChannelDescription__TV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int ChannelDescription__TV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_elementIdentifier.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT3_descr_.raw->forceomit);
  decoded_field_length = field_timeslotNumber.RAW_decode(General__Types::BIT3_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_2_force_omit(2, force_omit, General__Types::BIT5_descr_.raw->forceomit);
  decoded_field_length = field_channelTypeandTDMAOffset.RAW_decode(General__Types::BIT5_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_2_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_3_force_omit(3, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_octet3.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_3_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_4_force_omit(4, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_octet4.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_4_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int ChannelDescription__TV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 5;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(5);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::OCT1_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT3_descr_.raw);
  myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, General__Types::BIT5_descr_.raw);
  myleaf.body.node.nodes[3] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 3, General__Types::OCT1_descr_.raw);
  myleaf.body.node.nodes[4] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 4, General__Types::OCT1_descr_.raw);
  encoded_length += field_elementIdentifier.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_timeslotNumber.RAW_encode(General__Types::BIT3_descr_, *myleaf.body.node.nodes[1]);
  encoded_length += field_channelTypeandTDMAOffset.RAW_encode(General__Types::BIT5_descr_, *myleaf.body.node.nodes[2]);
  encoded_length += field_octet3.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[3]);
  encoded_length += field_octet4.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[4]);
  return myleaf.length = encoded_length;
}

struct ChannelDescription__TV_template::single_value_struct {
OCTETSTRING_template field_elementIdentifier;
BITSTRING_template field_timeslotNumber;
BITSTRING_template field_channelTypeandTDMAOffset;
OCTETSTRING_template field_octet3;
OCTETSTRING_template field_octet4;
};

void ChannelDescription__TV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_elementIdentifier = ANY_VALUE;
single_value->field_timeslotNumber = ANY_VALUE;
single_value->field_channelTypeandTDMAOffset = ANY_VALUE;
single_value->field_octet3 = ANY_VALUE;
single_value->field_octet4 = ANY_VALUE;
}
}
}

void ChannelDescription__TV_template::copy_value(const ChannelDescription__TV& other_value)
{
single_value = new single_value_struct;
if (other_value.elementIdentifier().is_bound()) {
  single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
  single_value->field_elementIdentifier.clean_up();
}
if (other_value.timeslotNumber().is_bound()) {
  single_value->field_timeslotNumber = other_value.timeslotNumber();
} else {
  single_value->field_timeslotNumber.clean_up();
}
if (other_value.channelTypeandTDMAOffset().is_bound()) {
  single_value->field_channelTypeandTDMAOffset = other_value.channelTypeandTDMAOffset();
} else {
  single_value->field_channelTypeandTDMAOffset.clean_up();
}
if (other_value.octet3().is_bound()) {
  single_value->field_octet3 = other_value.octet3();
} else {
  single_value->field_octet3.clean_up();
}
if (other_value.octet4().is_bound()) {
  single_value->field_octet4 = other_value.octet4();
} else {
  single_value->field_octet4.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void ChannelDescription__TV_template::copy_template(const ChannelDescription__TV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.elementIdentifier().get_selection()) {
single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
single_value->field_elementIdentifier.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.timeslotNumber().get_selection()) {
single_value->field_timeslotNumber = other_value.timeslotNumber();
} else {
single_value->field_timeslotNumber.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.channelTypeandTDMAOffset().get_selection()) {
single_value->field_channelTypeandTDMAOffset = other_value.channelTypeandTDMAOffset();
} else {
single_value->field_channelTypeandTDMAOffset.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.octet3().get_selection()) {
single_value->field_octet3 = other_value.octet3();
} else {
single_value->field_octet3.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.octet4().get_selection()) {
single_value->field_octet4 = other_value.octet4();
} else {
single_value->field_octet4.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new ChannelDescription__TV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new ChannelDescription__TV_template(*other_value.implication_.precondition);
implication_.implied_template = new ChannelDescription__TV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelDescription_TV.");
break;
}
set_selection(other_value);
}

ChannelDescription__TV_template::ChannelDescription__TV_template()
{
}

ChannelDescription__TV_template::ChannelDescription__TV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

ChannelDescription__TV_template::ChannelDescription__TV_template(const ChannelDescription__TV& other_value)
{
copy_value(other_value);
}

ChannelDescription__TV_template::ChannelDescription__TV_template(const OPTIONAL<ChannelDescription__TV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ChannelDescription__TV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.ChannelDescription_TV from an unbound optional field.");
}
}

ChannelDescription__TV_template::ChannelDescription__TV_template(ChannelDescription__TV_template* p_precondition, ChannelDescription__TV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

ChannelDescription__TV_template::ChannelDescription__TV_template(Dynamic_Match_Interface<ChannelDescription__TV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<ChannelDescription__TV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

ChannelDescription__TV_template::ChannelDescription__TV_template(const ChannelDescription__TV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

ChannelDescription__TV_template::~ChannelDescription__TV_template()
{
clean_up();
}

ChannelDescription__TV_template& ChannelDescription__TV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

ChannelDescription__TV_template& ChannelDescription__TV_template::operator=(const ChannelDescription__TV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

ChannelDescription__TV_template& ChannelDescription__TV_template::operator=(const OPTIONAL<ChannelDescription__TV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ChannelDescription__TV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.ChannelDescription_TV.");
}
return *this;
}

ChannelDescription__TV_template& ChannelDescription__TV_template::operator=(const ChannelDescription__TV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean ChannelDescription__TV_template::match(const ChannelDescription__TV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.elementIdentifier().is_bound()) return FALSE;
if(!single_value->field_elementIdentifier.match(other_value.elementIdentifier(), legacy))return FALSE;
if(!other_value.timeslotNumber().is_bound()) return FALSE;
if(!single_value->field_timeslotNumber.match(other_value.timeslotNumber(), legacy))return FALSE;
if(!other_value.channelTypeandTDMAOffset().is_bound()) return FALSE;
if(!single_value->field_channelTypeandTDMAOffset.match(other_value.channelTypeandTDMAOffset(), legacy))return FALSE;
if(!other_value.octet3().is_bound()) return FALSE;
if(!single_value->field_octet3.match(other_value.octet3(), legacy))return FALSE;
if(!other_value.octet4().is_bound()) return FALSE;
if(!single_value->field_octet4.match(other_value.octet4(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelDescription_TV.");
}
return FALSE;
}

boolean ChannelDescription__TV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_elementIdentifier.is_bound()
 || single_value->field_timeslotNumber.is_bound()
 || single_value->field_channelTypeandTDMAOffset.is_bound()
 || single_value->field_octet3.is_bound()
 || single_value->field_octet4.is_bound();
}

boolean ChannelDescription__TV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_elementIdentifier.is_value()
 && single_value->field_timeslotNumber.is_value()
 && single_value->field_channelTypeandTDMAOffset.is_value()
 && single_value->field_octet3.is_value()
 && single_value->field_octet4.is_value();
}

void ChannelDescription__TV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

ChannelDescription__TV ChannelDescription__TV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.ChannelDescription_TV.");
ChannelDescription__TV ret_val;
if (single_value->field_elementIdentifier.is_bound()) {
ret_val.elementIdentifier() = single_value->field_elementIdentifier.valueof();
}
if (single_value->field_timeslotNumber.is_bound()) {
ret_val.timeslotNumber() = single_value->field_timeslotNumber.valueof();
}
if (single_value->field_channelTypeandTDMAOffset.is_bound()) {
ret_val.channelTypeandTDMAOffset() = single_value->field_channelTypeandTDMAOffset.valueof();
}
if (single_value->field_octet3.is_bound()) {
ret_val.octet3() = single_value->field_octet3.valueof();
}
if (single_value->field_octet4.is_bound()) {
ret_val.octet4() = single_value->field_octet4.valueof();
}
return ret_val;
}

void ChannelDescription__TV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.ChannelDescription_TV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new ChannelDescription__TV_template[list_length];
}

ChannelDescription__TV_template& ChannelDescription__TV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.ChannelDescription_TV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.ChannelDescription_TV.");
return value_list.list_value[list_index];
}

OCTETSTRING_template& ChannelDescription__TV_template::elementIdentifier()
{
set_specific();
return single_value->field_elementIdentifier;
}

const OCTETSTRING_template& ChannelDescription__TV_template::elementIdentifier() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field elementIdentifier of a non-specific template of type @MobileL3_RRM_Types.ChannelDescription_TV.");
return single_value->field_elementIdentifier;
}

BITSTRING_template& ChannelDescription__TV_template::timeslotNumber()
{
set_specific();
return single_value->field_timeslotNumber;
}

const BITSTRING_template& ChannelDescription__TV_template::timeslotNumber() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field timeslotNumber of a non-specific template of type @MobileL3_RRM_Types.ChannelDescription_TV.");
return single_value->field_timeslotNumber;
}

BITSTRING_template& ChannelDescription__TV_template::channelTypeandTDMAOffset()
{
set_specific();
return single_value->field_channelTypeandTDMAOffset;
}

const BITSTRING_template& ChannelDescription__TV_template::channelTypeandTDMAOffset() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field channelTypeandTDMAOffset of a non-specific template of type @MobileL3_RRM_Types.ChannelDescription_TV.");
return single_value->field_channelTypeandTDMAOffset;
}

OCTETSTRING_template& ChannelDescription__TV_template::octet3()
{
set_specific();
return single_value->field_octet3;
}

const OCTETSTRING_template& ChannelDescription__TV_template::octet3() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field octet3 of a non-specific template of type @MobileL3_RRM_Types.ChannelDescription_TV.");
return single_value->field_octet3;
}

OCTETSTRING_template& ChannelDescription__TV_template::octet4()
{
set_specific();
return single_value->field_octet4;
}

const OCTETSTRING_template& ChannelDescription__TV_template::octet4() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field octet4 of a non-specific template of type @MobileL3_RRM_Types.ChannelDescription_TV.");
return single_value->field_octet4;
}

int ChannelDescription__TV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription_TV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 5;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription_TV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription_TV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription_TV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription_TV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription_TV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription_TV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription_TV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription_TV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelDescription_TV.");
  }
  return 0;
}

void ChannelDescription__TV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log();
TTCN_Logger::log_event_str(", timeslotNumber := ");
single_value->field_timeslotNumber.log();
TTCN_Logger::log_event_str(", channelTypeandTDMAOffset := ");
single_value->field_channelTypeandTDMAOffset.log();
TTCN_Logger::log_event_str(", octet3 := ");
single_value->field_octet3.log();
TTCN_Logger::log_event_str(", octet4 := ");
single_value->field_octet4.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void ChannelDescription__TV_template::log_match(const ChannelDescription__TV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_elementIdentifier.match(match_value.elementIdentifier(), legacy)){
TTCN_Logger::log_logmatch_info(".elementIdentifier");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_timeslotNumber.match(match_value.timeslotNumber(), legacy)){
TTCN_Logger::log_logmatch_info(".timeslotNumber");
single_value->field_timeslotNumber.log_match(match_value.timeslotNumber(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_channelTypeandTDMAOffset.match(match_value.channelTypeandTDMAOffset(), legacy)){
TTCN_Logger::log_logmatch_info(".channelTypeandTDMAOffset");
single_value->field_channelTypeandTDMAOffset.log_match(match_value.channelTypeandTDMAOffset(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_octet3.match(match_value.octet3(), legacy)){
TTCN_Logger::log_logmatch_info(".octet3");
single_value->field_octet3.log_match(match_value.octet3(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_octet4.match(match_value.octet4(), legacy)){
TTCN_Logger::log_logmatch_info(".octet4");
single_value->field_octet4.log_match(match_value.octet4(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::log_event_str(", timeslotNumber := ");
single_value->field_timeslotNumber.log_match(match_value.timeslotNumber(), legacy);
TTCN_Logger::log_event_str(", channelTypeandTDMAOffset := ");
single_value->field_channelTypeandTDMAOffset.log_match(match_value.channelTypeandTDMAOffset(), legacy);
TTCN_Logger::log_event_str(", octet3 := ");
single_value->field_octet3.log_match(match_value.octet3(), legacy);
TTCN_Logger::log_event_str(", octet4 := ");
single_value->field_octet4.log_match(match_value.octet4(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void ChannelDescription__TV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (timeslotNumber().is_bound()) timeslotNumber().set_implicit_omit();
if (channelTypeandTDMAOffset().is_bound()) channelTypeandTDMAOffset().set_implicit_omit();
if (octet3().is_bound()) octet3().set_implicit_omit();
if (octet4().is_bound()) octet4().set_implicit_omit();
}

void ChannelDescription__TV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_elementIdentifier.encode_text(text_buf);
single_value->field_timeslotNumber.encode_text(text_buf);
single_value->field_channelTypeandTDMAOffset.encode_text(text_buf);
single_value->field_octet3.encode_text(text_buf);
single_value->field_octet4.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelDescription_TV.");
}
}

void ChannelDescription__TV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_elementIdentifier.decode_text(text_buf);
single_value->field_timeslotNumber.decode_text(text_buf);
single_value->field_channelTypeandTDMAOffset.decode_text(text_buf);
single_value->field_octet3.decode_text(text_buf);
single_value->field_octet4.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new ChannelDescription__TV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.ChannelDescription_TV.");
}
}

void ChannelDescription__TV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    ChannelDescription__TV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (5<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.ChannelDescription_TV has 5 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) timeslotNumber().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) channelTypeandTDMAOffset().set_param(*param.get_elem(2));
    if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) octet3().set_param(*param.get_elem(3));
    if (param.get_size()>4 && param.get_elem(4)->get_type()!=Module_Param::MP_NotUsed) octet4().set_param(*param.get_elem(4));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "timeslotNumber")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          timeslotNumber().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "channelTypeandTDMAOffset")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          channelTypeandTDMAOffset().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "octet3")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          octet3().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "octet4")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          octet4().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.ChannelDescription_TV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    ChannelDescription__TV_template* precondition = new ChannelDescription__TV_template;
    precondition->set_param(*param.get_elem(0));
    ChannelDescription__TV_template* implied_template = new ChannelDescription__TV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = ChannelDescription__TV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.ChannelDescription_TV");
  }
  is_ifpresent = param.get_ifpresent();
}

void ChannelDescription__TV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_elementIdentifier.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription_TV");
single_value->field_timeslotNumber.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription_TV");
single_value->field_channelTypeandTDMAOffset.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription_TV");
single_value->field_octet3.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription_TV");
single_value->field_octet4.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription_TV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription_TV");
}

boolean ChannelDescription__TV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean ChannelDescription__TV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

ChannelDescription2__V::ChannelDescription2__V()
{
}

ChannelDescription2__V::ChannelDescription2__V(const BITSTRING& par_timeslotNumber,
    const BITSTRING& par_channelTypeandTDMAOffset,
    const OCTETSTRING& par_octet3,
    const OCTETSTRING& par_octet4)
  :   field_timeslotNumber(par_timeslotNumber),
  field_channelTypeandTDMAOffset(par_channelTypeandTDMAOffset),
  field_octet3(par_octet3),
  field_octet4(par_octet4)
{
}

ChannelDescription2__V::ChannelDescription2__V(const ChannelDescription2__V& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.ChannelDescription2_V.");
if (other_value.timeslotNumber().is_bound()) field_timeslotNumber = other_value.timeslotNumber();
else field_timeslotNumber.clean_up();
if (other_value.channelTypeandTDMAOffset().is_bound()) field_channelTypeandTDMAOffset = other_value.channelTypeandTDMAOffset();
else field_channelTypeandTDMAOffset.clean_up();
if (other_value.octet3().is_bound()) field_octet3 = other_value.octet3();
else field_octet3.clean_up();
if (other_value.octet4().is_bound()) field_octet4 = other_value.octet4();
else field_octet4.clean_up();
}

void ChannelDescription2__V::clean_up()
{
field_timeslotNumber.clean_up();
field_channelTypeandTDMAOffset.clean_up();
field_octet3.clean_up();
field_octet4.clean_up();
}

const TTCN_Typedescriptor_t* ChannelDescription2__V::get_descriptor() const { return &ChannelDescription2__V_descr_; }
ChannelDescription2__V& ChannelDescription2__V::operator=(const ChannelDescription2__V& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.ChannelDescription2_V.");
  if (other_value.timeslotNumber().is_bound()) field_timeslotNumber = other_value.timeslotNumber();
  else field_timeslotNumber.clean_up();
  if (other_value.channelTypeandTDMAOffset().is_bound()) field_channelTypeandTDMAOffset = other_value.channelTypeandTDMAOffset();
  else field_channelTypeandTDMAOffset.clean_up();
  if (other_value.octet3().is_bound()) field_octet3 = other_value.octet3();
  else field_octet3.clean_up();
  if (other_value.octet4().is_bound()) field_octet4 = other_value.octet4();
  else field_octet4.clean_up();
}
return *this;
}

boolean ChannelDescription2__V::operator==(const ChannelDescription2__V& other_value) const
{
return field_timeslotNumber==other_value.field_timeslotNumber
  && field_channelTypeandTDMAOffset==other_value.field_channelTypeandTDMAOffset
  && field_octet3==other_value.field_octet3
  && field_octet4==other_value.field_octet4;
}

boolean ChannelDescription2__V::is_bound() const
{
return (field_timeslotNumber.is_bound())
  || (field_channelTypeandTDMAOffset.is_bound())
  || (field_octet3.is_bound())
  || (field_octet4.is_bound());
}
boolean ChannelDescription2__V::is_value() const
{
return field_timeslotNumber.is_value()
  && field_channelTypeandTDMAOffset.is_value()
  && field_octet3.is_value()
  && field_octet4.is_value();
}
void ChannelDescription2__V::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ timeslotNumber := ");
field_timeslotNumber.log();
TTCN_Logger::log_event_str(", channelTypeandTDMAOffset := ");
field_channelTypeandTDMAOffset.log();
TTCN_Logger::log_event_str(", octet3 := ");
field_octet3.log();
TTCN_Logger::log_event_str(", octet4 := ");
field_octet4.log();
TTCN_Logger::log_event_str(" }");
}

void ChannelDescription2__V::set_implicit_omit()
{
if (timeslotNumber().is_bound()) timeslotNumber().set_implicit_omit();
if (channelTypeandTDMAOffset().is_bound()) channelTypeandTDMAOffset().set_implicit_omit();
if (octet3().is_bound()) octet3().set_implicit_omit();
if (octet4().is_bound()) octet4().set_implicit_omit();
}

void ChannelDescription2__V::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (4<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.ChannelDescription2_V has 4 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) timeslotNumber().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) channelTypeandTDMAOffset().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) octet3().set_param(*param.get_elem(2));
    if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) octet4().set_param(*param.get_elem(3));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "timeslotNumber")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          timeslotNumber().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "channelTypeandTDMAOffset")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          channelTypeandTDMAOffset().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "octet3")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          octet3().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "octet4")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          octet4().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.ChannelDescription2_V: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.ChannelDescription2_V");
  }
}

void ChannelDescription2__V::encode_text(Text_Buf& text_buf) const
{
field_timeslotNumber.encode_text(text_buf);
field_channelTypeandTDMAOffset.encode_text(text_buf);
field_octet3.encode_text(text_buf);
field_octet4.encode_text(text_buf);
}

void ChannelDescription2__V::decode_text(Text_Buf& text_buf)
{
field_timeslotNumber.decode_text(text_buf);
field_channelTypeandTDMAOffset.decode_text(text_buf);
field_octet3.decode_text(text_buf);
field_octet4.decode_text(text_buf);
}

void ChannelDescription2__V::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void ChannelDescription2__V::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int ChannelDescription2__V::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::BIT3_descr_.raw->forceomit);
  decoded_field_length = field_timeslotNumber.RAW_decode(General__Types::BIT3_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT5_descr_.raw->forceomit);
  decoded_field_length = field_channelTypeandTDMAOffset.RAW_decode(General__Types::BIT5_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_2_force_omit(2, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_octet3.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_2_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_3_force_omit(3, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_octet4.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_3_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int ChannelDescription2__V::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 4;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(4);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::BIT3_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT5_descr_.raw);
  myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, General__Types::OCT1_descr_.raw);
  myleaf.body.node.nodes[3] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 3, General__Types::OCT1_descr_.raw);
  encoded_length += field_timeslotNumber.RAW_encode(General__Types::BIT3_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_channelTypeandTDMAOffset.RAW_encode(General__Types::BIT5_descr_, *myleaf.body.node.nodes[1]);
  encoded_length += field_octet3.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[2]);
  encoded_length += field_octet4.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[3]);
  return myleaf.length = encoded_length;
}

struct ChannelDescription2__V_template::single_value_struct {
BITSTRING_template field_timeslotNumber;
BITSTRING_template field_channelTypeandTDMAOffset;
OCTETSTRING_template field_octet3;
OCTETSTRING_template field_octet4;
};

void ChannelDescription2__V_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_timeslotNumber = ANY_VALUE;
single_value->field_channelTypeandTDMAOffset = ANY_VALUE;
single_value->field_octet3 = ANY_VALUE;
single_value->field_octet4 = ANY_VALUE;
}
}
}

void ChannelDescription2__V_template::copy_value(const ChannelDescription2__V& other_value)
{
single_value = new single_value_struct;
if (other_value.timeslotNumber().is_bound()) {
  single_value->field_timeslotNumber = other_value.timeslotNumber();
} else {
  single_value->field_timeslotNumber.clean_up();
}
if (other_value.channelTypeandTDMAOffset().is_bound()) {
  single_value->field_channelTypeandTDMAOffset = other_value.channelTypeandTDMAOffset();
} else {
  single_value->field_channelTypeandTDMAOffset.clean_up();
}
if (other_value.octet3().is_bound()) {
  single_value->field_octet3 = other_value.octet3();
} else {
  single_value->field_octet3.clean_up();
}
if (other_value.octet4().is_bound()) {
  single_value->field_octet4 = other_value.octet4();
} else {
  single_value->field_octet4.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void ChannelDescription2__V_template::copy_template(const ChannelDescription2__V_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.timeslotNumber().get_selection()) {
single_value->field_timeslotNumber = other_value.timeslotNumber();
} else {
single_value->field_timeslotNumber.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.channelTypeandTDMAOffset().get_selection()) {
single_value->field_channelTypeandTDMAOffset = other_value.channelTypeandTDMAOffset();
} else {
single_value->field_channelTypeandTDMAOffset.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.octet3().get_selection()) {
single_value->field_octet3 = other_value.octet3();
} else {
single_value->field_octet3.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.octet4().get_selection()) {
single_value->field_octet4 = other_value.octet4();
} else {
single_value->field_octet4.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new ChannelDescription2__V_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new ChannelDescription2__V_template(*other_value.implication_.precondition);
implication_.implied_template = new ChannelDescription2__V_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelDescription2_V.");
break;
}
set_selection(other_value);
}

ChannelDescription2__V_template::ChannelDescription2__V_template()
{
}

ChannelDescription2__V_template::ChannelDescription2__V_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

ChannelDescription2__V_template::ChannelDescription2__V_template(const ChannelDescription2__V& other_value)
{
copy_value(other_value);
}

ChannelDescription2__V_template::ChannelDescription2__V_template(const OPTIONAL<ChannelDescription2__V>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ChannelDescription2__V&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.ChannelDescription2_V from an unbound optional field.");
}
}

ChannelDescription2__V_template::ChannelDescription2__V_template(ChannelDescription2__V_template* p_precondition, ChannelDescription2__V_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

ChannelDescription2__V_template::ChannelDescription2__V_template(Dynamic_Match_Interface<ChannelDescription2__V>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<ChannelDescription2__V>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

ChannelDescription2__V_template::ChannelDescription2__V_template(const ChannelDescription2__V_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

ChannelDescription2__V_template::~ChannelDescription2__V_template()
{
clean_up();
}

ChannelDescription2__V_template& ChannelDescription2__V_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

ChannelDescription2__V_template& ChannelDescription2__V_template::operator=(const ChannelDescription2__V& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

ChannelDescription2__V_template& ChannelDescription2__V_template::operator=(const OPTIONAL<ChannelDescription2__V>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ChannelDescription2__V&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.ChannelDescription2_V.");
}
return *this;
}

ChannelDescription2__V_template& ChannelDescription2__V_template::operator=(const ChannelDescription2__V_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean ChannelDescription2__V_template::match(const ChannelDescription2__V& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.timeslotNumber().is_bound()) return FALSE;
if(!single_value->field_timeslotNumber.match(other_value.timeslotNumber(), legacy))return FALSE;
if(!other_value.channelTypeandTDMAOffset().is_bound()) return FALSE;
if(!single_value->field_channelTypeandTDMAOffset.match(other_value.channelTypeandTDMAOffset(), legacy))return FALSE;
if(!other_value.octet3().is_bound()) return FALSE;
if(!single_value->field_octet3.match(other_value.octet3(), legacy))return FALSE;
if(!other_value.octet4().is_bound()) return FALSE;
if(!single_value->field_octet4.match(other_value.octet4(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelDescription2_V.");
}
return FALSE;
}

boolean ChannelDescription2__V_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_timeslotNumber.is_bound()
 || single_value->field_channelTypeandTDMAOffset.is_bound()
 || single_value->field_octet3.is_bound()
 || single_value->field_octet4.is_bound();
}

boolean ChannelDescription2__V_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_timeslotNumber.is_value()
 && single_value->field_channelTypeandTDMAOffset.is_value()
 && single_value->field_octet3.is_value()
 && single_value->field_octet4.is_value();
}

void ChannelDescription2__V_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

ChannelDescription2__V ChannelDescription2__V_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.ChannelDescription2_V.");
ChannelDescription2__V ret_val;
if (single_value->field_timeslotNumber.is_bound()) {
ret_val.timeslotNumber() = single_value->field_timeslotNumber.valueof();
}
if (single_value->field_channelTypeandTDMAOffset.is_bound()) {
ret_val.channelTypeandTDMAOffset() = single_value->field_channelTypeandTDMAOffset.valueof();
}
if (single_value->field_octet3.is_bound()) {
ret_val.octet3() = single_value->field_octet3.valueof();
}
if (single_value->field_octet4.is_bound()) {
ret_val.octet4() = single_value->field_octet4.valueof();
}
return ret_val;
}

void ChannelDescription2__V_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.ChannelDescription2_V.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new ChannelDescription2__V_template[list_length];
}

ChannelDescription2__V_template& ChannelDescription2__V_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.ChannelDescription2_V.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.ChannelDescription2_V.");
return value_list.list_value[list_index];
}

BITSTRING_template& ChannelDescription2__V_template::timeslotNumber()
{
set_specific();
return single_value->field_timeslotNumber;
}

const BITSTRING_template& ChannelDescription2__V_template::timeslotNumber() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field timeslotNumber of a non-specific template of type @MobileL3_RRM_Types.ChannelDescription2_V.");
return single_value->field_timeslotNumber;
}

BITSTRING_template& ChannelDescription2__V_template::channelTypeandTDMAOffset()
{
set_specific();
return single_value->field_channelTypeandTDMAOffset;
}

const BITSTRING_template& ChannelDescription2__V_template::channelTypeandTDMAOffset() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field channelTypeandTDMAOffset of a non-specific template of type @MobileL3_RRM_Types.ChannelDescription2_V.");
return single_value->field_channelTypeandTDMAOffset;
}

OCTETSTRING_template& ChannelDescription2__V_template::octet3()
{
set_specific();
return single_value->field_octet3;
}

const OCTETSTRING_template& ChannelDescription2__V_template::octet3() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field octet3 of a non-specific template of type @MobileL3_RRM_Types.ChannelDescription2_V.");
return single_value->field_octet3;
}

OCTETSTRING_template& ChannelDescription2__V_template::octet4()
{
set_specific();
return single_value->field_octet4;
}

const OCTETSTRING_template& ChannelDescription2__V_template::octet4() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field octet4 of a non-specific template of type @MobileL3_RRM_Types.ChannelDescription2_V.");
return single_value->field_octet4;
}

int ChannelDescription2__V_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription2_V which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 4;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription2_V containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription2_V containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription2_V containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription2_V containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription2_V containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription2_V containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription2_V containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription2_V containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelDescription2_V.");
  }
  return 0;
}

void ChannelDescription2__V_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ timeslotNumber := ");
single_value->field_timeslotNumber.log();
TTCN_Logger::log_event_str(", channelTypeandTDMAOffset := ");
single_value->field_channelTypeandTDMAOffset.log();
TTCN_Logger::log_event_str(", octet3 := ");
single_value->field_octet3.log();
TTCN_Logger::log_event_str(", octet4 := ");
single_value->field_octet4.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void ChannelDescription2__V_template::log_match(const ChannelDescription2__V& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_timeslotNumber.match(match_value.timeslotNumber(), legacy)){
TTCN_Logger::log_logmatch_info(".timeslotNumber");
single_value->field_timeslotNumber.log_match(match_value.timeslotNumber(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_channelTypeandTDMAOffset.match(match_value.channelTypeandTDMAOffset(), legacy)){
TTCN_Logger::log_logmatch_info(".channelTypeandTDMAOffset");
single_value->field_channelTypeandTDMAOffset.log_match(match_value.channelTypeandTDMAOffset(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_octet3.match(match_value.octet3(), legacy)){
TTCN_Logger::log_logmatch_info(".octet3");
single_value->field_octet3.log_match(match_value.octet3(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_octet4.match(match_value.octet4(), legacy)){
TTCN_Logger::log_logmatch_info(".octet4");
single_value->field_octet4.log_match(match_value.octet4(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ timeslotNumber := ");
single_value->field_timeslotNumber.log_match(match_value.timeslotNumber(), legacy);
TTCN_Logger::log_event_str(", channelTypeandTDMAOffset := ");
single_value->field_channelTypeandTDMAOffset.log_match(match_value.channelTypeandTDMAOffset(), legacy);
TTCN_Logger::log_event_str(", octet3 := ");
single_value->field_octet3.log_match(match_value.octet3(), legacy);
TTCN_Logger::log_event_str(", octet4 := ");
single_value->field_octet4.log_match(match_value.octet4(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void ChannelDescription2__V_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (timeslotNumber().is_bound()) timeslotNumber().set_implicit_omit();
if (channelTypeandTDMAOffset().is_bound()) channelTypeandTDMAOffset().set_implicit_omit();
if (octet3().is_bound()) octet3().set_implicit_omit();
if (octet4().is_bound()) octet4().set_implicit_omit();
}

void ChannelDescription2__V_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_timeslotNumber.encode_text(text_buf);
single_value->field_channelTypeandTDMAOffset.encode_text(text_buf);
single_value->field_octet3.encode_text(text_buf);
single_value->field_octet4.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelDescription2_V.");
}
}

void ChannelDescription2__V_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_timeslotNumber.decode_text(text_buf);
single_value->field_channelTypeandTDMAOffset.decode_text(text_buf);
single_value->field_octet3.decode_text(text_buf);
single_value->field_octet4.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new ChannelDescription2__V_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.ChannelDescription2_V.");
}
}

void ChannelDescription2__V_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    ChannelDescription2__V_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (4<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.ChannelDescription2_V has 4 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) timeslotNumber().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) channelTypeandTDMAOffset().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) octet3().set_param(*param.get_elem(2));
    if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) octet4().set_param(*param.get_elem(3));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "timeslotNumber")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          timeslotNumber().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "channelTypeandTDMAOffset")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          channelTypeandTDMAOffset().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "octet3")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          octet3().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "octet4")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          octet4().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.ChannelDescription2_V: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    ChannelDescription2__V_template* precondition = new ChannelDescription2__V_template;
    precondition->set_param(*param.get_elem(0));
    ChannelDescription2__V_template* implied_template = new ChannelDescription2__V_template;
    implied_template->set_param(*param.get_elem(1));
    *this = ChannelDescription2__V_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.ChannelDescription2_V");
  }
  is_ifpresent = param.get_ifpresent();
}

void ChannelDescription2__V_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_timeslotNumber.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription2_V");
single_value->field_channelTypeandTDMAOffset.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription2_V");
single_value->field_octet3.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription2_V");
single_value->field_octet4.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription2_V");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription2_V");
}

boolean ChannelDescription2__V_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean ChannelDescription2__V_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

ChannelDescription2__TV::ChannelDescription2__TV()
{
}

ChannelDescription2__TV::ChannelDescription2__TV(const OCTETSTRING& par_elementIdentifier,
    const BITSTRING& par_timeslotNumber,
    const BITSTRING& par_channelTypeandTDMAOffset,
    const OCTETSTRING& par_octet3,
    const OCTETSTRING& par_octet4)
  :   field_elementIdentifier(par_elementIdentifier),
  field_timeslotNumber(par_timeslotNumber),
  field_channelTypeandTDMAOffset(par_channelTypeandTDMAOffset),
  field_octet3(par_octet3),
  field_octet4(par_octet4)
{
}

ChannelDescription2__TV::ChannelDescription2__TV(const ChannelDescription2__TV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.ChannelDescription2_TV.");
if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
else field_elementIdentifier.clean_up();
if (other_value.timeslotNumber().is_bound()) field_timeslotNumber = other_value.timeslotNumber();
else field_timeslotNumber.clean_up();
if (other_value.channelTypeandTDMAOffset().is_bound()) field_channelTypeandTDMAOffset = other_value.channelTypeandTDMAOffset();
else field_channelTypeandTDMAOffset.clean_up();
if (other_value.octet3().is_bound()) field_octet3 = other_value.octet3();
else field_octet3.clean_up();
if (other_value.octet4().is_bound()) field_octet4 = other_value.octet4();
else field_octet4.clean_up();
}

void ChannelDescription2__TV::clean_up()
{
field_elementIdentifier.clean_up();
field_timeslotNumber.clean_up();
field_channelTypeandTDMAOffset.clean_up();
field_octet3.clean_up();
field_octet4.clean_up();
}

const TTCN_Typedescriptor_t* ChannelDescription2__TV::get_descriptor() const { return &ChannelDescription2__TV_descr_; }
ChannelDescription2__TV& ChannelDescription2__TV::operator=(const ChannelDescription2__TV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.ChannelDescription2_TV.");
  if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
  else field_elementIdentifier.clean_up();
  if (other_value.timeslotNumber().is_bound()) field_timeslotNumber = other_value.timeslotNumber();
  else field_timeslotNumber.clean_up();
  if (other_value.channelTypeandTDMAOffset().is_bound()) field_channelTypeandTDMAOffset = other_value.channelTypeandTDMAOffset();
  else field_channelTypeandTDMAOffset.clean_up();
  if (other_value.octet3().is_bound()) field_octet3 = other_value.octet3();
  else field_octet3.clean_up();
  if (other_value.octet4().is_bound()) field_octet4 = other_value.octet4();
  else field_octet4.clean_up();
}
return *this;
}

boolean ChannelDescription2__TV::operator==(const ChannelDescription2__TV& other_value) const
{
return field_elementIdentifier==other_value.field_elementIdentifier
  && field_timeslotNumber==other_value.field_timeslotNumber
  && field_channelTypeandTDMAOffset==other_value.field_channelTypeandTDMAOffset
  && field_octet3==other_value.field_octet3
  && field_octet4==other_value.field_octet4;
}

boolean ChannelDescription2__TV::is_bound() const
{
return (field_elementIdentifier.is_bound())
  || (field_timeslotNumber.is_bound())
  || (field_channelTypeandTDMAOffset.is_bound())
  || (field_octet3.is_bound())
  || (field_octet4.is_bound());
}
boolean ChannelDescription2__TV::is_value() const
{
return field_elementIdentifier.is_value()
  && field_timeslotNumber.is_value()
  && field_channelTypeandTDMAOffset.is_value()
  && field_octet3.is_value()
  && field_octet4.is_value();
}
void ChannelDescription2__TV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ elementIdentifier := ");
field_elementIdentifier.log();
TTCN_Logger::log_event_str(", timeslotNumber := ");
field_timeslotNumber.log();
TTCN_Logger::log_event_str(", channelTypeandTDMAOffset := ");
field_channelTypeandTDMAOffset.log();
TTCN_Logger::log_event_str(", octet3 := ");
field_octet3.log();
TTCN_Logger::log_event_str(", octet4 := ");
field_octet4.log();
TTCN_Logger::log_event_str(" }");
}

void ChannelDescription2__TV::set_implicit_omit()
{
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (timeslotNumber().is_bound()) timeslotNumber().set_implicit_omit();
if (channelTypeandTDMAOffset().is_bound()) channelTypeandTDMAOffset().set_implicit_omit();
if (octet3().is_bound()) octet3().set_implicit_omit();
if (octet4().is_bound()) octet4().set_implicit_omit();
}

void ChannelDescription2__TV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (5<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.ChannelDescription2_TV has 5 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) timeslotNumber().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) channelTypeandTDMAOffset().set_param(*param.get_elem(2));
    if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) octet3().set_param(*param.get_elem(3));
    if (param.get_size()>4 && param.get_elem(4)->get_type()!=Module_Param::MP_NotUsed) octet4().set_param(*param.get_elem(4));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "timeslotNumber")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          timeslotNumber().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "channelTypeandTDMAOffset")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          channelTypeandTDMAOffset().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "octet3")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          octet3().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "octet4")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          octet4().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.ChannelDescription2_TV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.ChannelDescription2_TV");
  }
}

void ChannelDescription2__TV::encode_text(Text_Buf& text_buf) const
{
field_elementIdentifier.encode_text(text_buf);
field_timeslotNumber.encode_text(text_buf);
field_channelTypeandTDMAOffset.encode_text(text_buf);
field_octet3.encode_text(text_buf);
field_octet4.encode_text(text_buf);
}

void ChannelDescription2__TV::decode_text(Text_Buf& text_buf)
{
field_elementIdentifier.decode_text(text_buf);
field_timeslotNumber.decode_text(text_buf);
field_channelTypeandTDMAOffset.decode_text(text_buf);
field_octet3.decode_text(text_buf);
field_octet4.decode_text(text_buf);
}

void ChannelDescription2__TV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void ChannelDescription2__TV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int ChannelDescription2__TV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_elementIdentifier.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT3_descr_.raw->forceomit);
  decoded_field_length = field_timeslotNumber.RAW_decode(General__Types::BIT3_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_2_force_omit(2, force_omit, General__Types::BIT5_descr_.raw->forceomit);
  decoded_field_length = field_channelTypeandTDMAOffset.RAW_decode(General__Types::BIT5_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_2_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_3_force_omit(3, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_octet3.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_3_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_4_force_omit(4, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_octet4.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_4_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int ChannelDescription2__TV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 5;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(5);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::OCT1_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT3_descr_.raw);
  myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, General__Types::BIT5_descr_.raw);
  myleaf.body.node.nodes[3] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 3, General__Types::OCT1_descr_.raw);
  myleaf.body.node.nodes[4] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 4, General__Types::OCT1_descr_.raw);
  encoded_length += field_elementIdentifier.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_timeslotNumber.RAW_encode(General__Types::BIT3_descr_, *myleaf.body.node.nodes[1]);
  encoded_length += field_channelTypeandTDMAOffset.RAW_encode(General__Types::BIT5_descr_, *myleaf.body.node.nodes[2]);
  encoded_length += field_octet3.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[3]);
  encoded_length += field_octet4.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[4]);
  return myleaf.length = encoded_length;
}

struct ChannelDescription2__TV_template::single_value_struct {
OCTETSTRING_template field_elementIdentifier;
BITSTRING_template field_timeslotNumber;
BITSTRING_template field_channelTypeandTDMAOffset;
OCTETSTRING_template field_octet3;
OCTETSTRING_template field_octet4;
};

void ChannelDescription2__TV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_elementIdentifier = ANY_VALUE;
single_value->field_timeslotNumber = ANY_VALUE;
single_value->field_channelTypeandTDMAOffset = ANY_VALUE;
single_value->field_octet3 = ANY_VALUE;
single_value->field_octet4 = ANY_VALUE;
}
}
}

void ChannelDescription2__TV_template::copy_value(const ChannelDescription2__TV& other_value)
{
single_value = new single_value_struct;
if (other_value.elementIdentifier().is_bound()) {
  single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
  single_value->field_elementIdentifier.clean_up();
}
if (other_value.timeslotNumber().is_bound()) {
  single_value->field_timeslotNumber = other_value.timeslotNumber();
} else {
  single_value->field_timeslotNumber.clean_up();
}
if (other_value.channelTypeandTDMAOffset().is_bound()) {
  single_value->field_channelTypeandTDMAOffset = other_value.channelTypeandTDMAOffset();
} else {
  single_value->field_channelTypeandTDMAOffset.clean_up();
}
if (other_value.octet3().is_bound()) {
  single_value->field_octet3 = other_value.octet3();
} else {
  single_value->field_octet3.clean_up();
}
if (other_value.octet4().is_bound()) {
  single_value->field_octet4 = other_value.octet4();
} else {
  single_value->field_octet4.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void ChannelDescription2__TV_template::copy_template(const ChannelDescription2__TV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.elementIdentifier().get_selection()) {
single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
single_value->field_elementIdentifier.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.timeslotNumber().get_selection()) {
single_value->field_timeslotNumber = other_value.timeslotNumber();
} else {
single_value->field_timeslotNumber.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.channelTypeandTDMAOffset().get_selection()) {
single_value->field_channelTypeandTDMAOffset = other_value.channelTypeandTDMAOffset();
} else {
single_value->field_channelTypeandTDMAOffset.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.octet3().get_selection()) {
single_value->field_octet3 = other_value.octet3();
} else {
single_value->field_octet3.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.octet4().get_selection()) {
single_value->field_octet4 = other_value.octet4();
} else {
single_value->field_octet4.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new ChannelDescription2__TV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new ChannelDescription2__TV_template(*other_value.implication_.precondition);
implication_.implied_template = new ChannelDescription2__TV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelDescription2_TV.");
break;
}
set_selection(other_value);
}

ChannelDescription2__TV_template::ChannelDescription2__TV_template()
{
}

ChannelDescription2__TV_template::ChannelDescription2__TV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

ChannelDescription2__TV_template::ChannelDescription2__TV_template(const ChannelDescription2__TV& other_value)
{
copy_value(other_value);
}

ChannelDescription2__TV_template::ChannelDescription2__TV_template(const OPTIONAL<ChannelDescription2__TV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ChannelDescription2__TV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.ChannelDescription2_TV from an unbound optional field.");
}
}

ChannelDescription2__TV_template::ChannelDescription2__TV_template(ChannelDescription2__TV_template* p_precondition, ChannelDescription2__TV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

ChannelDescription2__TV_template::ChannelDescription2__TV_template(Dynamic_Match_Interface<ChannelDescription2__TV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<ChannelDescription2__TV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

ChannelDescription2__TV_template::ChannelDescription2__TV_template(const ChannelDescription2__TV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

ChannelDescription2__TV_template::~ChannelDescription2__TV_template()
{
clean_up();
}

ChannelDescription2__TV_template& ChannelDescription2__TV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

ChannelDescription2__TV_template& ChannelDescription2__TV_template::operator=(const ChannelDescription2__TV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

ChannelDescription2__TV_template& ChannelDescription2__TV_template::operator=(const OPTIONAL<ChannelDescription2__TV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ChannelDescription2__TV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.ChannelDescription2_TV.");
}
return *this;
}

ChannelDescription2__TV_template& ChannelDescription2__TV_template::operator=(const ChannelDescription2__TV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean ChannelDescription2__TV_template::match(const ChannelDescription2__TV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.elementIdentifier().is_bound()) return FALSE;
if(!single_value->field_elementIdentifier.match(other_value.elementIdentifier(), legacy))return FALSE;
if(!other_value.timeslotNumber().is_bound()) return FALSE;
if(!single_value->field_timeslotNumber.match(other_value.timeslotNumber(), legacy))return FALSE;
if(!other_value.channelTypeandTDMAOffset().is_bound()) return FALSE;
if(!single_value->field_channelTypeandTDMAOffset.match(other_value.channelTypeandTDMAOffset(), legacy))return FALSE;
if(!other_value.octet3().is_bound()) return FALSE;
if(!single_value->field_octet3.match(other_value.octet3(), legacy))return FALSE;
if(!other_value.octet4().is_bound()) return FALSE;
if(!single_value->field_octet4.match(other_value.octet4(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelDescription2_TV.");
}
return FALSE;
}

boolean ChannelDescription2__TV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_elementIdentifier.is_bound()
 || single_value->field_timeslotNumber.is_bound()
 || single_value->field_channelTypeandTDMAOffset.is_bound()
 || single_value->field_octet3.is_bound()
 || single_value->field_octet4.is_bound();
}

boolean ChannelDescription2__TV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_elementIdentifier.is_value()
 && single_value->field_timeslotNumber.is_value()
 && single_value->field_channelTypeandTDMAOffset.is_value()
 && single_value->field_octet3.is_value()
 && single_value->field_octet4.is_value();
}

void ChannelDescription2__TV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

ChannelDescription2__TV ChannelDescription2__TV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.ChannelDescription2_TV.");
ChannelDescription2__TV ret_val;
if (single_value->field_elementIdentifier.is_bound()) {
ret_val.elementIdentifier() = single_value->field_elementIdentifier.valueof();
}
if (single_value->field_timeslotNumber.is_bound()) {
ret_val.timeslotNumber() = single_value->field_timeslotNumber.valueof();
}
if (single_value->field_channelTypeandTDMAOffset.is_bound()) {
ret_val.channelTypeandTDMAOffset() = single_value->field_channelTypeandTDMAOffset.valueof();
}
if (single_value->field_octet3.is_bound()) {
ret_val.octet3() = single_value->field_octet3.valueof();
}
if (single_value->field_octet4.is_bound()) {
ret_val.octet4() = single_value->field_octet4.valueof();
}
return ret_val;
}

void ChannelDescription2__TV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.ChannelDescription2_TV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new ChannelDescription2__TV_template[list_length];
}

ChannelDescription2__TV_template& ChannelDescription2__TV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.ChannelDescription2_TV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.ChannelDescription2_TV.");
return value_list.list_value[list_index];
}

OCTETSTRING_template& ChannelDescription2__TV_template::elementIdentifier()
{
set_specific();
return single_value->field_elementIdentifier;
}

const OCTETSTRING_template& ChannelDescription2__TV_template::elementIdentifier() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field elementIdentifier of a non-specific template of type @MobileL3_RRM_Types.ChannelDescription2_TV.");
return single_value->field_elementIdentifier;
}

BITSTRING_template& ChannelDescription2__TV_template::timeslotNumber()
{
set_specific();
return single_value->field_timeslotNumber;
}

const BITSTRING_template& ChannelDescription2__TV_template::timeslotNumber() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field timeslotNumber of a non-specific template of type @MobileL3_RRM_Types.ChannelDescription2_TV.");
return single_value->field_timeslotNumber;
}

BITSTRING_template& ChannelDescription2__TV_template::channelTypeandTDMAOffset()
{
set_specific();
return single_value->field_channelTypeandTDMAOffset;
}

const BITSTRING_template& ChannelDescription2__TV_template::channelTypeandTDMAOffset() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field channelTypeandTDMAOffset of a non-specific template of type @MobileL3_RRM_Types.ChannelDescription2_TV.");
return single_value->field_channelTypeandTDMAOffset;
}

OCTETSTRING_template& ChannelDescription2__TV_template::octet3()
{
set_specific();
return single_value->field_octet3;
}

const OCTETSTRING_template& ChannelDescription2__TV_template::octet3() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field octet3 of a non-specific template of type @MobileL3_RRM_Types.ChannelDescription2_TV.");
return single_value->field_octet3;
}

OCTETSTRING_template& ChannelDescription2__TV_template::octet4()
{
set_specific();
return single_value->field_octet4;
}

const OCTETSTRING_template& ChannelDescription2__TV_template::octet4() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field octet4 of a non-specific template of type @MobileL3_RRM_Types.ChannelDescription2_TV.");
return single_value->field_octet4;
}

int ChannelDescription2__TV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription2_TV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 5;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription2_TV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription2_TV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription2_TV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription2_TV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription2_TV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription2_TV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription2_TV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription2_TV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelDescription2_TV.");
  }
  return 0;
}

void ChannelDescription2__TV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log();
TTCN_Logger::log_event_str(", timeslotNumber := ");
single_value->field_timeslotNumber.log();
TTCN_Logger::log_event_str(", channelTypeandTDMAOffset := ");
single_value->field_channelTypeandTDMAOffset.log();
TTCN_Logger::log_event_str(", octet3 := ");
single_value->field_octet3.log();
TTCN_Logger::log_event_str(", octet4 := ");
single_value->field_octet4.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void ChannelDescription2__TV_template::log_match(const ChannelDescription2__TV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_elementIdentifier.match(match_value.elementIdentifier(), legacy)){
TTCN_Logger::log_logmatch_info(".elementIdentifier");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_timeslotNumber.match(match_value.timeslotNumber(), legacy)){
TTCN_Logger::log_logmatch_info(".timeslotNumber");
single_value->field_timeslotNumber.log_match(match_value.timeslotNumber(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_channelTypeandTDMAOffset.match(match_value.channelTypeandTDMAOffset(), legacy)){
TTCN_Logger::log_logmatch_info(".channelTypeandTDMAOffset");
single_value->field_channelTypeandTDMAOffset.log_match(match_value.channelTypeandTDMAOffset(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_octet3.match(match_value.octet3(), legacy)){
TTCN_Logger::log_logmatch_info(".octet3");
single_value->field_octet3.log_match(match_value.octet3(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_octet4.match(match_value.octet4(), legacy)){
TTCN_Logger::log_logmatch_info(".octet4");
single_value->field_octet4.log_match(match_value.octet4(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::log_event_str(", timeslotNumber := ");
single_value->field_timeslotNumber.log_match(match_value.timeslotNumber(), legacy);
TTCN_Logger::log_event_str(", channelTypeandTDMAOffset := ");
single_value->field_channelTypeandTDMAOffset.log_match(match_value.channelTypeandTDMAOffset(), legacy);
TTCN_Logger::log_event_str(", octet3 := ");
single_value->field_octet3.log_match(match_value.octet3(), legacy);
TTCN_Logger::log_event_str(", octet4 := ");
single_value->field_octet4.log_match(match_value.octet4(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void ChannelDescription2__TV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (timeslotNumber().is_bound()) timeslotNumber().set_implicit_omit();
if (channelTypeandTDMAOffset().is_bound()) channelTypeandTDMAOffset().set_implicit_omit();
if (octet3().is_bound()) octet3().set_implicit_omit();
if (octet4().is_bound()) octet4().set_implicit_omit();
}

void ChannelDescription2__TV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_elementIdentifier.encode_text(text_buf);
single_value->field_timeslotNumber.encode_text(text_buf);
single_value->field_channelTypeandTDMAOffset.encode_text(text_buf);
single_value->field_octet3.encode_text(text_buf);
single_value->field_octet4.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelDescription2_TV.");
}
}

void ChannelDescription2__TV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_elementIdentifier.decode_text(text_buf);
single_value->field_timeslotNumber.decode_text(text_buf);
single_value->field_channelTypeandTDMAOffset.decode_text(text_buf);
single_value->field_octet3.decode_text(text_buf);
single_value->field_octet4.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new ChannelDescription2__TV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.ChannelDescription2_TV.");
}
}

void ChannelDescription2__TV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    ChannelDescription2__TV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (5<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.ChannelDescription2_TV has 5 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) timeslotNumber().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) channelTypeandTDMAOffset().set_param(*param.get_elem(2));
    if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) octet3().set_param(*param.get_elem(3));
    if (param.get_size()>4 && param.get_elem(4)->get_type()!=Module_Param::MP_NotUsed) octet4().set_param(*param.get_elem(4));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "timeslotNumber")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          timeslotNumber().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "channelTypeandTDMAOffset")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          channelTypeandTDMAOffset().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "octet3")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          octet3().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "octet4")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          octet4().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.ChannelDescription2_TV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    ChannelDescription2__TV_template* precondition = new ChannelDescription2__TV_template;
    precondition->set_param(*param.get_elem(0));
    ChannelDescription2__TV_template* implied_template = new ChannelDescription2__TV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = ChannelDescription2__TV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.ChannelDescription2_TV");
  }
  is_ifpresent = param.get_ifpresent();
}

void ChannelDescription2__TV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_elementIdentifier.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription2_TV");
single_value->field_timeslotNumber.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription2_TV");
single_value->field_channelTypeandTDMAOffset.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription2_TV");
single_value->field_octet3.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription2_TV");
single_value->field_octet4.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription2_TV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription2_TV");
}

boolean ChannelDescription2__TV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean ChannelDescription2__TV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

ChannelDescription3__TV::ChannelDescription3__TV()
{
}

ChannelDescription3__TV::ChannelDescription3__TV(const OCTETSTRING& par_elementIdentifier,
    const OCTETSTRING& par_octet2,
    const OCTETSTRING& par_octet3)
  :   field_elementIdentifier(par_elementIdentifier),
  field_octet2(par_octet2),
  field_octet3(par_octet3)
{
}

ChannelDescription3__TV::ChannelDescription3__TV(const ChannelDescription3__TV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.ChannelDescription3_TV.");
if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
else field_elementIdentifier.clean_up();
if (other_value.octet2().is_bound()) field_octet2 = other_value.octet2();
else field_octet2.clean_up();
if (other_value.octet3().is_bound()) field_octet3 = other_value.octet3();
else field_octet3.clean_up();
}

void ChannelDescription3__TV::clean_up()
{
field_elementIdentifier.clean_up();
field_octet2.clean_up();
field_octet3.clean_up();
}

const TTCN_Typedescriptor_t* ChannelDescription3__TV::get_descriptor() const { return &ChannelDescription3__TV_descr_; }
ChannelDescription3__TV& ChannelDescription3__TV::operator=(const ChannelDescription3__TV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.ChannelDescription3_TV.");
  if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
  else field_elementIdentifier.clean_up();
  if (other_value.octet2().is_bound()) field_octet2 = other_value.octet2();
  else field_octet2.clean_up();
  if (other_value.octet3().is_bound()) field_octet3 = other_value.octet3();
  else field_octet3.clean_up();
}
return *this;
}

boolean ChannelDescription3__TV::operator==(const ChannelDescription3__TV& other_value) const
{
return field_elementIdentifier==other_value.field_elementIdentifier
  && field_octet2==other_value.field_octet2
  && field_octet3==other_value.field_octet3;
}

boolean ChannelDescription3__TV::is_bound() const
{
return (field_elementIdentifier.is_bound())
  || (field_octet2.is_bound())
  || (field_octet3.is_bound());
}
boolean ChannelDescription3__TV::is_value() const
{
return field_elementIdentifier.is_value()
  && field_octet2.is_value()
  && field_octet3.is_value();
}
void ChannelDescription3__TV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ elementIdentifier := ");
field_elementIdentifier.log();
TTCN_Logger::log_event_str(", octet2 := ");
field_octet2.log();
TTCN_Logger::log_event_str(", octet3 := ");
field_octet3.log();
TTCN_Logger::log_event_str(" }");
}

void ChannelDescription3__TV::set_implicit_omit()
{
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (octet2().is_bound()) octet2().set_implicit_omit();
if (octet3().is_bound()) octet3().set_implicit_omit();
}

void ChannelDescription3__TV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (3<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.ChannelDescription3_TV has 3 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) octet2().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) octet3().set_param(*param.get_elem(2));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "octet2")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          octet2().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "octet3")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          octet3().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.ChannelDescription3_TV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.ChannelDescription3_TV");
  }
}

void ChannelDescription3__TV::encode_text(Text_Buf& text_buf) const
{
field_elementIdentifier.encode_text(text_buf);
field_octet2.encode_text(text_buf);
field_octet3.encode_text(text_buf);
}

void ChannelDescription3__TV::decode_text(Text_Buf& text_buf)
{
field_elementIdentifier.decode_text(text_buf);
field_octet2.decode_text(text_buf);
field_octet3.decode_text(text_buf);
}

void ChannelDescription3__TV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void ChannelDescription3__TV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int ChannelDescription3__TV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_elementIdentifier.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_octet2.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_2_force_omit(2, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_octet3.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_2_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int ChannelDescription3__TV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 3;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(3);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::OCT1_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::OCT1_descr_.raw);
  myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, General__Types::OCT1_descr_.raw);
  encoded_length += field_elementIdentifier.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_octet2.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[1]);
  encoded_length += field_octet3.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[2]);
  return myleaf.length = encoded_length;
}

struct ChannelDescription3__TV_template::single_value_struct {
OCTETSTRING_template field_elementIdentifier;
OCTETSTRING_template field_octet2;
OCTETSTRING_template field_octet3;
};

void ChannelDescription3__TV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_elementIdentifier = ANY_VALUE;
single_value->field_octet2 = ANY_VALUE;
single_value->field_octet3 = ANY_VALUE;
}
}
}

void ChannelDescription3__TV_template::copy_value(const ChannelDescription3__TV& other_value)
{
single_value = new single_value_struct;
if (other_value.elementIdentifier().is_bound()) {
  single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
  single_value->field_elementIdentifier.clean_up();
}
if (other_value.octet2().is_bound()) {
  single_value->field_octet2 = other_value.octet2();
} else {
  single_value->field_octet2.clean_up();
}
if (other_value.octet3().is_bound()) {
  single_value->field_octet3 = other_value.octet3();
} else {
  single_value->field_octet3.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void ChannelDescription3__TV_template::copy_template(const ChannelDescription3__TV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.elementIdentifier().get_selection()) {
single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
single_value->field_elementIdentifier.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.octet2().get_selection()) {
single_value->field_octet2 = other_value.octet2();
} else {
single_value->field_octet2.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.octet3().get_selection()) {
single_value->field_octet3 = other_value.octet3();
} else {
single_value->field_octet3.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new ChannelDescription3__TV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new ChannelDescription3__TV_template(*other_value.implication_.precondition);
implication_.implied_template = new ChannelDescription3__TV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelDescription3_TV.");
break;
}
set_selection(other_value);
}

ChannelDescription3__TV_template::ChannelDescription3__TV_template()
{
}

ChannelDescription3__TV_template::ChannelDescription3__TV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

ChannelDescription3__TV_template::ChannelDescription3__TV_template(const ChannelDescription3__TV& other_value)
{
copy_value(other_value);
}

ChannelDescription3__TV_template::ChannelDescription3__TV_template(const OPTIONAL<ChannelDescription3__TV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ChannelDescription3__TV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.ChannelDescription3_TV from an unbound optional field.");
}
}

ChannelDescription3__TV_template::ChannelDescription3__TV_template(ChannelDescription3__TV_template* p_precondition, ChannelDescription3__TV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

ChannelDescription3__TV_template::ChannelDescription3__TV_template(Dynamic_Match_Interface<ChannelDescription3__TV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<ChannelDescription3__TV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

ChannelDescription3__TV_template::ChannelDescription3__TV_template(const ChannelDescription3__TV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

ChannelDescription3__TV_template::~ChannelDescription3__TV_template()
{
clean_up();
}

ChannelDescription3__TV_template& ChannelDescription3__TV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

ChannelDescription3__TV_template& ChannelDescription3__TV_template::operator=(const ChannelDescription3__TV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

ChannelDescription3__TV_template& ChannelDescription3__TV_template::operator=(const OPTIONAL<ChannelDescription3__TV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ChannelDescription3__TV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.ChannelDescription3_TV.");
}
return *this;
}

ChannelDescription3__TV_template& ChannelDescription3__TV_template::operator=(const ChannelDescription3__TV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean ChannelDescription3__TV_template::match(const ChannelDescription3__TV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.elementIdentifier().is_bound()) return FALSE;
if(!single_value->field_elementIdentifier.match(other_value.elementIdentifier(), legacy))return FALSE;
if(!other_value.octet2().is_bound()) return FALSE;
if(!single_value->field_octet2.match(other_value.octet2(), legacy))return FALSE;
if(!other_value.octet3().is_bound()) return FALSE;
if(!single_value->field_octet3.match(other_value.octet3(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelDescription3_TV.");
}
return FALSE;
}

boolean ChannelDescription3__TV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_elementIdentifier.is_bound()
 || single_value->field_octet2.is_bound()
 || single_value->field_octet3.is_bound();
}

boolean ChannelDescription3__TV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_elementIdentifier.is_value()
 && single_value->field_octet2.is_value()
 && single_value->field_octet3.is_value();
}

void ChannelDescription3__TV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

ChannelDescription3__TV ChannelDescription3__TV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.ChannelDescription3_TV.");
ChannelDescription3__TV ret_val;
if (single_value->field_elementIdentifier.is_bound()) {
ret_val.elementIdentifier() = single_value->field_elementIdentifier.valueof();
}
if (single_value->field_octet2.is_bound()) {
ret_val.octet2() = single_value->field_octet2.valueof();
}
if (single_value->field_octet3.is_bound()) {
ret_val.octet3() = single_value->field_octet3.valueof();
}
return ret_val;
}

void ChannelDescription3__TV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.ChannelDescription3_TV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new ChannelDescription3__TV_template[list_length];
}

ChannelDescription3__TV_template& ChannelDescription3__TV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.ChannelDescription3_TV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.ChannelDescription3_TV.");
return value_list.list_value[list_index];
}

OCTETSTRING_template& ChannelDescription3__TV_template::elementIdentifier()
{
set_specific();
return single_value->field_elementIdentifier;
}

const OCTETSTRING_template& ChannelDescription3__TV_template::elementIdentifier() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field elementIdentifier of a non-specific template of type @MobileL3_RRM_Types.ChannelDescription3_TV.");
return single_value->field_elementIdentifier;
}

OCTETSTRING_template& ChannelDescription3__TV_template::octet2()
{
set_specific();
return single_value->field_octet2;
}

const OCTETSTRING_template& ChannelDescription3__TV_template::octet2() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field octet2 of a non-specific template of type @MobileL3_RRM_Types.ChannelDescription3_TV.");
return single_value->field_octet2;
}

OCTETSTRING_template& ChannelDescription3__TV_template::octet3()
{
set_specific();
return single_value->field_octet3;
}

const OCTETSTRING_template& ChannelDescription3__TV_template::octet3() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field octet3 of a non-specific template of type @MobileL3_RRM_Types.ChannelDescription3_TV.");
return single_value->field_octet3;
}

int ChannelDescription3__TV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription3_TV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 3;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription3_TV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription3_TV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription3_TV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription3_TV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription3_TV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription3_TV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription3_TV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelDescription3_TV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelDescription3_TV.");
  }
  return 0;
}

void ChannelDescription3__TV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log();
TTCN_Logger::log_event_str(", octet2 := ");
single_value->field_octet2.log();
TTCN_Logger::log_event_str(", octet3 := ");
single_value->field_octet3.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void ChannelDescription3__TV_template::log_match(const ChannelDescription3__TV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_elementIdentifier.match(match_value.elementIdentifier(), legacy)){
TTCN_Logger::log_logmatch_info(".elementIdentifier");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_octet2.match(match_value.octet2(), legacy)){
TTCN_Logger::log_logmatch_info(".octet2");
single_value->field_octet2.log_match(match_value.octet2(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_octet3.match(match_value.octet3(), legacy)){
TTCN_Logger::log_logmatch_info(".octet3");
single_value->field_octet3.log_match(match_value.octet3(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::log_event_str(", octet2 := ");
single_value->field_octet2.log_match(match_value.octet2(), legacy);
TTCN_Logger::log_event_str(", octet3 := ");
single_value->field_octet3.log_match(match_value.octet3(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void ChannelDescription3__TV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (octet2().is_bound()) octet2().set_implicit_omit();
if (octet3().is_bound()) octet3().set_implicit_omit();
}

void ChannelDescription3__TV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_elementIdentifier.encode_text(text_buf);
single_value->field_octet2.encode_text(text_buf);
single_value->field_octet3.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelDescription3_TV.");
}
}

void ChannelDescription3__TV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_elementIdentifier.decode_text(text_buf);
single_value->field_octet2.decode_text(text_buf);
single_value->field_octet3.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new ChannelDescription3__TV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.ChannelDescription3_TV.");
}
}

void ChannelDescription3__TV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    ChannelDescription3__TV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (3<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.ChannelDescription3_TV has 3 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) octet2().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) octet3().set_param(*param.get_elem(2));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "octet2")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          octet2().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "octet3")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          octet3().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.ChannelDescription3_TV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    ChannelDescription3__TV_template* precondition = new ChannelDescription3__TV_template;
    precondition->set_param(*param.get_elem(0));
    ChannelDescription3__TV_template* implied_template = new ChannelDescription3__TV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = ChannelDescription3__TV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.ChannelDescription3_TV");
  }
  is_ifpresent = param.get_ifpresent();
}

void ChannelDescription3__TV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_elementIdentifier.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription3_TV");
single_value->field_octet2.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription3_TV");
single_value->field_octet3.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription3_TV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.ChannelDescription3_TV");
}

boolean ChannelDescription3__TV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean ChannelDescription3__TV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

ChannelMode__TV::ChannelMode__TV()
{
}

ChannelMode__TV::ChannelMode__TV(const OCTETSTRING& par_elementIdentifier,
    const OCTETSTRING& par_mode)
  :   field_elementIdentifier(par_elementIdentifier),
  field_mode(par_mode)
{
}

ChannelMode__TV::ChannelMode__TV(const ChannelMode__TV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.ChannelMode_TV.");
if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
else field_elementIdentifier.clean_up();
if (other_value.mode().is_bound()) field_mode = other_value.mode();
else field_mode.clean_up();
}

void ChannelMode__TV::clean_up()
{
field_elementIdentifier.clean_up();
field_mode.clean_up();
}

const TTCN_Typedescriptor_t* ChannelMode__TV::get_descriptor() const { return &ChannelMode__TV_descr_; }
ChannelMode__TV& ChannelMode__TV::operator=(const ChannelMode__TV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.ChannelMode_TV.");
  if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
  else field_elementIdentifier.clean_up();
  if (other_value.mode().is_bound()) field_mode = other_value.mode();
  else field_mode.clean_up();
}
return *this;
}

boolean ChannelMode__TV::operator==(const ChannelMode__TV& other_value) const
{
return field_elementIdentifier==other_value.field_elementIdentifier
  && field_mode==other_value.field_mode;
}

boolean ChannelMode__TV::is_bound() const
{
return (field_elementIdentifier.is_bound())
  || (field_mode.is_bound());
}
boolean ChannelMode__TV::is_value() const
{
return field_elementIdentifier.is_value()
  && field_mode.is_value();
}
void ChannelMode__TV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ elementIdentifier := ");
field_elementIdentifier.log();
TTCN_Logger::log_event_str(", mode := ");
field_mode.log();
TTCN_Logger::log_event_str(" }");
}

void ChannelMode__TV::set_implicit_omit()
{
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (mode().is_bound()) mode().set_implicit_omit();
}

void ChannelMode__TV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.ChannelMode_TV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) mode().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "mode")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          mode().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.ChannelMode_TV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.ChannelMode_TV");
  }
}

void ChannelMode__TV::encode_text(Text_Buf& text_buf) const
{
field_elementIdentifier.encode_text(text_buf);
field_mode.encode_text(text_buf);
}

void ChannelMode__TV::decode_text(Text_Buf& text_buf)
{
field_elementIdentifier.decode_text(text_buf);
field_mode.decode_text(text_buf);
}

void ChannelMode__TV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void ChannelMode__TV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int ChannelMode__TV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_elementIdentifier.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_mode.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int ChannelMode__TV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::OCT1_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::OCT1_descr_.raw);
  encoded_length += field_elementIdentifier.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_mode.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct ChannelMode__TV_template::single_value_struct {
OCTETSTRING_template field_elementIdentifier;
OCTETSTRING_template field_mode;
};

void ChannelMode__TV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_elementIdentifier = ANY_VALUE;
single_value->field_mode = ANY_VALUE;
}
}
}

void ChannelMode__TV_template::copy_value(const ChannelMode__TV& other_value)
{
single_value = new single_value_struct;
if (other_value.elementIdentifier().is_bound()) {
  single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
  single_value->field_elementIdentifier.clean_up();
}
if (other_value.mode().is_bound()) {
  single_value->field_mode = other_value.mode();
} else {
  single_value->field_mode.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void ChannelMode__TV_template::copy_template(const ChannelMode__TV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.elementIdentifier().get_selection()) {
single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
single_value->field_elementIdentifier.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.mode().get_selection()) {
single_value->field_mode = other_value.mode();
} else {
single_value->field_mode.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new ChannelMode__TV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new ChannelMode__TV_template(*other_value.implication_.precondition);
implication_.implied_template = new ChannelMode__TV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelMode_TV.");
break;
}
set_selection(other_value);
}

ChannelMode__TV_template::ChannelMode__TV_template()
{
}

ChannelMode__TV_template::ChannelMode__TV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

ChannelMode__TV_template::ChannelMode__TV_template(const ChannelMode__TV& other_value)
{
copy_value(other_value);
}

ChannelMode__TV_template::ChannelMode__TV_template(const OPTIONAL<ChannelMode__TV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ChannelMode__TV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.ChannelMode_TV from an unbound optional field.");
}
}

ChannelMode__TV_template::ChannelMode__TV_template(ChannelMode__TV_template* p_precondition, ChannelMode__TV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

ChannelMode__TV_template::ChannelMode__TV_template(Dynamic_Match_Interface<ChannelMode__TV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<ChannelMode__TV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

ChannelMode__TV_template::ChannelMode__TV_template(const ChannelMode__TV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

ChannelMode__TV_template::~ChannelMode__TV_template()
{
clean_up();
}

ChannelMode__TV_template& ChannelMode__TV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

ChannelMode__TV_template& ChannelMode__TV_template::operator=(const ChannelMode__TV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

ChannelMode__TV_template& ChannelMode__TV_template::operator=(const OPTIONAL<ChannelMode__TV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ChannelMode__TV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.ChannelMode_TV.");
}
return *this;
}

ChannelMode__TV_template& ChannelMode__TV_template::operator=(const ChannelMode__TV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean ChannelMode__TV_template::match(const ChannelMode__TV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.elementIdentifier().is_bound()) return FALSE;
if(!single_value->field_elementIdentifier.match(other_value.elementIdentifier(), legacy))return FALSE;
if(!other_value.mode().is_bound()) return FALSE;
if(!single_value->field_mode.match(other_value.mode(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelMode_TV.");
}
return FALSE;
}

boolean ChannelMode__TV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_elementIdentifier.is_bound()
 || single_value->field_mode.is_bound();
}

boolean ChannelMode__TV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_elementIdentifier.is_value()
 && single_value->field_mode.is_value();
}

void ChannelMode__TV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

ChannelMode__TV ChannelMode__TV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.ChannelMode_TV.");
ChannelMode__TV ret_val;
if (single_value->field_elementIdentifier.is_bound()) {
ret_val.elementIdentifier() = single_value->field_elementIdentifier.valueof();
}
if (single_value->field_mode.is_bound()) {
ret_val.mode() = single_value->field_mode.valueof();
}
return ret_val;
}

void ChannelMode__TV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.ChannelMode_TV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new ChannelMode__TV_template[list_length];
}

ChannelMode__TV_template& ChannelMode__TV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.ChannelMode_TV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.ChannelMode_TV.");
return value_list.list_value[list_index];
}

OCTETSTRING_template& ChannelMode__TV_template::elementIdentifier()
{
set_specific();
return single_value->field_elementIdentifier;
}

const OCTETSTRING_template& ChannelMode__TV_template::elementIdentifier() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field elementIdentifier of a non-specific template of type @MobileL3_RRM_Types.ChannelMode_TV.");
return single_value->field_elementIdentifier;
}

OCTETSTRING_template& ChannelMode__TV_template::mode()
{
set_specific();
return single_value->field_mode;
}

const OCTETSTRING_template& ChannelMode__TV_template::mode() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field mode of a non-specific template of type @MobileL3_RRM_Types.ChannelMode_TV.");
return single_value->field_mode;
}

int ChannelMode__TV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode_TV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode_TV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode_TV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode_TV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode_TV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode_TV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode_TV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode_TV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode_TV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelMode_TV.");
  }
  return 0;
}

void ChannelMode__TV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log();
TTCN_Logger::log_event_str(", mode := ");
single_value->field_mode.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void ChannelMode__TV_template::log_match(const ChannelMode__TV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_elementIdentifier.match(match_value.elementIdentifier(), legacy)){
TTCN_Logger::log_logmatch_info(".elementIdentifier");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_mode.match(match_value.mode(), legacy)){
TTCN_Logger::log_logmatch_info(".mode");
single_value->field_mode.log_match(match_value.mode(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::log_event_str(", mode := ");
single_value->field_mode.log_match(match_value.mode(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void ChannelMode__TV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (mode().is_bound()) mode().set_implicit_omit();
}

void ChannelMode__TV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_elementIdentifier.encode_text(text_buf);
single_value->field_mode.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelMode_TV.");
}
}

void ChannelMode__TV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_elementIdentifier.decode_text(text_buf);
single_value->field_mode.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new ChannelMode__TV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.ChannelMode_TV.");
}
}

void ChannelMode__TV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    ChannelMode__TV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.ChannelMode_TV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) mode().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "mode")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          mode().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.ChannelMode_TV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    ChannelMode__TV_template* precondition = new ChannelMode__TV_template;
    precondition->set_param(*param.get_elem(0));
    ChannelMode__TV_template* implied_template = new ChannelMode__TV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = ChannelMode__TV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.ChannelMode_TV");
  }
  is_ifpresent = param.get_ifpresent();
}

void ChannelMode__TV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_elementIdentifier.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelMode_TV");
single_value->field_mode.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelMode_TV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.ChannelMode_TV");
}

boolean ChannelMode__TV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean ChannelMode__TV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

ChannelMode__V::ChannelMode__V()
{
}

ChannelMode__V::ChannelMode__V(const OCTETSTRING& par_mode)
  :   field_mode(par_mode)
{
}

ChannelMode__V::ChannelMode__V(const ChannelMode__V& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.ChannelMode_V.");
if (other_value.mode().is_bound()) field_mode = other_value.mode();
else field_mode.clean_up();
}

void ChannelMode__V::clean_up()
{
field_mode.clean_up();
}

const TTCN_Typedescriptor_t* ChannelMode__V::get_descriptor() const { return &ChannelMode__V_descr_; }
ChannelMode__V& ChannelMode__V::operator=(const ChannelMode__V& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.ChannelMode_V.");
  if (other_value.mode().is_bound()) field_mode = other_value.mode();
  else field_mode.clean_up();
}
return *this;
}

boolean ChannelMode__V::operator==(const ChannelMode__V& other_value) const
{
return field_mode==other_value.field_mode;
}

boolean ChannelMode__V::is_bound() const
{
return (field_mode.is_bound());
}
boolean ChannelMode__V::is_value() const
{
return field_mode.is_value();
}
void ChannelMode__V::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ mode := ");
field_mode.log();
TTCN_Logger::log_event_str(" }");
}

void ChannelMode__V::set_implicit_omit()
{
if (mode().is_bound()) mode().set_implicit_omit();
}

void ChannelMode__V::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (1<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.ChannelMode_V has 1 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) mode().set_param(*param.get_elem(0));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "mode")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          mode().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.ChannelMode_V: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.ChannelMode_V");
  }
}

void ChannelMode__V::encode_text(Text_Buf& text_buf) const
{
field_mode.encode_text(text_buf);
}

void ChannelMode__V::decode_text(Text_Buf& text_buf)
{
field_mode.decode_text(text_buf);
}

void ChannelMode__V::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void ChannelMode__V::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int ChannelMode__V::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_mode.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int ChannelMode__V::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 1;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(1);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::OCT1_descr_.raw);
  encoded_length += field_mode.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[0]);
  return myleaf.length = encoded_length;
}

struct ChannelMode__V_template::single_value_struct {
OCTETSTRING_template field_mode;
};

void ChannelMode__V_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_mode = ANY_VALUE;
}
}
}

void ChannelMode__V_template::copy_value(const ChannelMode__V& other_value)
{
single_value = new single_value_struct;
if (other_value.mode().is_bound()) {
  single_value->field_mode = other_value.mode();
} else {
  single_value->field_mode.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void ChannelMode__V_template::copy_template(const ChannelMode__V_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.mode().get_selection()) {
single_value->field_mode = other_value.mode();
} else {
single_value->field_mode.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new ChannelMode__V_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new ChannelMode__V_template(*other_value.implication_.precondition);
implication_.implied_template = new ChannelMode__V_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelMode_V.");
break;
}
set_selection(other_value);
}

ChannelMode__V_template::ChannelMode__V_template()
{
}

ChannelMode__V_template::ChannelMode__V_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

ChannelMode__V_template::ChannelMode__V_template(const ChannelMode__V& other_value)
{
copy_value(other_value);
}

ChannelMode__V_template::ChannelMode__V_template(const OPTIONAL<ChannelMode__V>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ChannelMode__V&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.ChannelMode_V from an unbound optional field.");
}
}

ChannelMode__V_template::ChannelMode__V_template(ChannelMode__V_template* p_precondition, ChannelMode__V_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

ChannelMode__V_template::ChannelMode__V_template(Dynamic_Match_Interface<ChannelMode__V>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<ChannelMode__V>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

ChannelMode__V_template::ChannelMode__V_template(const ChannelMode__V_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

ChannelMode__V_template::~ChannelMode__V_template()
{
clean_up();
}

ChannelMode__V_template& ChannelMode__V_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

ChannelMode__V_template& ChannelMode__V_template::operator=(const ChannelMode__V& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

ChannelMode__V_template& ChannelMode__V_template::operator=(const OPTIONAL<ChannelMode__V>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ChannelMode__V&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.ChannelMode_V.");
}
return *this;
}

ChannelMode__V_template& ChannelMode__V_template::operator=(const ChannelMode__V_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean ChannelMode__V_template::match(const ChannelMode__V& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.mode().is_bound()) return FALSE;
if(!single_value->field_mode.match(other_value.mode(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelMode_V.");
}
return FALSE;
}

boolean ChannelMode__V_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_mode.is_bound();
}

boolean ChannelMode__V_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_mode.is_value();
}

void ChannelMode__V_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

ChannelMode__V ChannelMode__V_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.ChannelMode_V.");
ChannelMode__V ret_val;
if (single_value->field_mode.is_bound()) {
ret_val.mode() = single_value->field_mode.valueof();
}
return ret_val;
}

void ChannelMode__V_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.ChannelMode_V.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new ChannelMode__V_template[list_length];
}

ChannelMode__V_template& ChannelMode__V_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.ChannelMode_V.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.ChannelMode_V.");
return value_list.list_value[list_index];
}

OCTETSTRING_template& ChannelMode__V_template::mode()
{
set_specific();
return single_value->field_mode;
}

const OCTETSTRING_template& ChannelMode__V_template::mode() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field mode of a non-specific template of type @MobileL3_RRM_Types.ChannelMode_V.");
return single_value->field_mode;
}

int ChannelMode__V_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode_V which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 1;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode_V containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode_V containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode_V containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode_V containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode_V containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode_V containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode_V containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode_V containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelMode_V.");
  }
  return 0;
}

void ChannelMode__V_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ mode := ");
single_value->field_mode.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void ChannelMode__V_template::log_match(const ChannelMode__V& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_mode.match(match_value.mode(), legacy)){
TTCN_Logger::log_logmatch_info(".mode");
single_value->field_mode.log_match(match_value.mode(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ mode := ");
single_value->field_mode.log_match(match_value.mode(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void ChannelMode__V_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (mode().is_bound()) mode().set_implicit_omit();
}

void ChannelMode__V_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_mode.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelMode_V.");
}
}

void ChannelMode__V_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_mode.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new ChannelMode__V_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.ChannelMode_V.");
}
}

void ChannelMode__V_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    ChannelMode__V_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (1<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.ChannelMode_V has 1 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) mode().set_param(*param.get_elem(0));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "mode")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          mode().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.ChannelMode_V: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    ChannelMode__V_template* precondition = new ChannelMode__V_template;
    precondition->set_param(*param.get_elem(0));
    ChannelMode__V_template* implied_template = new ChannelMode__V_template;
    implied_template->set_param(*param.get_elem(1));
    *this = ChannelMode__V_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.ChannelMode_V");
  }
  is_ifpresent = param.get_ifpresent();
}

void ChannelMode__V_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_mode.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelMode_V");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.ChannelMode_V");
}

boolean ChannelMode__V_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean ChannelMode__V_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

ChannelMode2__TV::ChannelMode2__TV()
{
}

ChannelMode2__TV::ChannelMode2__TV(const OCTETSTRING& par_elementIdentifier,
    const OCTETSTRING& par_mode)
  :   field_elementIdentifier(par_elementIdentifier),
  field_mode(par_mode)
{
}

ChannelMode2__TV::ChannelMode2__TV(const ChannelMode2__TV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.ChannelMode2_TV.");
if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
else field_elementIdentifier.clean_up();
if (other_value.mode().is_bound()) field_mode = other_value.mode();
else field_mode.clean_up();
}

void ChannelMode2__TV::clean_up()
{
field_elementIdentifier.clean_up();
field_mode.clean_up();
}

const TTCN_Typedescriptor_t* ChannelMode2__TV::get_descriptor() const { return &ChannelMode2__TV_descr_; }
ChannelMode2__TV& ChannelMode2__TV::operator=(const ChannelMode2__TV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.ChannelMode2_TV.");
  if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
  else field_elementIdentifier.clean_up();
  if (other_value.mode().is_bound()) field_mode = other_value.mode();
  else field_mode.clean_up();
}
return *this;
}

boolean ChannelMode2__TV::operator==(const ChannelMode2__TV& other_value) const
{
return field_elementIdentifier==other_value.field_elementIdentifier
  && field_mode==other_value.field_mode;
}

boolean ChannelMode2__TV::is_bound() const
{
return (field_elementIdentifier.is_bound())
  || (field_mode.is_bound());
}
boolean ChannelMode2__TV::is_value() const
{
return field_elementIdentifier.is_value()
  && field_mode.is_value();
}
void ChannelMode2__TV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ elementIdentifier := ");
field_elementIdentifier.log();
TTCN_Logger::log_event_str(", mode := ");
field_mode.log();
TTCN_Logger::log_event_str(" }");
}

void ChannelMode2__TV::set_implicit_omit()
{
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (mode().is_bound()) mode().set_implicit_omit();
}

void ChannelMode2__TV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.ChannelMode2_TV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) mode().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "mode")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          mode().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.ChannelMode2_TV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.ChannelMode2_TV");
  }
}

void ChannelMode2__TV::encode_text(Text_Buf& text_buf) const
{
field_elementIdentifier.encode_text(text_buf);
field_mode.encode_text(text_buf);
}

void ChannelMode2__TV::decode_text(Text_Buf& text_buf)
{
field_elementIdentifier.decode_text(text_buf);
field_mode.decode_text(text_buf);
}

void ChannelMode2__TV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void ChannelMode2__TV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int ChannelMode2__TV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_elementIdentifier.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_mode.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int ChannelMode2__TV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::OCT1_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::OCT1_descr_.raw);
  encoded_length += field_elementIdentifier.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_mode.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct ChannelMode2__TV_template::single_value_struct {
OCTETSTRING_template field_elementIdentifier;
OCTETSTRING_template field_mode;
};

void ChannelMode2__TV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_elementIdentifier = ANY_VALUE;
single_value->field_mode = ANY_VALUE;
}
}
}

void ChannelMode2__TV_template::copy_value(const ChannelMode2__TV& other_value)
{
single_value = new single_value_struct;
if (other_value.elementIdentifier().is_bound()) {
  single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
  single_value->field_elementIdentifier.clean_up();
}
if (other_value.mode().is_bound()) {
  single_value->field_mode = other_value.mode();
} else {
  single_value->field_mode.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void ChannelMode2__TV_template::copy_template(const ChannelMode2__TV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.elementIdentifier().get_selection()) {
single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
single_value->field_elementIdentifier.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.mode().get_selection()) {
single_value->field_mode = other_value.mode();
} else {
single_value->field_mode.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new ChannelMode2__TV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new ChannelMode2__TV_template(*other_value.implication_.precondition);
implication_.implied_template = new ChannelMode2__TV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelMode2_TV.");
break;
}
set_selection(other_value);
}

ChannelMode2__TV_template::ChannelMode2__TV_template()
{
}

ChannelMode2__TV_template::ChannelMode2__TV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

ChannelMode2__TV_template::ChannelMode2__TV_template(const ChannelMode2__TV& other_value)
{
copy_value(other_value);
}

ChannelMode2__TV_template::ChannelMode2__TV_template(const OPTIONAL<ChannelMode2__TV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ChannelMode2__TV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.ChannelMode2_TV from an unbound optional field.");
}
}

ChannelMode2__TV_template::ChannelMode2__TV_template(ChannelMode2__TV_template* p_precondition, ChannelMode2__TV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

ChannelMode2__TV_template::ChannelMode2__TV_template(Dynamic_Match_Interface<ChannelMode2__TV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<ChannelMode2__TV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

ChannelMode2__TV_template::ChannelMode2__TV_template(const ChannelMode2__TV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

ChannelMode2__TV_template::~ChannelMode2__TV_template()
{
clean_up();
}

ChannelMode2__TV_template& ChannelMode2__TV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

ChannelMode2__TV_template& ChannelMode2__TV_template::operator=(const ChannelMode2__TV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

ChannelMode2__TV_template& ChannelMode2__TV_template::operator=(const OPTIONAL<ChannelMode2__TV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ChannelMode2__TV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.ChannelMode2_TV.");
}
return *this;
}

ChannelMode2__TV_template& ChannelMode2__TV_template::operator=(const ChannelMode2__TV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean ChannelMode2__TV_template::match(const ChannelMode2__TV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.elementIdentifier().is_bound()) return FALSE;
if(!single_value->field_elementIdentifier.match(other_value.elementIdentifier(), legacy))return FALSE;
if(!other_value.mode().is_bound()) return FALSE;
if(!single_value->field_mode.match(other_value.mode(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelMode2_TV.");
}
return FALSE;
}

boolean ChannelMode2__TV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_elementIdentifier.is_bound()
 || single_value->field_mode.is_bound();
}

boolean ChannelMode2__TV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_elementIdentifier.is_value()
 && single_value->field_mode.is_value();
}

void ChannelMode2__TV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

ChannelMode2__TV ChannelMode2__TV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.ChannelMode2_TV.");
ChannelMode2__TV ret_val;
if (single_value->field_elementIdentifier.is_bound()) {
ret_val.elementIdentifier() = single_value->field_elementIdentifier.valueof();
}
if (single_value->field_mode.is_bound()) {
ret_val.mode() = single_value->field_mode.valueof();
}
return ret_val;
}

void ChannelMode2__TV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.ChannelMode2_TV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new ChannelMode2__TV_template[list_length];
}

ChannelMode2__TV_template& ChannelMode2__TV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.ChannelMode2_TV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.ChannelMode2_TV.");
return value_list.list_value[list_index];
}

OCTETSTRING_template& ChannelMode2__TV_template::elementIdentifier()
{
set_specific();
return single_value->field_elementIdentifier;
}

const OCTETSTRING_template& ChannelMode2__TV_template::elementIdentifier() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field elementIdentifier of a non-specific template of type @MobileL3_RRM_Types.ChannelMode2_TV.");
return single_value->field_elementIdentifier;
}

OCTETSTRING_template& ChannelMode2__TV_template::mode()
{
set_specific();
return single_value->field_mode;
}

const OCTETSTRING_template& ChannelMode2__TV_template::mode() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field mode of a non-specific template of type @MobileL3_RRM_Types.ChannelMode2_TV.");
return single_value->field_mode;
}

int ChannelMode2__TV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode2_TV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode2_TV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode2_TV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode2_TV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode2_TV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode2_TV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode2_TV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode2_TV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelMode2_TV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelMode2_TV.");
  }
  return 0;
}

void ChannelMode2__TV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log();
TTCN_Logger::log_event_str(", mode := ");
single_value->field_mode.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void ChannelMode2__TV_template::log_match(const ChannelMode2__TV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_elementIdentifier.match(match_value.elementIdentifier(), legacy)){
TTCN_Logger::log_logmatch_info(".elementIdentifier");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_mode.match(match_value.mode(), legacy)){
TTCN_Logger::log_logmatch_info(".mode");
single_value->field_mode.log_match(match_value.mode(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::log_event_str(", mode := ");
single_value->field_mode.log_match(match_value.mode(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void ChannelMode2__TV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (mode().is_bound()) mode().set_implicit_omit();
}

void ChannelMode2__TV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_elementIdentifier.encode_text(text_buf);
single_value->field_mode.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelMode2_TV.");
}
}

void ChannelMode2__TV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_elementIdentifier.decode_text(text_buf);
single_value->field_mode.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new ChannelMode2__TV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.ChannelMode2_TV.");
}
}

void ChannelMode2__TV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    ChannelMode2__TV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.ChannelMode2_TV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) mode().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "mode")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          mode().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.ChannelMode2_TV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    ChannelMode2__TV_template* precondition = new ChannelMode2__TV_template;
    precondition->set_param(*param.get_elem(0));
    ChannelMode2__TV_template* implied_template = new ChannelMode2__TV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = ChannelMode2__TV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.ChannelMode2_TV");
  }
  is_ifpresent = param.get_ifpresent();
}

void ChannelMode2__TV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_elementIdentifier.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelMode2_TV");
single_value->field_mode.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelMode2_TV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.ChannelMode2_TV");
}

boolean ChannelMode2__TV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean ChannelMode2__TV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

UTRAN__Classmark__LV::UTRAN__Classmark__LV()
{
}

UTRAN__Classmark__LV::UTRAN__Classmark__LV(const INTEGER& par_lengthIndicator,
    const OCTETSTRING& par_uTRAN__ClassmarkValue)
  :   field_lengthIndicator(par_lengthIndicator),
  field_uTRAN__ClassmarkValue(par_uTRAN__ClassmarkValue)
{
}

UTRAN__Classmark__LV::UTRAN__Classmark__LV(const UTRAN__Classmark__LV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.UTRAN_Classmark_LV.");
if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
else field_lengthIndicator.clean_up();
if (other_value.uTRAN__ClassmarkValue().is_bound()) field_uTRAN__ClassmarkValue = other_value.uTRAN__ClassmarkValue();
else field_uTRAN__ClassmarkValue.clean_up();
}

void UTRAN__Classmark__LV::clean_up()
{
field_lengthIndicator.clean_up();
field_uTRAN__ClassmarkValue.clean_up();
}

const TTCN_Typedescriptor_t* UTRAN__Classmark__LV::get_descriptor() const { return &UTRAN__Classmark__LV_descr_; }
UTRAN__Classmark__LV& UTRAN__Classmark__LV::operator=(const UTRAN__Classmark__LV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.UTRAN_Classmark_LV.");
  if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
  else field_lengthIndicator.clean_up();
  if (other_value.uTRAN__ClassmarkValue().is_bound()) field_uTRAN__ClassmarkValue = other_value.uTRAN__ClassmarkValue();
  else field_uTRAN__ClassmarkValue.clean_up();
}
return *this;
}

boolean UTRAN__Classmark__LV::operator==(const UTRAN__Classmark__LV& other_value) const
{
return field_lengthIndicator==other_value.field_lengthIndicator
  && field_uTRAN__ClassmarkValue==other_value.field_uTRAN__ClassmarkValue;
}

boolean UTRAN__Classmark__LV::is_bound() const
{
return (field_lengthIndicator.is_bound())
  || (field_uTRAN__ClassmarkValue.is_bound());
}
boolean UTRAN__Classmark__LV::is_value() const
{
return field_lengthIndicator.is_value()
  && field_uTRAN__ClassmarkValue.is_value();
}
void UTRAN__Classmark__LV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ lengthIndicator := ");
field_lengthIndicator.log();
TTCN_Logger::log_event_str(", uTRAN_ClassmarkValue := ");
field_uTRAN__ClassmarkValue.log();
TTCN_Logger::log_event_str(" }");
}

void UTRAN__Classmark__LV::set_implicit_omit()
{
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (uTRAN__ClassmarkValue().is_bound()) uTRAN__ClassmarkValue().set_implicit_omit();
}

void UTRAN__Classmark__LV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.UTRAN_Classmark_LV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) uTRAN__ClassmarkValue().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "uTRAN_ClassmarkValue")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          uTRAN__ClassmarkValue().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.UTRAN_Classmark_LV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.UTRAN_Classmark_LV");
  }
}

void UTRAN__Classmark__LV::encode_text(Text_Buf& text_buf) const
{
field_lengthIndicator.encode_text(text_buf);
field_uTRAN__ClassmarkValue.encode_text(text_buf);
}

void UTRAN__Classmark__LV::decode_text(Text_Buf& text_buf)
{
field_lengthIndicator.decode_text(text_buf);
field_uTRAN__ClassmarkValue.decode_text(text_buf);
}

void UTRAN__Classmark__LV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void UTRAN__Classmark__LV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int UTRAN__Classmark__LV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  int value_of_length_field0 = 0;
  RAW_Force_Omit field_0_force_omit(0, force_omit, UTRAN__Classmark__LV_lengthIndicator_descr_.raw->forceomit);
  decoded_field_length = field_lengthIndicator.RAW_decode(UTRAN__Classmark__LV_lengthIndicator_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  INTEGER tmp0 = field_lengthIndicator.convert_to_Integer(UTRAN__Classmark__LV_lengthIndicator_descr_);
  field_lengthIndicator = tmp0;
  value_of_length_field0 += tmp0.get_long_long_val() * 8;
  RAW_Force_Omit field_1_force_omit(1, force_omit, OCTETSTRING_descr_.raw->forceomit);
  decoded_field_length = field_uTRAN__ClassmarkValue.RAW_decode(OCTETSTRING_descr_, p_buf, min_of_ints(2, limit, value_of_length_field0), local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  value_of_length_field0 -= decoded_field_length;
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int UTRAN__Classmark__LV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, UTRAN__Classmark__LV_lengthIndicator_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, OCTETSTRING_descr_.raw);
  encoded_length += 8;
  myleaf.body.node.nodes[0]->calc = CALC_LENGTH;
  myleaf.body.node.nodes[0]->coding_descr = &UTRAN__Classmark__LV_lengthIndicator_descr_;
  myleaf.body.node.nodes[0]->calcof.lengthto.num_of_fields = 1;
  myleaf.body.node.nodes[0]->calcof.lengthto.unit = 8;
  myleaf.body.node.nodes[0]->calcof.lengthto.offset = 0;
  myleaf.body.node.nodes[0]->calcof.lengthto.fields = init_lengthto_fields_list(1);
  myleaf.body.node.nodes[0]->length = 8;
  myleaf.body.node.nodes[0]->calcof.lengthto.fields[0].level = myleaf.body.node.nodes[1]->curr_pos.level;
  myleaf.body.node.nodes[0]->calcof.lengthto.fields[0].pos = myleaf.body.node.nodes[1]->curr_pos.pos;
  encoded_length += field_uTRAN__ClassmarkValue.RAW_encode(OCTETSTRING_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct UTRAN__Classmark__LV_template::single_value_struct {
INTEGER_template field_lengthIndicator;
OCTETSTRING_template field_uTRAN__ClassmarkValue;
};

void UTRAN__Classmark__LV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_lengthIndicator = ANY_VALUE;
single_value->field_uTRAN__ClassmarkValue = ANY_VALUE;
}
}
}

void UTRAN__Classmark__LV_template::copy_value(const UTRAN__Classmark__LV& other_value)
{
single_value = new single_value_struct;
if (other_value.lengthIndicator().is_bound()) {
  single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
  single_value->field_lengthIndicator.clean_up();
}
if (other_value.uTRAN__ClassmarkValue().is_bound()) {
  single_value->field_uTRAN__ClassmarkValue = other_value.uTRAN__ClassmarkValue();
} else {
  single_value->field_uTRAN__ClassmarkValue.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void UTRAN__Classmark__LV_template::copy_template(const UTRAN__Classmark__LV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.lengthIndicator().get_selection()) {
single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
single_value->field_lengthIndicator.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.uTRAN__ClassmarkValue().get_selection()) {
single_value->field_uTRAN__ClassmarkValue = other_value.uTRAN__ClassmarkValue();
} else {
single_value->field_uTRAN__ClassmarkValue.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new UTRAN__Classmark__LV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new UTRAN__Classmark__LV_template(*other_value.implication_.precondition);
implication_.implied_template = new UTRAN__Classmark__LV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.UTRAN_Classmark_LV.");
break;
}
set_selection(other_value);
}

UTRAN__Classmark__LV_template::UTRAN__Classmark__LV_template()
{
}

UTRAN__Classmark__LV_template::UTRAN__Classmark__LV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

UTRAN__Classmark__LV_template::UTRAN__Classmark__LV_template(const UTRAN__Classmark__LV& other_value)
{
copy_value(other_value);
}

UTRAN__Classmark__LV_template::UTRAN__Classmark__LV_template(const OPTIONAL<UTRAN__Classmark__LV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const UTRAN__Classmark__LV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.UTRAN_Classmark_LV from an unbound optional field.");
}
}

UTRAN__Classmark__LV_template::UTRAN__Classmark__LV_template(UTRAN__Classmark__LV_template* p_precondition, UTRAN__Classmark__LV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

UTRAN__Classmark__LV_template::UTRAN__Classmark__LV_template(Dynamic_Match_Interface<UTRAN__Classmark__LV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<UTRAN__Classmark__LV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

UTRAN__Classmark__LV_template::UTRAN__Classmark__LV_template(const UTRAN__Classmark__LV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

UTRAN__Classmark__LV_template::~UTRAN__Classmark__LV_template()
{
clean_up();
}

UTRAN__Classmark__LV_template& UTRAN__Classmark__LV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

UTRAN__Classmark__LV_template& UTRAN__Classmark__LV_template::operator=(const UTRAN__Classmark__LV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

UTRAN__Classmark__LV_template& UTRAN__Classmark__LV_template::operator=(const OPTIONAL<UTRAN__Classmark__LV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const UTRAN__Classmark__LV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.UTRAN_Classmark_LV.");
}
return *this;
}

UTRAN__Classmark__LV_template& UTRAN__Classmark__LV_template::operator=(const UTRAN__Classmark__LV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean UTRAN__Classmark__LV_template::match(const UTRAN__Classmark__LV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.lengthIndicator().is_bound()) return FALSE;
if(!single_value->field_lengthIndicator.match(other_value.lengthIndicator(), legacy))return FALSE;
if(!other_value.uTRAN__ClassmarkValue().is_bound()) return FALSE;
if(!single_value->field_uTRAN__ClassmarkValue.match(other_value.uTRAN__ClassmarkValue(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.UTRAN_Classmark_LV.");
}
return FALSE;
}

boolean UTRAN__Classmark__LV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_lengthIndicator.is_bound()
 || single_value->field_uTRAN__ClassmarkValue.is_bound();
}

boolean UTRAN__Classmark__LV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_lengthIndicator.is_value()
 && single_value->field_uTRAN__ClassmarkValue.is_value();
}

void UTRAN__Classmark__LV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

UTRAN__Classmark__LV UTRAN__Classmark__LV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.UTRAN_Classmark_LV.");
UTRAN__Classmark__LV ret_val;
if (single_value->field_lengthIndicator.is_bound()) {
ret_val.lengthIndicator() = single_value->field_lengthIndicator.valueof();
}
if (single_value->field_uTRAN__ClassmarkValue.is_bound()) {
ret_val.uTRAN__ClassmarkValue() = single_value->field_uTRAN__ClassmarkValue.valueof();
}
return ret_val;
}

void UTRAN__Classmark__LV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.UTRAN_Classmark_LV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new UTRAN__Classmark__LV_template[list_length];
}

UTRAN__Classmark__LV_template& UTRAN__Classmark__LV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.UTRAN_Classmark_LV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.UTRAN_Classmark_LV.");
return value_list.list_value[list_index];
}

INTEGER_template& UTRAN__Classmark__LV_template::lengthIndicator()
{
set_specific();
return single_value->field_lengthIndicator;
}

const INTEGER_template& UTRAN__Classmark__LV_template::lengthIndicator() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field lengthIndicator of a non-specific template of type @MobileL3_RRM_Types.UTRAN_Classmark_LV.");
return single_value->field_lengthIndicator;
}

OCTETSTRING_template& UTRAN__Classmark__LV_template::uTRAN__ClassmarkValue()
{
set_specific();
return single_value->field_uTRAN__ClassmarkValue;
}

const OCTETSTRING_template& UTRAN__Classmark__LV_template::uTRAN__ClassmarkValue() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field uTRAN_ClassmarkValue of a non-specific template of type @MobileL3_RRM_Types.UTRAN_Classmark_LV.");
return single_value->field_uTRAN__ClassmarkValue;
}

int UTRAN__Classmark__LV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.UTRAN_Classmark_LV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.UTRAN_Classmark_LV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.UTRAN_Classmark_LV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.UTRAN_Classmark_LV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.UTRAN_Classmark_LV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.UTRAN_Classmark_LV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.UTRAN_Classmark_LV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.UTRAN_Classmark_LV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.UTRAN_Classmark_LV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.UTRAN_Classmark_LV.");
  }
  return 0;
}

void UTRAN__Classmark__LV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ lengthIndicator := ");
single_value->field_lengthIndicator.log();
TTCN_Logger::log_event_str(", uTRAN_ClassmarkValue := ");
single_value->field_uTRAN__ClassmarkValue.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void UTRAN__Classmark__LV_template::log_match(const UTRAN__Classmark__LV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_lengthIndicator.match(match_value.lengthIndicator(), legacy)){
TTCN_Logger::log_logmatch_info(".lengthIndicator");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_uTRAN__ClassmarkValue.match(match_value.uTRAN__ClassmarkValue(), legacy)){
TTCN_Logger::log_logmatch_info(".uTRAN_ClassmarkValue");
single_value->field_uTRAN__ClassmarkValue.log_match(match_value.uTRAN__ClassmarkValue(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ lengthIndicator := ");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::log_event_str(", uTRAN_ClassmarkValue := ");
single_value->field_uTRAN__ClassmarkValue.log_match(match_value.uTRAN__ClassmarkValue(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void UTRAN__Classmark__LV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (uTRAN__ClassmarkValue().is_bound()) uTRAN__ClassmarkValue().set_implicit_omit();
}

void UTRAN__Classmark__LV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_lengthIndicator.encode_text(text_buf);
single_value->field_uTRAN__ClassmarkValue.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.UTRAN_Classmark_LV.");
}
}

void UTRAN__Classmark__LV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_lengthIndicator.decode_text(text_buf);
single_value->field_uTRAN__ClassmarkValue.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new UTRAN__Classmark__LV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.UTRAN_Classmark_LV.");
}
}

void UTRAN__Classmark__LV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    UTRAN__Classmark__LV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.UTRAN_Classmark_LV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) uTRAN__ClassmarkValue().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "uTRAN_ClassmarkValue")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          uTRAN__ClassmarkValue().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.UTRAN_Classmark_LV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    UTRAN__Classmark__LV_template* precondition = new UTRAN__Classmark__LV_template;
    precondition->set_param(*param.get_elem(0));
    UTRAN__Classmark__LV_template* implied_template = new UTRAN__Classmark__LV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = UTRAN__Classmark__LV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.UTRAN_Classmark_LV");
  }
  is_ifpresent = param.get_ifpresent();
}

void UTRAN__Classmark__LV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_lengthIndicator.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.UTRAN_Classmark_LV");
single_value->field_uTRAN__ClassmarkValue.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.UTRAN_Classmark_LV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.UTRAN_Classmark_LV");
}

boolean UTRAN__Classmark__LV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean UTRAN__Classmark__LV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

ClassmarkEnquiryMask__TLV::ClassmarkEnquiryMask__TLV()
{
}

ClassmarkEnquiryMask__TLV::ClassmarkEnquiryMask__TLV(const OCTETSTRING& par_elementIdentifier,
    const INTEGER& par_lengthIndicator,
    const OCTETSTRING& par_valuePart)
  :   field_elementIdentifier(par_elementIdentifier),
  field_lengthIndicator(par_lengthIndicator),
  field_valuePart(par_valuePart)
{
}

ClassmarkEnquiryMask__TLV::ClassmarkEnquiryMask__TLV(const ClassmarkEnquiryMask__TLV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV.");
if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
else field_elementIdentifier.clean_up();
if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
else field_lengthIndicator.clean_up();
if (other_value.valuePart().is_bound()) field_valuePart = other_value.valuePart();
else field_valuePart.clean_up();
}

void ClassmarkEnquiryMask__TLV::clean_up()
{
field_elementIdentifier.clean_up();
field_lengthIndicator.clean_up();
field_valuePart.clean_up();
}

const TTCN_Typedescriptor_t* ClassmarkEnquiryMask__TLV::get_descriptor() const { return &ClassmarkEnquiryMask__TLV_descr_; }
ClassmarkEnquiryMask__TLV& ClassmarkEnquiryMask__TLV::operator=(const ClassmarkEnquiryMask__TLV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV.");
  if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
  else field_elementIdentifier.clean_up();
  if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
  else field_lengthIndicator.clean_up();
  if (other_value.valuePart().is_bound()) field_valuePart = other_value.valuePart();
  else field_valuePart.clean_up();
}
return *this;
}

boolean ClassmarkEnquiryMask__TLV::operator==(const ClassmarkEnquiryMask__TLV& other_value) const
{
return field_elementIdentifier==other_value.field_elementIdentifier
  && field_lengthIndicator==other_value.field_lengthIndicator
  && field_valuePart==other_value.field_valuePart;
}

boolean ClassmarkEnquiryMask__TLV::is_bound() const
{
return (field_elementIdentifier.is_bound())
  || (field_lengthIndicator.is_bound())
  || (field_valuePart.is_bound());
}
boolean ClassmarkEnquiryMask__TLV::is_value() const
{
return field_elementIdentifier.is_value()
  && field_lengthIndicator.is_value()
  && field_valuePart.is_value();
}
void ClassmarkEnquiryMask__TLV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ elementIdentifier := ");
field_elementIdentifier.log();
TTCN_Logger::log_event_str(", lengthIndicator := ");
field_lengthIndicator.log();
TTCN_Logger::log_event_str(", valuePart := ");
field_valuePart.log();
TTCN_Logger::log_event_str(" }");
}

void ClassmarkEnquiryMask__TLV::set_implicit_omit()
{
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (valuePart().is_bound()) valuePart().set_implicit_omit();
}

void ClassmarkEnquiryMask__TLV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (3<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV has 3 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) valuePart().set_param(*param.get_elem(2));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "valuePart")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          valuePart().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV");
  }
}

void ClassmarkEnquiryMask__TLV::encode_text(Text_Buf& text_buf) const
{
field_elementIdentifier.encode_text(text_buf);
field_lengthIndicator.encode_text(text_buf);
field_valuePart.encode_text(text_buf);
}

void ClassmarkEnquiryMask__TLV::decode_text(Text_Buf& text_buf)
{
field_elementIdentifier.decode_text(text_buf);
field_lengthIndicator.decode_text(text_buf);
field_valuePart.decode_text(text_buf);
}

void ClassmarkEnquiryMask__TLV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void ClassmarkEnquiryMask__TLV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int ClassmarkEnquiryMask__TLV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  int value_of_length_field1 = 0;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_elementIdentifier.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, ClassmarkEnquiryMask__TLV_lengthIndicator_descr_.raw->forceomit);
  decoded_field_length = field_lengthIndicator.RAW_decode(ClassmarkEnquiryMask__TLV_lengthIndicator_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  INTEGER tmp1 = field_lengthIndicator.convert_to_Integer(ClassmarkEnquiryMask__TLV_lengthIndicator_descr_);
  field_lengthIndicator = tmp1;
  value_of_length_field1 += tmp1.get_long_long_val() * 8;
  RAW_Force_Omit field_2_force_omit(2, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_valuePart.RAW_decode(General__Types::OCT1_descr_, p_buf, min_of_ints(2, limit, value_of_length_field1), local_top_order, no_err, -1, TRUE, &field_2_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  value_of_length_field1 -= decoded_field_length;
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int ClassmarkEnquiryMask__TLV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 3;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(3);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::OCT1_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, ClassmarkEnquiryMask__TLV_lengthIndicator_descr_.raw);
  myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, General__Types::OCT1_descr_.raw);
  encoded_length += field_elementIdentifier.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += 8;
  myleaf.body.node.nodes[1]->calc = CALC_LENGTH;
  myleaf.body.node.nodes[1]->coding_descr = &ClassmarkEnquiryMask__TLV_lengthIndicator_descr_;
  myleaf.body.node.nodes[1]->calcof.lengthto.num_of_fields = 1;
  myleaf.body.node.nodes[1]->calcof.lengthto.unit = 8;
  myleaf.body.node.nodes[1]->calcof.lengthto.offset = 0;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields = init_lengthto_fields_list(1);
  myleaf.body.node.nodes[1]->length = 8;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields[0].level = myleaf.body.node.nodes[2]->curr_pos.level;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields[0].pos = myleaf.body.node.nodes[2]->curr_pos.pos;
  encoded_length += field_valuePart.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[2]);
  return myleaf.length = encoded_length;
}

struct ClassmarkEnquiryMask__TLV_template::single_value_struct {
OCTETSTRING_template field_elementIdentifier;
INTEGER_template field_lengthIndicator;
OCTETSTRING_template field_valuePart;
};

void ClassmarkEnquiryMask__TLV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_elementIdentifier = ANY_VALUE;
single_value->field_lengthIndicator = ANY_VALUE;
single_value->field_valuePart = ANY_VALUE;
}
}
}

void ClassmarkEnquiryMask__TLV_template::copy_value(const ClassmarkEnquiryMask__TLV& other_value)
{
single_value = new single_value_struct;
if (other_value.elementIdentifier().is_bound()) {
  single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
  single_value->field_elementIdentifier.clean_up();
}
if (other_value.lengthIndicator().is_bound()) {
  single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
  single_value->field_lengthIndicator.clean_up();
}
if (other_value.valuePart().is_bound()) {
  single_value->field_valuePart = other_value.valuePart();
} else {
  single_value->field_valuePart.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void ClassmarkEnquiryMask__TLV_template::copy_template(const ClassmarkEnquiryMask__TLV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.elementIdentifier().get_selection()) {
single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
single_value->field_elementIdentifier.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.lengthIndicator().get_selection()) {
single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
single_value->field_lengthIndicator.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.valuePart().get_selection()) {
single_value->field_valuePart = other_value.valuePart();
} else {
single_value->field_valuePart.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new ClassmarkEnquiryMask__TLV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new ClassmarkEnquiryMask__TLV_template(*other_value.implication_.precondition);
implication_.implied_template = new ClassmarkEnquiryMask__TLV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV.");
break;
}
set_selection(other_value);
}

ClassmarkEnquiryMask__TLV_template::ClassmarkEnquiryMask__TLV_template()
{
}

ClassmarkEnquiryMask__TLV_template::ClassmarkEnquiryMask__TLV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

ClassmarkEnquiryMask__TLV_template::ClassmarkEnquiryMask__TLV_template(const ClassmarkEnquiryMask__TLV& other_value)
{
copy_value(other_value);
}

ClassmarkEnquiryMask__TLV_template::ClassmarkEnquiryMask__TLV_template(const OPTIONAL<ClassmarkEnquiryMask__TLV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ClassmarkEnquiryMask__TLV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV from an unbound optional field.");
}
}

ClassmarkEnquiryMask__TLV_template::ClassmarkEnquiryMask__TLV_template(ClassmarkEnquiryMask__TLV_template* p_precondition, ClassmarkEnquiryMask__TLV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

ClassmarkEnquiryMask__TLV_template::ClassmarkEnquiryMask__TLV_template(Dynamic_Match_Interface<ClassmarkEnquiryMask__TLV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<ClassmarkEnquiryMask__TLV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

ClassmarkEnquiryMask__TLV_template::ClassmarkEnquiryMask__TLV_template(const ClassmarkEnquiryMask__TLV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

ClassmarkEnquiryMask__TLV_template::~ClassmarkEnquiryMask__TLV_template()
{
clean_up();
}

ClassmarkEnquiryMask__TLV_template& ClassmarkEnquiryMask__TLV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

ClassmarkEnquiryMask__TLV_template& ClassmarkEnquiryMask__TLV_template::operator=(const ClassmarkEnquiryMask__TLV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

ClassmarkEnquiryMask__TLV_template& ClassmarkEnquiryMask__TLV_template::operator=(const OPTIONAL<ClassmarkEnquiryMask__TLV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ClassmarkEnquiryMask__TLV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV.");
}
return *this;
}

ClassmarkEnquiryMask__TLV_template& ClassmarkEnquiryMask__TLV_template::operator=(const ClassmarkEnquiryMask__TLV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean ClassmarkEnquiryMask__TLV_template::match(const ClassmarkEnquiryMask__TLV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.elementIdentifier().is_bound()) return FALSE;
if(!single_value->field_elementIdentifier.match(other_value.elementIdentifier(), legacy))return FALSE;
if(!other_value.lengthIndicator().is_bound()) return FALSE;
if(!single_value->field_lengthIndicator.match(other_value.lengthIndicator(), legacy))return FALSE;
if(!other_value.valuePart().is_bound()) return FALSE;
if(!single_value->field_valuePart.match(other_value.valuePart(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV.");
}
return FALSE;
}

boolean ClassmarkEnquiryMask__TLV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_elementIdentifier.is_bound()
 || single_value->field_lengthIndicator.is_bound()
 || single_value->field_valuePart.is_bound();
}

boolean ClassmarkEnquiryMask__TLV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_elementIdentifier.is_value()
 && single_value->field_lengthIndicator.is_value()
 && single_value->field_valuePart.is_value();
}

void ClassmarkEnquiryMask__TLV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

ClassmarkEnquiryMask__TLV ClassmarkEnquiryMask__TLV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV.");
ClassmarkEnquiryMask__TLV ret_val;
if (single_value->field_elementIdentifier.is_bound()) {
ret_val.elementIdentifier() = single_value->field_elementIdentifier.valueof();
}
if (single_value->field_lengthIndicator.is_bound()) {
ret_val.lengthIndicator() = single_value->field_lengthIndicator.valueof();
}
if (single_value->field_valuePart.is_bound()) {
ret_val.valuePart() = single_value->field_valuePart.valueof();
}
return ret_val;
}

void ClassmarkEnquiryMask__TLV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new ClassmarkEnquiryMask__TLV_template[list_length];
}

ClassmarkEnquiryMask__TLV_template& ClassmarkEnquiryMask__TLV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV.");
return value_list.list_value[list_index];
}

OCTETSTRING_template& ClassmarkEnquiryMask__TLV_template::elementIdentifier()
{
set_specific();
return single_value->field_elementIdentifier;
}

const OCTETSTRING_template& ClassmarkEnquiryMask__TLV_template::elementIdentifier() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field elementIdentifier of a non-specific template of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV.");
return single_value->field_elementIdentifier;
}

INTEGER_template& ClassmarkEnquiryMask__TLV_template::lengthIndicator()
{
set_specific();
return single_value->field_lengthIndicator;
}

const INTEGER_template& ClassmarkEnquiryMask__TLV_template::lengthIndicator() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field lengthIndicator of a non-specific template of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV.");
return single_value->field_lengthIndicator;
}

OCTETSTRING_template& ClassmarkEnquiryMask__TLV_template::valuePart()
{
set_specific();
return single_value->field_valuePart;
}

const OCTETSTRING_template& ClassmarkEnquiryMask__TLV_template::valuePart() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field valuePart of a non-specific template of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV.");
return single_value->field_valuePart;
}

int ClassmarkEnquiryMask__TLV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 3;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV.");
  }
  return 0;
}

void ClassmarkEnquiryMask__TLV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log();
TTCN_Logger::log_event_str(", lengthIndicator := ");
single_value->field_lengthIndicator.log();
TTCN_Logger::log_event_str(", valuePart := ");
single_value->field_valuePart.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void ClassmarkEnquiryMask__TLV_template::log_match(const ClassmarkEnquiryMask__TLV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_elementIdentifier.match(match_value.elementIdentifier(), legacy)){
TTCN_Logger::log_logmatch_info(".elementIdentifier");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_lengthIndicator.match(match_value.lengthIndicator(), legacy)){
TTCN_Logger::log_logmatch_info(".lengthIndicator");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_valuePart.match(match_value.valuePart(), legacy)){
TTCN_Logger::log_logmatch_info(".valuePart");
single_value->field_valuePart.log_match(match_value.valuePart(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::log_event_str(", lengthIndicator := ");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::log_event_str(", valuePart := ");
single_value->field_valuePart.log_match(match_value.valuePart(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void ClassmarkEnquiryMask__TLV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (valuePart().is_bound()) valuePart().set_implicit_omit();
}

void ClassmarkEnquiryMask__TLV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_elementIdentifier.encode_text(text_buf);
single_value->field_lengthIndicator.encode_text(text_buf);
single_value->field_valuePart.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV.");
}
}

void ClassmarkEnquiryMask__TLV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_elementIdentifier.decode_text(text_buf);
single_value->field_lengthIndicator.decode_text(text_buf);
single_value->field_valuePart.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new ClassmarkEnquiryMask__TLV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV.");
}
}

void ClassmarkEnquiryMask__TLV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    ClassmarkEnquiryMask__TLV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (3<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV has 3 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) valuePart().set_param(*param.get_elem(2));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "valuePart")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          valuePart().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    ClassmarkEnquiryMask__TLV_template* precondition = new ClassmarkEnquiryMask__TLV_template;
    precondition->set_param(*param.get_elem(0));
    ClassmarkEnquiryMask__TLV_template* implied_template = new ClassmarkEnquiryMask__TLV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = ClassmarkEnquiryMask__TLV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV");
  }
  is_ifpresent = param.get_ifpresent();
}

void ClassmarkEnquiryMask__TLV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_elementIdentifier.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV");
single_value->field_lengthIndicator.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV");
single_value->field_valuePart.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.ClassmarkEnquiryMask_TLV");
}

boolean ClassmarkEnquiryMask__TLV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean ClassmarkEnquiryMask__TLV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

GERAN__IU__ModeClassmark__LV::GERAN__IU__ModeClassmark__LV()
{
}

GERAN__IU__ModeClassmark__LV::GERAN__IU__ModeClassmark__LV(const INTEGER& par_lengthIndicator,
    const OCTETSTRING& par_valuePart)
  :   field_lengthIndicator(par_lengthIndicator),
  field_valuePart(par_valuePart)
{
}

GERAN__IU__ModeClassmark__LV::GERAN__IU__ModeClassmark__LV(const GERAN__IU__ModeClassmark__LV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV.");
if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
else field_lengthIndicator.clean_up();
if (other_value.valuePart().is_bound()) field_valuePart = other_value.valuePart();
else field_valuePart.clean_up();
}

void GERAN__IU__ModeClassmark__LV::clean_up()
{
field_lengthIndicator.clean_up();
field_valuePart.clean_up();
}

const TTCN_Typedescriptor_t* GERAN__IU__ModeClassmark__LV::get_descriptor() const { return &GERAN__IU__ModeClassmark__LV_descr_; }
GERAN__IU__ModeClassmark__LV& GERAN__IU__ModeClassmark__LV::operator=(const GERAN__IU__ModeClassmark__LV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV.");
  if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
  else field_lengthIndicator.clean_up();
  if (other_value.valuePart().is_bound()) field_valuePart = other_value.valuePart();
  else field_valuePart.clean_up();
}
return *this;
}

boolean GERAN__IU__ModeClassmark__LV::operator==(const GERAN__IU__ModeClassmark__LV& other_value) const
{
return field_lengthIndicator==other_value.field_lengthIndicator
  && field_valuePart==other_value.field_valuePart;
}

boolean GERAN__IU__ModeClassmark__LV::is_bound() const
{
return (field_lengthIndicator.is_bound())
  || (field_valuePart.is_bound());
}
boolean GERAN__IU__ModeClassmark__LV::is_value() const
{
return field_lengthIndicator.is_value()
  && field_valuePart.is_value();
}
void GERAN__IU__ModeClassmark__LV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ lengthIndicator := ");
field_lengthIndicator.log();
TTCN_Logger::log_event_str(", valuePart := ");
field_valuePart.log();
TTCN_Logger::log_event_str(" }");
}

void GERAN__IU__ModeClassmark__LV::set_implicit_omit()
{
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (valuePart().is_bound()) valuePart().set_implicit_omit();
}

void GERAN__IU__ModeClassmark__LV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) valuePart().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "valuePart")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          valuePart().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV");
  }
}

void GERAN__IU__ModeClassmark__LV::encode_text(Text_Buf& text_buf) const
{
field_lengthIndicator.encode_text(text_buf);
field_valuePart.encode_text(text_buf);
}

void GERAN__IU__ModeClassmark__LV::decode_text(Text_Buf& text_buf)
{
field_lengthIndicator.decode_text(text_buf);
field_valuePart.decode_text(text_buf);
}

void GERAN__IU__ModeClassmark__LV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void GERAN__IU__ModeClassmark__LV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int GERAN__IU__ModeClassmark__LV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  int value_of_length_field0 = 0;
  RAW_Force_Omit field_0_force_omit(0, force_omit, GERAN__IU__ModeClassmark__LV_lengthIndicator_descr_.raw->forceomit);
  decoded_field_length = field_lengthIndicator.RAW_decode(GERAN__IU__ModeClassmark__LV_lengthIndicator_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  INTEGER tmp0 = field_lengthIndicator.convert_to_Integer(GERAN__IU__ModeClassmark__LV_lengthIndicator_descr_);
  field_lengthIndicator = tmp0;
  value_of_length_field0 += tmp0.get_long_long_val() * 8;
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_valuePart.RAW_decode(General__Types::OCT1_descr_, p_buf, min_of_ints(2, limit, value_of_length_field0), local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  value_of_length_field0 -= decoded_field_length;
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int GERAN__IU__ModeClassmark__LV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, GERAN__IU__ModeClassmark__LV_lengthIndicator_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::OCT1_descr_.raw);
  encoded_length += 8;
  myleaf.body.node.nodes[0]->calc = CALC_LENGTH;
  myleaf.body.node.nodes[0]->coding_descr = &GERAN__IU__ModeClassmark__LV_lengthIndicator_descr_;
  myleaf.body.node.nodes[0]->calcof.lengthto.num_of_fields = 1;
  myleaf.body.node.nodes[0]->calcof.lengthto.unit = 8;
  myleaf.body.node.nodes[0]->calcof.lengthto.offset = 0;
  myleaf.body.node.nodes[0]->calcof.lengthto.fields = init_lengthto_fields_list(1);
  myleaf.body.node.nodes[0]->length = 8;
  myleaf.body.node.nodes[0]->calcof.lengthto.fields[0].level = myleaf.body.node.nodes[1]->curr_pos.level;
  myleaf.body.node.nodes[0]->calcof.lengthto.fields[0].pos = myleaf.body.node.nodes[1]->curr_pos.pos;
  encoded_length += field_valuePart.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct GERAN__IU__ModeClassmark__LV_template::single_value_struct {
INTEGER_template field_lengthIndicator;
OCTETSTRING_template field_valuePart;
};

void GERAN__IU__ModeClassmark__LV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_lengthIndicator = ANY_VALUE;
single_value->field_valuePart = ANY_VALUE;
}
}
}

void GERAN__IU__ModeClassmark__LV_template::copy_value(const GERAN__IU__ModeClassmark__LV& other_value)
{
single_value = new single_value_struct;
if (other_value.lengthIndicator().is_bound()) {
  single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
  single_value->field_lengthIndicator.clean_up();
}
if (other_value.valuePart().is_bound()) {
  single_value->field_valuePart = other_value.valuePart();
} else {
  single_value->field_valuePart.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void GERAN__IU__ModeClassmark__LV_template::copy_template(const GERAN__IU__ModeClassmark__LV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.lengthIndicator().get_selection()) {
single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
single_value->field_lengthIndicator.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.valuePart().get_selection()) {
single_value->field_valuePart = other_value.valuePart();
} else {
single_value->field_valuePart.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new GERAN__IU__ModeClassmark__LV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new GERAN__IU__ModeClassmark__LV_template(*other_value.implication_.precondition);
implication_.implied_template = new GERAN__IU__ModeClassmark__LV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV.");
break;
}
set_selection(other_value);
}

GERAN__IU__ModeClassmark__LV_template::GERAN__IU__ModeClassmark__LV_template()
{
}

GERAN__IU__ModeClassmark__LV_template::GERAN__IU__ModeClassmark__LV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

GERAN__IU__ModeClassmark__LV_template::GERAN__IU__ModeClassmark__LV_template(const GERAN__IU__ModeClassmark__LV& other_value)
{
copy_value(other_value);
}

GERAN__IU__ModeClassmark__LV_template::GERAN__IU__ModeClassmark__LV_template(const OPTIONAL<GERAN__IU__ModeClassmark__LV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const GERAN__IU__ModeClassmark__LV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV from an unbound optional field.");
}
}

GERAN__IU__ModeClassmark__LV_template::GERAN__IU__ModeClassmark__LV_template(GERAN__IU__ModeClassmark__LV_template* p_precondition, GERAN__IU__ModeClassmark__LV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

GERAN__IU__ModeClassmark__LV_template::GERAN__IU__ModeClassmark__LV_template(Dynamic_Match_Interface<GERAN__IU__ModeClassmark__LV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<GERAN__IU__ModeClassmark__LV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

GERAN__IU__ModeClassmark__LV_template::GERAN__IU__ModeClassmark__LV_template(const GERAN__IU__ModeClassmark__LV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

GERAN__IU__ModeClassmark__LV_template::~GERAN__IU__ModeClassmark__LV_template()
{
clean_up();
}

GERAN__IU__ModeClassmark__LV_template& GERAN__IU__ModeClassmark__LV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

GERAN__IU__ModeClassmark__LV_template& GERAN__IU__ModeClassmark__LV_template::operator=(const GERAN__IU__ModeClassmark__LV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

GERAN__IU__ModeClassmark__LV_template& GERAN__IU__ModeClassmark__LV_template::operator=(const OPTIONAL<GERAN__IU__ModeClassmark__LV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const GERAN__IU__ModeClassmark__LV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV.");
}
return *this;
}

GERAN__IU__ModeClassmark__LV_template& GERAN__IU__ModeClassmark__LV_template::operator=(const GERAN__IU__ModeClassmark__LV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean GERAN__IU__ModeClassmark__LV_template::match(const GERAN__IU__ModeClassmark__LV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.lengthIndicator().is_bound()) return FALSE;
if(!single_value->field_lengthIndicator.match(other_value.lengthIndicator(), legacy))return FALSE;
if(!other_value.valuePart().is_bound()) return FALSE;
if(!single_value->field_valuePart.match(other_value.valuePart(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV.");
}
return FALSE;
}

boolean GERAN__IU__ModeClassmark__LV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_lengthIndicator.is_bound()
 || single_value->field_valuePart.is_bound();
}

boolean GERAN__IU__ModeClassmark__LV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_lengthIndicator.is_value()
 && single_value->field_valuePart.is_value();
}

void GERAN__IU__ModeClassmark__LV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

GERAN__IU__ModeClassmark__LV GERAN__IU__ModeClassmark__LV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV.");
GERAN__IU__ModeClassmark__LV ret_val;
if (single_value->field_lengthIndicator.is_bound()) {
ret_val.lengthIndicator() = single_value->field_lengthIndicator.valueof();
}
if (single_value->field_valuePart.is_bound()) {
ret_val.valuePart() = single_value->field_valuePart.valueof();
}
return ret_val;
}

void GERAN__IU__ModeClassmark__LV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new GERAN__IU__ModeClassmark__LV_template[list_length];
}

GERAN__IU__ModeClassmark__LV_template& GERAN__IU__ModeClassmark__LV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV.");
return value_list.list_value[list_index];
}

INTEGER_template& GERAN__IU__ModeClassmark__LV_template::lengthIndicator()
{
set_specific();
return single_value->field_lengthIndicator;
}

const INTEGER_template& GERAN__IU__ModeClassmark__LV_template::lengthIndicator() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field lengthIndicator of a non-specific template of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV.");
return single_value->field_lengthIndicator;
}

OCTETSTRING_template& GERAN__IU__ModeClassmark__LV_template::valuePart()
{
set_specific();
return single_value->field_valuePart;
}

const OCTETSTRING_template& GERAN__IU__ModeClassmark__LV_template::valuePart() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field valuePart of a non-specific template of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV.");
return single_value->field_valuePart;
}

int GERAN__IU__ModeClassmark__LV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV.");
  }
  return 0;
}

void GERAN__IU__ModeClassmark__LV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ lengthIndicator := ");
single_value->field_lengthIndicator.log();
TTCN_Logger::log_event_str(", valuePart := ");
single_value->field_valuePart.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void GERAN__IU__ModeClassmark__LV_template::log_match(const GERAN__IU__ModeClassmark__LV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_lengthIndicator.match(match_value.lengthIndicator(), legacy)){
TTCN_Logger::log_logmatch_info(".lengthIndicator");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_valuePart.match(match_value.valuePart(), legacy)){
TTCN_Logger::log_logmatch_info(".valuePart");
single_value->field_valuePart.log_match(match_value.valuePart(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ lengthIndicator := ");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::log_event_str(", valuePart := ");
single_value->field_valuePart.log_match(match_value.valuePart(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void GERAN__IU__ModeClassmark__LV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (valuePart().is_bound()) valuePart().set_implicit_omit();
}

void GERAN__IU__ModeClassmark__LV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_lengthIndicator.encode_text(text_buf);
single_value->field_valuePart.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV.");
}
}

void GERAN__IU__ModeClassmark__LV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_lengthIndicator.decode_text(text_buf);
single_value->field_valuePart.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new GERAN__IU__ModeClassmark__LV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV.");
}
}

void GERAN__IU__ModeClassmark__LV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    GERAN__IU__ModeClassmark__LV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) valuePart().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "valuePart")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          valuePart().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    GERAN__IU__ModeClassmark__LV_template* precondition = new GERAN__IU__ModeClassmark__LV_template;
    precondition->set_param(*param.get_elem(0));
    GERAN__IU__ModeClassmark__LV_template* implied_template = new GERAN__IU__ModeClassmark__LV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = GERAN__IU__ModeClassmark__LV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV");
  }
  is_ifpresent = param.get_ifpresent();
}

void GERAN__IU__ModeClassmark__LV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_lengthIndicator.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV");
single_value->field_valuePart.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.GERAN_IU_ModeClassmark_LV");
}

boolean GERAN__IU__ModeClassmark__LV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean GERAN__IU__ModeClassmark__LV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

ChannelNeeded__TV::ChannelNeeded__TV()
{
}

ChannelNeeded__TV::ChannelNeeded__TV(const BITSTRING& par_channel1,
    const BITSTRING& par_channel2,
    const BITSTRING& par_elementIdentifier)
  :   field_channel1(par_channel1),
  field_channel2(par_channel2),
  field_elementIdentifier(par_elementIdentifier)
{
}

ChannelNeeded__TV::ChannelNeeded__TV(const ChannelNeeded__TV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.ChannelNeeded_TV.");
if (other_value.channel1().is_bound()) field_channel1 = other_value.channel1();
else field_channel1.clean_up();
if (other_value.channel2().is_bound()) field_channel2 = other_value.channel2();
else field_channel2.clean_up();
if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
else field_elementIdentifier.clean_up();
}

void ChannelNeeded__TV::clean_up()
{
field_channel1.clean_up();
field_channel2.clean_up();
field_elementIdentifier.clean_up();
}

const TTCN_Typedescriptor_t* ChannelNeeded__TV::get_descriptor() const { return &ChannelNeeded__TV_descr_; }
ChannelNeeded__TV& ChannelNeeded__TV::operator=(const ChannelNeeded__TV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.ChannelNeeded_TV.");
  if (other_value.channel1().is_bound()) field_channel1 = other_value.channel1();
  else field_channel1.clean_up();
  if (other_value.channel2().is_bound()) field_channel2 = other_value.channel2();
  else field_channel2.clean_up();
  if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
  else field_elementIdentifier.clean_up();
}
return *this;
}

boolean ChannelNeeded__TV::operator==(const ChannelNeeded__TV& other_value) const
{
return field_channel1==other_value.field_channel1
  && field_channel2==other_value.field_channel2
  && field_elementIdentifier==other_value.field_elementIdentifier;
}

boolean ChannelNeeded__TV::is_bound() const
{
return (field_channel1.is_bound())
  || (field_channel2.is_bound())
  || (field_elementIdentifier.is_bound());
}
boolean ChannelNeeded__TV::is_value() const
{
return field_channel1.is_value()
  && field_channel2.is_value()
  && field_elementIdentifier.is_value();
}
void ChannelNeeded__TV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ channel1 := ");
field_channel1.log();
TTCN_Logger::log_event_str(", channel2 := ");
field_channel2.log();
TTCN_Logger::log_event_str(", elementIdentifier := ");
field_elementIdentifier.log();
TTCN_Logger::log_event_str(" }");
}

void ChannelNeeded__TV::set_implicit_omit()
{
if (channel1().is_bound()) channel1().set_implicit_omit();
if (channel2().is_bound()) channel2().set_implicit_omit();
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
}

void ChannelNeeded__TV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (3<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.ChannelNeeded_TV has 3 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) channel1().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) channel2().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(2));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "channel1")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          channel1().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "channel2")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          channel2().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.ChannelNeeded_TV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.ChannelNeeded_TV");
  }
}

void ChannelNeeded__TV::encode_text(Text_Buf& text_buf) const
{
field_channel1.encode_text(text_buf);
field_channel2.encode_text(text_buf);
field_elementIdentifier.encode_text(text_buf);
}

void ChannelNeeded__TV::decode_text(Text_Buf& text_buf)
{
field_channel1.decode_text(text_buf);
field_channel2.decode_text(text_buf);
field_elementIdentifier.decode_text(text_buf);
}

void ChannelNeeded__TV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void ChannelNeeded__TV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int ChannelNeeded__TV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::BIT2_descr_.raw->forceomit);
  decoded_field_length = field_channel1.RAW_decode(General__Types::BIT2_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT2_descr_.raw->forceomit);
  decoded_field_length = field_channel2.RAW_decode(General__Types::BIT2_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_2_force_omit(2, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_elementIdentifier.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_2_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int ChannelNeeded__TV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 3;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(3);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::BIT2_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT2_descr_.raw);
  myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, General__Types::BIT4_descr_.raw);
  encoded_length += field_channel1.RAW_encode(General__Types::BIT2_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_channel2.RAW_encode(General__Types::BIT2_descr_, *myleaf.body.node.nodes[1]);
  encoded_length += field_elementIdentifier.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[2]);
  return myleaf.length = encoded_length;
}

struct ChannelNeeded__TV_template::single_value_struct {
BITSTRING_template field_channel1;
BITSTRING_template field_channel2;
BITSTRING_template field_elementIdentifier;
};

void ChannelNeeded__TV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_channel1 = ANY_VALUE;
single_value->field_channel2 = ANY_VALUE;
single_value->field_elementIdentifier = ANY_VALUE;
}
}
}

void ChannelNeeded__TV_template::copy_value(const ChannelNeeded__TV& other_value)
{
single_value = new single_value_struct;
if (other_value.channel1().is_bound()) {
  single_value->field_channel1 = other_value.channel1();
} else {
  single_value->field_channel1.clean_up();
}
if (other_value.channel2().is_bound()) {
  single_value->field_channel2 = other_value.channel2();
} else {
  single_value->field_channel2.clean_up();
}
if (other_value.elementIdentifier().is_bound()) {
  single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
  single_value->field_elementIdentifier.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void ChannelNeeded__TV_template::copy_template(const ChannelNeeded__TV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.channel1().get_selection()) {
single_value->field_channel1 = other_value.channel1();
} else {
single_value->field_channel1.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.channel2().get_selection()) {
single_value->field_channel2 = other_value.channel2();
} else {
single_value->field_channel2.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.elementIdentifier().get_selection()) {
single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
single_value->field_elementIdentifier.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new ChannelNeeded__TV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new ChannelNeeded__TV_template(*other_value.implication_.precondition);
implication_.implied_template = new ChannelNeeded__TV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelNeeded_TV.");
break;
}
set_selection(other_value);
}

ChannelNeeded__TV_template::ChannelNeeded__TV_template()
{
}

ChannelNeeded__TV_template::ChannelNeeded__TV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

ChannelNeeded__TV_template::ChannelNeeded__TV_template(const ChannelNeeded__TV& other_value)
{
copy_value(other_value);
}

ChannelNeeded__TV_template::ChannelNeeded__TV_template(const OPTIONAL<ChannelNeeded__TV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ChannelNeeded__TV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.ChannelNeeded_TV from an unbound optional field.");
}
}

ChannelNeeded__TV_template::ChannelNeeded__TV_template(ChannelNeeded__TV_template* p_precondition, ChannelNeeded__TV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

ChannelNeeded__TV_template::ChannelNeeded__TV_template(Dynamic_Match_Interface<ChannelNeeded__TV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<ChannelNeeded__TV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

ChannelNeeded__TV_template::ChannelNeeded__TV_template(const ChannelNeeded__TV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

ChannelNeeded__TV_template::~ChannelNeeded__TV_template()
{
clean_up();
}

ChannelNeeded__TV_template& ChannelNeeded__TV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

ChannelNeeded__TV_template& ChannelNeeded__TV_template::operator=(const ChannelNeeded__TV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

ChannelNeeded__TV_template& ChannelNeeded__TV_template::operator=(const OPTIONAL<ChannelNeeded__TV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ChannelNeeded__TV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.ChannelNeeded_TV.");
}
return *this;
}

ChannelNeeded__TV_template& ChannelNeeded__TV_template::operator=(const ChannelNeeded__TV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean ChannelNeeded__TV_template::match(const ChannelNeeded__TV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.channel1().is_bound()) return FALSE;
if(!single_value->field_channel1.match(other_value.channel1(), legacy))return FALSE;
if(!other_value.channel2().is_bound()) return FALSE;
if(!single_value->field_channel2.match(other_value.channel2(), legacy))return FALSE;
if(!other_value.elementIdentifier().is_bound()) return FALSE;
if(!single_value->field_elementIdentifier.match(other_value.elementIdentifier(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelNeeded_TV.");
}
return FALSE;
}

boolean ChannelNeeded__TV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_channel1.is_bound()
 || single_value->field_channel2.is_bound()
 || single_value->field_elementIdentifier.is_bound();
}

boolean ChannelNeeded__TV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_channel1.is_value()
 && single_value->field_channel2.is_value()
 && single_value->field_elementIdentifier.is_value();
}

void ChannelNeeded__TV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

ChannelNeeded__TV ChannelNeeded__TV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.ChannelNeeded_TV.");
ChannelNeeded__TV ret_val;
if (single_value->field_channel1.is_bound()) {
ret_val.channel1() = single_value->field_channel1.valueof();
}
if (single_value->field_channel2.is_bound()) {
ret_val.channel2() = single_value->field_channel2.valueof();
}
if (single_value->field_elementIdentifier.is_bound()) {
ret_val.elementIdentifier() = single_value->field_elementIdentifier.valueof();
}
return ret_val;
}

void ChannelNeeded__TV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.ChannelNeeded_TV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new ChannelNeeded__TV_template[list_length];
}

ChannelNeeded__TV_template& ChannelNeeded__TV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.ChannelNeeded_TV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.ChannelNeeded_TV.");
return value_list.list_value[list_index];
}

BITSTRING_template& ChannelNeeded__TV_template::channel1()
{
set_specific();
return single_value->field_channel1;
}

const BITSTRING_template& ChannelNeeded__TV_template::channel1() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field channel1 of a non-specific template of type @MobileL3_RRM_Types.ChannelNeeded_TV.");
return single_value->field_channel1;
}

BITSTRING_template& ChannelNeeded__TV_template::channel2()
{
set_specific();
return single_value->field_channel2;
}

const BITSTRING_template& ChannelNeeded__TV_template::channel2() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field channel2 of a non-specific template of type @MobileL3_RRM_Types.ChannelNeeded_TV.");
return single_value->field_channel2;
}

BITSTRING_template& ChannelNeeded__TV_template::elementIdentifier()
{
set_specific();
return single_value->field_elementIdentifier;
}

const BITSTRING_template& ChannelNeeded__TV_template::elementIdentifier() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field elementIdentifier of a non-specific template of type @MobileL3_RRM_Types.ChannelNeeded_TV.");
return single_value->field_elementIdentifier;
}

int ChannelNeeded__TV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelNeeded_TV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 3;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelNeeded_TV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelNeeded_TV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelNeeded_TV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelNeeded_TV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelNeeded_TV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelNeeded_TV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelNeeded_TV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelNeeded_TV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelNeeded_TV.");
  }
  return 0;
}

void ChannelNeeded__TV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ channel1 := ");
single_value->field_channel1.log();
TTCN_Logger::log_event_str(", channel2 := ");
single_value->field_channel2.log();
TTCN_Logger::log_event_str(", elementIdentifier := ");
single_value->field_elementIdentifier.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void ChannelNeeded__TV_template::log_match(const ChannelNeeded__TV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_channel1.match(match_value.channel1(), legacy)){
TTCN_Logger::log_logmatch_info(".channel1");
single_value->field_channel1.log_match(match_value.channel1(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_channel2.match(match_value.channel2(), legacy)){
TTCN_Logger::log_logmatch_info(".channel2");
single_value->field_channel2.log_match(match_value.channel2(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_elementIdentifier.match(match_value.elementIdentifier(), legacy)){
TTCN_Logger::log_logmatch_info(".elementIdentifier");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ channel1 := ");
single_value->field_channel1.log_match(match_value.channel1(), legacy);
TTCN_Logger::log_event_str(", channel2 := ");
single_value->field_channel2.log_match(match_value.channel2(), legacy);
TTCN_Logger::log_event_str(", elementIdentifier := ");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void ChannelNeeded__TV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (channel1().is_bound()) channel1().set_implicit_omit();
if (channel2().is_bound()) channel2().set_implicit_omit();
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
}

void ChannelNeeded__TV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_channel1.encode_text(text_buf);
single_value->field_channel2.encode_text(text_buf);
single_value->field_elementIdentifier.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelNeeded_TV.");
}
}

void ChannelNeeded__TV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_channel1.decode_text(text_buf);
single_value->field_channel2.decode_text(text_buf);
single_value->field_elementIdentifier.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new ChannelNeeded__TV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.ChannelNeeded_TV.");
}
}

void ChannelNeeded__TV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    ChannelNeeded__TV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (3<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.ChannelNeeded_TV has 3 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) channel1().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) channel2().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(2));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "channel1")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          channel1().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "channel2")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          channel2().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.ChannelNeeded_TV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    ChannelNeeded__TV_template* precondition = new ChannelNeeded__TV_template;
    precondition->set_param(*param.get_elem(0));
    ChannelNeeded__TV_template* implied_template = new ChannelNeeded__TV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = ChannelNeeded__TV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.ChannelNeeded_TV");
  }
  is_ifpresent = param.get_ifpresent();
}

void ChannelNeeded__TV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_channel1.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelNeeded_TV");
single_value->field_channel2.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelNeeded_TV");
single_value->field_elementIdentifier.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelNeeded_TV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.ChannelNeeded_TV");
}

boolean ChannelNeeded__TV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean ChannelNeeded__TV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

ChannelNeeded__V::ChannelNeeded__V()
{
}

ChannelNeeded__V::ChannelNeeded__V(const BITSTRING& par_channel1,
    const BITSTRING& par_channel2)
  :   field_channel1(par_channel1),
  field_channel2(par_channel2)
{
}

ChannelNeeded__V::ChannelNeeded__V(const ChannelNeeded__V& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.ChannelNeeded_V.");
if (other_value.channel1().is_bound()) field_channel1 = other_value.channel1();
else field_channel1.clean_up();
if (other_value.channel2().is_bound()) field_channel2 = other_value.channel2();
else field_channel2.clean_up();
}

void ChannelNeeded__V::clean_up()
{
field_channel1.clean_up();
field_channel2.clean_up();
}

const TTCN_Typedescriptor_t* ChannelNeeded__V::get_descriptor() const { return &ChannelNeeded__V_descr_; }
ChannelNeeded__V& ChannelNeeded__V::operator=(const ChannelNeeded__V& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.ChannelNeeded_V.");
  if (other_value.channel1().is_bound()) field_channel1 = other_value.channel1();
  else field_channel1.clean_up();
  if (other_value.channel2().is_bound()) field_channel2 = other_value.channel2();
  else field_channel2.clean_up();
}
return *this;
}

boolean ChannelNeeded__V::operator==(const ChannelNeeded__V& other_value) const
{
return field_channel1==other_value.field_channel1
  && field_channel2==other_value.field_channel2;
}

boolean ChannelNeeded__V::is_bound() const
{
return (field_channel1.is_bound())
  || (field_channel2.is_bound());
}
boolean ChannelNeeded__V::is_value() const
{
return field_channel1.is_value()
  && field_channel2.is_value();
}
void ChannelNeeded__V::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ channel1 := ");
field_channel1.log();
TTCN_Logger::log_event_str(", channel2 := ");
field_channel2.log();
TTCN_Logger::log_event_str(" }");
}

void ChannelNeeded__V::set_implicit_omit()
{
if (channel1().is_bound()) channel1().set_implicit_omit();
if (channel2().is_bound()) channel2().set_implicit_omit();
}

void ChannelNeeded__V::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.ChannelNeeded_V has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) channel1().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) channel2().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "channel1")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          channel1().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "channel2")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          channel2().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.ChannelNeeded_V: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.ChannelNeeded_V");
  }
}

void ChannelNeeded__V::encode_text(Text_Buf& text_buf) const
{
field_channel1.encode_text(text_buf);
field_channel2.encode_text(text_buf);
}

void ChannelNeeded__V::decode_text(Text_Buf& text_buf)
{
field_channel1.decode_text(text_buf);
field_channel2.decode_text(text_buf);
}

void ChannelNeeded__V::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void ChannelNeeded__V::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int ChannelNeeded__V::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::BIT2_descr_.raw->forceomit);
  decoded_field_length = field_channel1.RAW_decode(General__Types::BIT2_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT2_descr_.raw->forceomit);
  decoded_field_length = field_channel2.RAW_decode(General__Types::BIT2_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int ChannelNeeded__V::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::BIT2_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT2_descr_.raw);
  encoded_length += field_channel1.RAW_encode(General__Types::BIT2_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_channel2.RAW_encode(General__Types::BIT2_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct ChannelNeeded__V_template::single_value_struct {
BITSTRING_template field_channel1;
BITSTRING_template field_channel2;
};

void ChannelNeeded__V_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_channel1 = ANY_VALUE;
single_value->field_channel2 = ANY_VALUE;
}
}
}

void ChannelNeeded__V_template::copy_value(const ChannelNeeded__V& other_value)
{
single_value = new single_value_struct;
if (other_value.channel1().is_bound()) {
  single_value->field_channel1 = other_value.channel1();
} else {
  single_value->field_channel1.clean_up();
}
if (other_value.channel2().is_bound()) {
  single_value->field_channel2 = other_value.channel2();
} else {
  single_value->field_channel2.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void ChannelNeeded__V_template::copy_template(const ChannelNeeded__V_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.channel1().get_selection()) {
single_value->field_channel1 = other_value.channel1();
} else {
single_value->field_channel1.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.channel2().get_selection()) {
single_value->field_channel2 = other_value.channel2();
} else {
single_value->field_channel2.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new ChannelNeeded__V_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new ChannelNeeded__V_template(*other_value.implication_.precondition);
implication_.implied_template = new ChannelNeeded__V_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelNeeded_V.");
break;
}
set_selection(other_value);
}

ChannelNeeded__V_template::ChannelNeeded__V_template()
{
}

ChannelNeeded__V_template::ChannelNeeded__V_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

ChannelNeeded__V_template::ChannelNeeded__V_template(const ChannelNeeded__V& other_value)
{
copy_value(other_value);
}

ChannelNeeded__V_template::ChannelNeeded__V_template(const OPTIONAL<ChannelNeeded__V>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ChannelNeeded__V&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.ChannelNeeded_V from an unbound optional field.");
}
}

ChannelNeeded__V_template::ChannelNeeded__V_template(ChannelNeeded__V_template* p_precondition, ChannelNeeded__V_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

ChannelNeeded__V_template::ChannelNeeded__V_template(Dynamic_Match_Interface<ChannelNeeded__V>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<ChannelNeeded__V>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

ChannelNeeded__V_template::ChannelNeeded__V_template(const ChannelNeeded__V_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

ChannelNeeded__V_template::~ChannelNeeded__V_template()
{
clean_up();
}

ChannelNeeded__V_template& ChannelNeeded__V_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

ChannelNeeded__V_template& ChannelNeeded__V_template::operator=(const ChannelNeeded__V& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

ChannelNeeded__V_template& ChannelNeeded__V_template::operator=(const OPTIONAL<ChannelNeeded__V>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ChannelNeeded__V&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.ChannelNeeded_V.");
}
return *this;
}

ChannelNeeded__V_template& ChannelNeeded__V_template::operator=(const ChannelNeeded__V_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean ChannelNeeded__V_template::match(const ChannelNeeded__V& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.channel1().is_bound()) return FALSE;
if(!single_value->field_channel1.match(other_value.channel1(), legacy))return FALSE;
if(!other_value.channel2().is_bound()) return FALSE;
if(!single_value->field_channel2.match(other_value.channel2(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelNeeded_V.");
}
return FALSE;
}

boolean ChannelNeeded__V_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_channel1.is_bound()
 || single_value->field_channel2.is_bound();
}

boolean ChannelNeeded__V_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_channel1.is_value()
 && single_value->field_channel2.is_value();
}

void ChannelNeeded__V_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

ChannelNeeded__V ChannelNeeded__V_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.ChannelNeeded_V.");
ChannelNeeded__V ret_val;
if (single_value->field_channel1.is_bound()) {
ret_val.channel1() = single_value->field_channel1.valueof();
}
if (single_value->field_channel2.is_bound()) {
ret_val.channel2() = single_value->field_channel2.valueof();
}
return ret_val;
}

void ChannelNeeded__V_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.ChannelNeeded_V.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new ChannelNeeded__V_template[list_length];
}

ChannelNeeded__V_template& ChannelNeeded__V_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.ChannelNeeded_V.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.ChannelNeeded_V.");
return value_list.list_value[list_index];
}

BITSTRING_template& ChannelNeeded__V_template::channel1()
{
set_specific();
return single_value->field_channel1;
}

const BITSTRING_template& ChannelNeeded__V_template::channel1() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field channel1 of a non-specific template of type @MobileL3_RRM_Types.ChannelNeeded_V.");
return single_value->field_channel1;
}

BITSTRING_template& ChannelNeeded__V_template::channel2()
{
set_specific();
return single_value->field_channel2;
}

const BITSTRING_template& ChannelNeeded__V_template::channel2() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field channel2 of a non-specific template of type @MobileL3_RRM_Types.ChannelNeeded_V.");
return single_value->field_channel2;
}

int ChannelNeeded__V_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelNeeded_V which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelNeeded_V containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelNeeded_V containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelNeeded_V containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelNeeded_V containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelNeeded_V containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelNeeded_V containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelNeeded_V containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelNeeded_V containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelNeeded_V.");
  }
  return 0;
}

void ChannelNeeded__V_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ channel1 := ");
single_value->field_channel1.log();
TTCN_Logger::log_event_str(", channel2 := ");
single_value->field_channel2.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void ChannelNeeded__V_template::log_match(const ChannelNeeded__V& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_channel1.match(match_value.channel1(), legacy)){
TTCN_Logger::log_logmatch_info(".channel1");
single_value->field_channel1.log_match(match_value.channel1(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_channel2.match(match_value.channel2(), legacy)){
TTCN_Logger::log_logmatch_info(".channel2");
single_value->field_channel2.log_match(match_value.channel2(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ channel1 := ");
single_value->field_channel1.log_match(match_value.channel1(), legacy);
TTCN_Logger::log_event_str(", channel2 := ");
single_value->field_channel2.log_match(match_value.channel2(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void ChannelNeeded__V_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (channel1().is_bound()) channel1().set_implicit_omit();
if (channel2().is_bound()) channel2().set_implicit_omit();
}

void ChannelNeeded__V_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_channel1.encode_text(text_buf);
single_value->field_channel2.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelNeeded_V.");
}
}

void ChannelNeeded__V_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_channel1.decode_text(text_buf);
single_value->field_channel2.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new ChannelNeeded__V_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.ChannelNeeded_V.");
}
}

void ChannelNeeded__V_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    ChannelNeeded__V_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.ChannelNeeded_V has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) channel1().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) channel2().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "channel1")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          channel1().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "channel2")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          channel2().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.ChannelNeeded_V: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    ChannelNeeded__V_template* precondition = new ChannelNeeded__V_template;
    precondition->set_param(*param.get_elem(0));
    ChannelNeeded__V_template* implied_template = new ChannelNeeded__V_template;
    implied_template->set_param(*param.get_elem(1));
    *this = ChannelNeeded__V_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.ChannelNeeded_V");
  }
  is_ifpresent = param.get_ifpresent();
}

void ChannelNeeded__V_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_channel1.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelNeeded_V");
single_value->field_channel2.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelNeeded_V");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.ChannelNeeded_V");
}

boolean ChannelNeeded__V_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean ChannelNeeded__V_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

ChannelRequestDescription2__LV::ChannelRequestDescription2__LV()
{
}

ChannelRequestDescription2__LV::ChannelRequestDescription2__LV(const INTEGER& par_lengthIndicator,
    const OCTETSTRING& par_valuePart)
  :   field_lengthIndicator(par_lengthIndicator),
  field_valuePart(par_valuePart)
{
}

ChannelRequestDescription2__LV::ChannelRequestDescription2__LV(const ChannelRequestDescription2__LV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV.");
if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
else field_lengthIndicator.clean_up();
if (other_value.valuePart().is_bound()) field_valuePart = other_value.valuePart();
else field_valuePart.clean_up();
}

void ChannelRequestDescription2__LV::clean_up()
{
field_lengthIndicator.clean_up();
field_valuePart.clean_up();
}

const TTCN_Typedescriptor_t* ChannelRequestDescription2__LV::get_descriptor() const { return &ChannelRequestDescription2__LV_descr_; }
ChannelRequestDescription2__LV& ChannelRequestDescription2__LV::operator=(const ChannelRequestDescription2__LV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV.");
  if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
  else field_lengthIndicator.clean_up();
  if (other_value.valuePart().is_bound()) field_valuePart = other_value.valuePart();
  else field_valuePart.clean_up();
}
return *this;
}

boolean ChannelRequestDescription2__LV::operator==(const ChannelRequestDescription2__LV& other_value) const
{
return field_lengthIndicator==other_value.field_lengthIndicator
  && field_valuePart==other_value.field_valuePart;
}

boolean ChannelRequestDescription2__LV::is_bound() const
{
return (field_lengthIndicator.is_bound())
  || (field_valuePart.is_bound());
}
boolean ChannelRequestDescription2__LV::is_value() const
{
return field_lengthIndicator.is_value()
  && field_valuePart.is_value();
}
void ChannelRequestDescription2__LV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ lengthIndicator := ");
field_lengthIndicator.log();
TTCN_Logger::log_event_str(", valuePart := ");
field_valuePart.log();
TTCN_Logger::log_event_str(" }");
}

void ChannelRequestDescription2__LV::set_implicit_omit()
{
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (valuePart().is_bound()) valuePart().set_implicit_omit();
}

void ChannelRequestDescription2__LV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) valuePart().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "valuePart")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          valuePart().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.ChannelRequestDescription2_LV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.ChannelRequestDescription2_LV");
  }
}

void ChannelRequestDescription2__LV::encode_text(Text_Buf& text_buf) const
{
field_lengthIndicator.encode_text(text_buf);
field_valuePart.encode_text(text_buf);
}

void ChannelRequestDescription2__LV::decode_text(Text_Buf& text_buf)
{
field_lengthIndicator.decode_text(text_buf);
field_valuePart.decode_text(text_buf);
}

void ChannelRequestDescription2__LV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void ChannelRequestDescription2__LV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int ChannelRequestDescription2__LV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  int value_of_length_field0 = 0;
  RAW_Force_Omit field_0_force_omit(0, force_omit, ChannelRequestDescription2__LV_lengthIndicator_descr_.raw->forceomit);
  decoded_field_length = field_lengthIndicator.RAW_decode(ChannelRequestDescription2__LV_lengthIndicator_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  INTEGER tmp0 = field_lengthIndicator.convert_to_Integer(ChannelRequestDescription2__LV_lengthIndicator_descr_);
  field_lengthIndicator = tmp0;
  value_of_length_field0 += tmp0.get_long_long_val() * 8;
  RAW_Force_Omit field_1_force_omit(1, force_omit, OCTETSTRING_descr_.raw->forceomit);
  decoded_field_length = field_valuePart.RAW_decode(OCTETSTRING_descr_, p_buf, min_of_ints(2, limit, value_of_length_field0), local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  value_of_length_field0 -= decoded_field_length;
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int ChannelRequestDescription2__LV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, ChannelRequestDescription2__LV_lengthIndicator_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, OCTETSTRING_descr_.raw);
  encoded_length += 8;
  myleaf.body.node.nodes[0]->calc = CALC_LENGTH;
  myleaf.body.node.nodes[0]->coding_descr = &ChannelRequestDescription2__LV_lengthIndicator_descr_;
  myleaf.body.node.nodes[0]->calcof.lengthto.num_of_fields = 1;
  myleaf.body.node.nodes[0]->calcof.lengthto.unit = 8;
  myleaf.body.node.nodes[0]->calcof.lengthto.offset = 0;
  myleaf.body.node.nodes[0]->calcof.lengthto.fields = init_lengthto_fields_list(1);
  myleaf.body.node.nodes[0]->length = 8;
  myleaf.body.node.nodes[0]->calcof.lengthto.fields[0].level = myleaf.body.node.nodes[1]->curr_pos.level;
  myleaf.body.node.nodes[0]->calcof.lengthto.fields[0].pos = myleaf.body.node.nodes[1]->curr_pos.pos;
  encoded_length += field_valuePart.RAW_encode(OCTETSTRING_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct ChannelRequestDescription2__LV_template::single_value_struct {
INTEGER_template field_lengthIndicator;
OCTETSTRING_template field_valuePart;
};

void ChannelRequestDescription2__LV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_lengthIndicator = ANY_VALUE;
single_value->field_valuePart = ANY_VALUE;
}
}
}

void ChannelRequestDescription2__LV_template::copy_value(const ChannelRequestDescription2__LV& other_value)
{
single_value = new single_value_struct;
if (other_value.lengthIndicator().is_bound()) {
  single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
  single_value->field_lengthIndicator.clean_up();
}
if (other_value.valuePart().is_bound()) {
  single_value->field_valuePart = other_value.valuePart();
} else {
  single_value->field_valuePart.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void ChannelRequestDescription2__LV_template::copy_template(const ChannelRequestDescription2__LV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.lengthIndicator().get_selection()) {
single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
single_value->field_lengthIndicator.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.valuePart().get_selection()) {
single_value->field_valuePart = other_value.valuePart();
} else {
single_value->field_valuePart.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new ChannelRequestDescription2__LV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new ChannelRequestDescription2__LV_template(*other_value.implication_.precondition);
implication_.implied_template = new ChannelRequestDescription2__LV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV.");
break;
}
set_selection(other_value);
}

ChannelRequestDescription2__LV_template::ChannelRequestDescription2__LV_template()
{
}

ChannelRequestDescription2__LV_template::ChannelRequestDescription2__LV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

ChannelRequestDescription2__LV_template::ChannelRequestDescription2__LV_template(const ChannelRequestDescription2__LV& other_value)
{
copy_value(other_value);
}

ChannelRequestDescription2__LV_template::ChannelRequestDescription2__LV_template(const OPTIONAL<ChannelRequestDescription2__LV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ChannelRequestDescription2__LV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV from an unbound optional field.");
}
}

ChannelRequestDescription2__LV_template::ChannelRequestDescription2__LV_template(ChannelRequestDescription2__LV_template* p_precondition, ChannelRequestDescription2__LV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

ChannelRequestDescription2__LV_template::ChannelRequestDescription2__LV_template(Dynamic_Match_Interface<ChannelRequestDescription2__LV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<ChannelRequestDescription2__LV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

ChannelRequestDescription2__LV_template::ChannelRequestDescription2__LV_template(const ChannelRequestDescription2__LV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

ChannelRequestDescription2__LV_template::~ChannelRequestDescription2__LV_template()
{
clean_up();
}

ChannelRequestDescription2__LV_template& ChannelRequestDescription2__LV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

ChannelRequestDescription2__LV_template& ChannelRequestDescription2__LV_template::operator=(const ChannelRequestDescription2__LV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

ChannelRequestDescription2__LV_template& ChannelRequestDescription2__LV_template::operator=(const OPTIONAL<ChannelRequestDescription2__LV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const ChannelRequestDescription2__LV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV.");
}
return *this;
}

ChannelRequestDescription2__LV_template& ChannelRequestDescription2__LV_template::operator=(const ChannelRequestDescription2__LV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean ChannelRequestDescription2__LV_template::match(const ChannelRequestDescription2__LV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.lengthIndicator().is_bound()) return FALSE;
if(!single_value->field_lengthIndicator.match(other_value.lengthIndicator(), legacy))return FALSE;
if(!other_value.valuePart().is_bound()) return FALSE;
if(!single_value->field_valuePart.match(other_value.valuePart(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV.");
}
return FALSE;
}

boolean ChannelRequestDescription2__LV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_lengthIndicator.is_bound()
 || single_value->field_valuePart.is_bound();
}

boolean ChannelRequestDescription2__LV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_lengthIndicator.is_value()
 && single_value->field_valuePart.is_value();
}

void ChannelRequestDescription2__LV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

ChannelRequestDescription2__LV ChannelRequestDescription2__LV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV.");
ChannelRequestDescription2__LV ret_val;
if (single_value->field_lengthIndicator.is_bound()) {
ret_val.lengthIndicator() = single_value->field_lengthIndicator.valueof();
}
if (single_value->field_valuePart.is_bound()) {
ret_val.valuePart() = single_value->field_valuePart.valueof();
}
return ret_val;
}

void ChannelRequestDescription2__LV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new ChannelRequestDescription2__LV_template[list_length];
}

ChannelRequestDescription2__LV_template& ChannelRequestDescription2__LV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV.");
return value_list.list_value[list_index];
}

INTEGER_template& ChannelRequestDescription2__LV_template::lengthIndicator()
{
set_specific();
return single_value->field_lengthIndicator;
}

const INTEGER_template& ChannelRequestDescription2__LV_template::lengthIndicator() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field lengthIndicator of a non-specific template of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV.");
return single_value->field_lengthIndicator;
}

OCTETSTRING_template& ChannelRequestDescription2__LV_template::valuePart()
{
set_specific();
return single_value->field_valuePart;
}

const OCTETSTRING_template& ChannelRequestDescription2__LV_template::valuePart() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field valuePart of a non-specific template of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV.");
return single_value->field_valuePart;
}

int ChannelRequestDescription2__LV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV.");
  }
  return 0;
}

void ChannelRequestDescription2__LV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ lengthIndicator := ");
single_value->field_lengthIndicator.log();
TTCN_Logger::log_event_str(", valuePart := ");
single_value->field_valuePart.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void ChannelRequestDescription2__LV_template::log_match(const ChannelRequestDescription2__LV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_lengthIndicator.match(match_value.lengthIndicator(), legacy)){
TTCN_Logger::log_logmatch_info(".lengthIndicator");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_valuePart.match(match_value.valuePart(), legacy)){
TTCN_Logger::log_logmatch_info(".valuePart");
single_value->field_valuePart.log_match(match_value.valuePart(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ lengthIndicator := ");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::log_event_str(", valuePart := ");
single_value->field_valuePart.log_match(match_value.valuePart(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void ChannelRequestDescription2__LV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (valuePart().is_bound()) valuePart().set_implicit_omit();
}

void ChannelRequestDescription2__LV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_lengthIndicator.encode_text(text_buf);
single_value->field_valuePart.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV.");
}
}

void ChannelRequestDescription2__LV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_lengthIndicator.decode_text(text_buf);
single_value->field_valuePart.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new ChannelRequestDescription2__LV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV.");
}
}

void ChannelRequestDescription2__LV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    ChannelRequestDescription2__LV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.ChannelRequestDescription2_LV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) valuePart().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "valuePart")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          valuePart().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.ChannelRequestDescription2_LV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    ChannelRequestDescription2__LV_template* precondition = new ChannelRequestDescription2__LV_template;
    precondition->set_param(*param.get_elem(0));
    ChannelRequestDescription2__LV_template* implied_template = new ChannelRequestDescription2__LV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = ChannelRequestDescription2__LV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.ChannelRequestDescription2_LV");
  }
  is_ifpresent = param.get_ifpresent();
}

void ChannelRequestDescription2__LV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_lengthIndicator.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelRequestDescription2_LV");
single_value->field_valuePart.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.ChannelRequestDescription2_LV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.ChannelRequestDescription2_LV");
}

boolean ChannelRequestDescription2__LV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean ChannelRequestDescription2__LV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

CipherModeSetting__TV::CipherModeSetting__TV()
{
}

CipherModeSetting__TV::CipherModeSetting__TV(const BITSTRING& par_sC,
    const BITSTRING& par_algorithmIdentifier,
    const BITSTRING& par_elementIdentifier)
  :   field_sC(par_sC),
  field_algorithmIdentifier(par_algorithmIdentifier),
  field_elementIdentifier(par_elementIdentifier)
{
}

CipherModeSetting__TV::CipherModeSetting__TV(const CipherModeSetting__TV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.CipherModeSetting_TV.");
if (other_value.sC().is_bound()) field_sC = other_value.sC();
else field_sC.clean_up();
if (other_value.algorithmIdentifier().is_bound()) field_algorithmIdentifier = other_value.algorithmIdentifier();
else field_algorithmIdentifier.clean_up();
if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
else field_elementIdentifier.clean_up();
}

void CipherModeSetting__TV::clean_up()
{
field_sC.clean_up();
field_algorithmIdentifier.clean_up();
field_elementIdentifier.clean_up();
}

const TTCN_Typedescriptor_t* CipherModeSetting__TV::get_descriptor() const { return &CipherModeSetting__TV_descr_; }
CipherModeSetting__TV& CipherModeSetting__TV::operator=(const CipherModeSetting__TV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.CipherModeSetting_TV.");
  if (other_value.sC().is_bound()) field_sC = other_value.sC();
  else field_sC.clean_up();
  if (other_value.algorithmIdentifier().is_bound()) field_algorithmIdentifier = other_value.algorithmIdentifier();
  else field_algorithmIdentifier.clean_up();
  if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
  else field_elementIdentifier.clean_up();
}
return *this;
}

boolean CipherModeSetting__TV::operator==(const CipherModeSetting__TV& other_value) const
{
return field_sC==other_value.field_sC
  && field_algorithmIdentifier==other_value.field_algorithmIdentifier
  && field_elementIdentifier==other_value.field_elementIdentifier;
}

boolean CipherModeSetting__TV::is_bound() const
{
return (field_sC.is_bound())
  || (field_algorithmIdentifier.is_bound())
  || (field_elementIdentifier.is_bound());
}
boolean CipherModeSetting__TV::is_value() const
{
return field_sC.is_value()
  && field_algorithmIdentifier.is_value()
  && field_elementIdentifier.is_value();
}
void CipherModeSetting__TV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ sC := ");
field_sC.log();
TTCN_Logger::log_event_str(", algorithmIdentifier := ");
field_algorithmIdentifier.log();
TTCN_Logger::log_event_str(", elementIdentifier := ");
field_elementIdentifier.log();
TTCN_Logger::log_event_str(" }");
}

void CipherModeSetting__TV::set_implicit_omit()
{
if (sC().is_bound()) sC().set_implicit_omit();
if (algorithmIdentifier().is_bound()) algorithmIdentifier().set_implicit_omit();
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
}

void CipherModeSetting__TV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (3<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.CipherModeSetting_TV has 3 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) sC().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) algorithmIdentifier().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(2));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "sC")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          sC().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "algorithmIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          algorithmIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.CipherModeSetting_TV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.CipherModeSetting_TV");
  }
}

void CipherModeSetting__TV::encode_text(Text_Buf& text_buf) const
{
field_sC.encode_text(text_buf);
field_algorithmIdentifier.encode_text(text_buf);
field_elementIdentifier.encode_text(text_buf);
}

void CipherModeSetting__TV::decode_text(Text_Buf& text_buf)
{
field_sC.decode_text(text_buf);
field_algorithmIdentifier.decode_text(text_buf);
field_elementIdentifier.decode_text(text_buf);
}

void CipherModeSetting__TV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void CipherModeSetting__TV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int CipherModeSetting__TV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::BIT1_descr_.raw->forceomit);
  decoded_field_length = field_sC.RAW_decode(General__Types::BIT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT3_descr_.raw->forceomit);
  decoded_field_length = field_algorithmIdentifier.RAW_decode(General__Types::BIT3_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_2_force_omit(2, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_elementIdentifier.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_2_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int CipherModeSetting__TV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 3;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(3);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::BIT1_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT3_descr_.raw);
  myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, General__Types::BIT4_descr_.raw);
  encoded_length += field_sC.RAW_encode(General__Types::BIT1_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_algorithmIdentifier.RAW_encode(General__Types::BIT3_descr_, *myleaf.body.node.nodes[1]);
  encoded_length += field_elementIdentifier.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[2]);
  return myleaf.length = encoded_length;
}

struct CipherModeSetting__TV_template::single_value_struct {
BITSTRING_template field_sC;
BITSTRING_template field_algorithmIdentifier;
BITSTRING_template field_elementIdentifier;
};

void CipherModeSetting__TV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_sC = ANY_VALUE;
single_value->field_algorithmIdentifier = ANY_VALUE;
single_value->field_elementIdentifier = ANY_VALUE;
}
}
}

void CipherModeSetting__TV_template::copy_value(const CipherModeSetting__TV& other_value)
{
single_value = new single_value_struct;
if (other_value.sC().is_bound()) {
  single_value->field_sC = other_value.sC();
} else {
  single_value->field_sC.clean_up();
}
if (other_value.algorithmIdentifier().is_bound()) {
  single_value->field_algorithmIdentifier = other_value.algorithmIdentifier();
} else {
  single_value->field_algorithmIdentifier.clean_up();
}
if (other_value.elementIdentifier().is_bound()) {
  single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
  single_value->field_elementIdentifier.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void CipherModeSetting__TV_template::copy_template(const CipherModeSetting__TV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.sC().get_selection()) {
single_value->field_sC = other_value.sC();
} else {
single_value->field_sC.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.algorithmIdentifier().get_selection()) {
single_value->field_algorithmIdentifier = other_value.algorithmIdentifier();
} else {
single_value->field_algorithmIdentifier.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.elementIdentifier().get_selection()) {
single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
single_value->field_elementIdentifier.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new CipherModeSetting__TV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new CipherModeSetting__TV_template(*other_value.implication_.precondition);
implication_.implied_template = new CipherModeSetting__TV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.CipherModeSetting_TV.");
break;
}
set_selection(other_value);
}

CipherModeSetting__TV_template::CipherModeSetting__TV_template()
{
}

CipherModeSetting__TV_template::CipherModeSetting__TV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

CipherModeSetting__TV_template::CipherModeSetting__TV_template(const CipherModeSetting__TV& other_value)
{
copy_value(other_value);
}

CipherModeSetting__TV_template::CipherModeSetting__TV_template(const OPTIONAL<CipherModeSetting__TV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const CipherModeSetting__TV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.CipherModeSetting_TV from an unbound optional field.");
}
}

CipherModeSetting__TV_template::CipherModeSetting__TV_template(CipherModeSetting__TV_template* p_precondition, CipherModeSetting__TV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

CipherModeSetting__TV_template::CipherModeSetting__TV_template(Dynamic_Match_Interface<CipherModeSetting__TV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<CipherModeSetting__TV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

CipherModeSetting__TV_template::CipherModeSetting__TV_template(const CipherModeSetting__TV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

CipherModeSetting__TV_template::~CipherModeSetting__TV_template()
{
clean_up();
}

CipherModeSetting__TV_template& CipherModeSetting__TV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

CipherModeSetting__TV_template& CipherModeSetting__TV_template::operator=(const CipherModeSetting__TV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

CipherModeSetting__TV_template& CipherModeSetting__TV_template::operator=(const OPTIONAL<CipherModeSetting__TV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const CipherModeSetting__TV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.CipherModeSetting_TV.");
}
return *this;
}

CipherModeSetting__TV_template& CipherModeSetting__TV_template::operator=(const CipherModeSetting__TV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean CipherModeSetting__TV_template::match(const CipherModeSetting__TV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.sC().is_bound()) return FALSE;
if(!single_value->field_sC.match(other_value.sC(), legacy))return FALSE;
if(!other_value.algorithmIdentifier().is_bound()) return FALSE;
if(!single_value->field_algorithmIdentifier.match(other_value.algorithmIdentifier(), legacy))return FALSE;
if(!other_value.elementIdentifier().is_bound()) return FALSE;
if(!single_value->field_elementIdentifier.match(other_value.elementIdentifier(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.CipherModeSetting_TV.");
}
return FALSE;
}

boolean CipherModeSetting__TV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_sC.is_bound()
 || single_value->field_algorithmIdentifier.is_bound()
 || single_value->field_elementIdentifier.is_bound();
}

boolean CipherModeSetting__TV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_sC.is_value()
 && single_value->field_algorithmIdentifier.is_value()
 && single_value->field_elementIdentifier.is_value();
}

void CipherModeSetting__TV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

CipherModeSetting__TV CipherModeSetting__TV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.CipherModeSetting_TV.");
CipherModeSetting__TV ret_val;
if (single_value->field_sC.is_bound()) {
ret_val.sC() = single_value->field_sC.valueof();
}
if (single_value->field_algorithmIdentifier.is_bound()) {
ret_val.algorithmIdentifier() = single_value->field_algorithmIdentifier.valueof();
}
if (single_value->field_elementIdentifier.is_bound()) {
ret_val.elementIdentifier() = single_value->field_elementIdentifier.valueof();
}
return ret_val;
}

void CipherModeSetting__TV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.CipherModeSetting_TV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new CipherModeSetting__TV_template[list_length];
}

CipherModeSetting__TV_template& CipherModeSetting__TV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.CipherModeSetting_TV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.CipherModeSetting_TV.");
return value_list.list_value[list_index];
}

BITSTRING_template& CipherModeSetting__TV_template::sC()
{
set_specific();
return single_value->field_sC;
}

const BITSTRING_template& CipherModeSetting__TV_template::sC() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field sC of a non-specific template of type @MobileL3_RRM_Types.CipherModeSetting_TV.");
return single_value->field_sC;
}

BITSTRING_template& CipherModeSetting__TV_template::algorithmIdentifier()
{
set_specific();
return single_value->field_algorithmIdentifier;
}

const BITSTRING_template& CipherModeSetting__TV_template::algorithmIdentifier() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field algorithmIdentifier of a non-specific template of type @MobileL3_RRM_Types.CipherModeSetting_TV.");
return single_value->field_algorithmIdentifier;
}

BITSTRING_template& CipherModeSetting__TV_template::elementIdentifier()
{
set_specific();
return single_value->field_elementIdentifier;
}

const BITSTRING_template& CipherModeSetting__TV_template::elementIdentifier() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field elementIdentifier of a non-specific template of type @MobileL3_RRM_Types.CipherModeSetting_TV.");
return single_value->field_elementIdentifier;
}

int CipherModeSetting__TV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeSetting_TV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 3;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeSetting_TV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeSetting_TV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeSetting_TV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeSetting_TV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeSetting_TV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeSetting_TV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeSetting_TV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeSetting_TV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.CipherModeSetting_TV.");
  }
  return 0;
}

void CipherModeSetting__TV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ sC := ");
single_value->field_sC.log();
TTCN_Logger::log_event_str(", algorithmIdentifier := ");
single_value->field_algorithmIdentifier.log();
TTCN_Logger::log_event_str(", elementIdentifier := ");
single_value->field_elementIdentifier.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void CipherModeSetting__TV_template::log_match(const CipherModeSetting__TV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_sC.match(match_value.sC(), legacy)){
TTCN_Logger::log_logmatch_info(".sC");
single_value->field_sC.log_match(match_value.sC(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_algorithmIdentifier.match(match_value.algorithmIdentifier(), legacy)){
TTCN_Logger::log_logmatch_info(".algorithmIdentifier");
single_value->field_algorithmIdentifier.log_match(match_value.algorithmIdentifier(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_elementIdentifier.match(match_value.elementIdentifier(), legacy)){
TTCN_Logger::log_logmatch_info(".elementIdentifier");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ sC := ");
single_value->field_sC.log_match(match_value.sC(), legacy);
TTCN_Logger::log_event_str(", algorithmIdentifier := ");
single_value->field_algorithmIdentifier.log_match(match_value.algorithmIdentifier(), legacy);
TTCN_Logger::log_event_str(", elementIdentifier := ");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void CipherModeSetting__TV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (sC().is_bound()) sC().set_implicit_omit();
if (algorithmIdentifier().is_bound()) algorithmIdentifier().set_implicit_omit();
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
}

void CipherModeSetting__TV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_sC.encode_text(text_buf);
single_value->field_algorithmIdentifier.encode_text(text_buf);
single_value->field_elementIdentifier.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.CipherModeSetting_TV.");
}
}

void CipherModeSetting__TV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_sC.decode_text(text_buf);
single_value->field_algorithmIdentifier.decode_text(text_buf);
single_value->field_elementIdentifier.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new CipherModeSetting__TV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.CipherModeSetting_TV.");
}
}

void CipherModeSetting__TV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    CipherModeSetting__TV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (3<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.CipherModeSetting_TV has 3 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) sC().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) algorithmIdentifier().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(2));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "sC")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          sC().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "algorithmIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          algorithmIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.CipherModeSetting_TV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    CipherModeSetting__TV_template* precondition = new CipherModeSetting__TV_template;
    precondition->set_param(*param.get_elem(0));
    CipherModeSetting__TV_template* implied_template = new CipherModeSetting__TV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = CipherModeSetting__TV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.CipherModeSetting_TV");
  }
  is_ifpresent = param.get_ifpresent();
}

void CipherModeSetting__TV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_sC.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.CipherModeSetting_TV");
single_value->field_algorithmIdentifier.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.CipherModeSetting_TV");
single_value->field_elementIdentifier.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.CipherModeSetting_TV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.CipherModeSetting_TV");
}

boolean CipherModeSetting__TV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean CipherModeSetting__TV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

CipherModeSetting__V::CipherModeSetting__V()
{
}

CipherModeSetting__V::CipherModeSetting__V(const BITSTRING& par_sC,
    const BITSTRING& par_algorithmIdentifier)
  :   field_sC(par_sC),
  field_algorithmIdentifier(par_algorithmIdentifier)
{
}

CipherModeSetting__V::CipherModeSetting__V(const CipherModeSetting__V& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.CipherModeSetting_V.");
if (other_value.sC().is_bound()) field_sC = other_value.sC();
else field_sC.clean_up();
if (other_value.algorithmIdentifier().is_bound()) field_algorithmIdentifier = other_value.algorithmIdentifier();
else field_algorithmIdentifier.clean_up();
}

void CipherModeSetting__V::clean_up()
{
field_sC.clean_up();
field_algorithmIdentifier.clean_up();
}

const TTCN_Typedescriptor_t* CipherModeSetting__V::get_descriptor() const { return &CipherModeSetting__V_descr_; }
CipherModeSetting__V& CipherModeSetting__V::operator=(const CipherModeSetting__V& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.CipherModeSetting_V.");
  if (other_value.sC().is_bound()) field_sC = other_value.sC();
  else field_sC.clean_up();
  if (other_value.algorithmIdentifier().is_bound()) field_algorithmIdentifier = other_value.algorithmIdentifier();
  else field_algorithmIdentifier.clean_up();
}
return *this;
}

boolean CipherModeSetting__V::operator==(const CipherModeSetting__V& other_value) const
{
return field_sC==other_value.field_sC
  && field_algorithmIdentifier==other_value.field_algorithmIdentifier;
}

boolean CipherModeSetting__V::is_bound() const
{
return (field_sC.is_bound())
  || (field_algorithmIdentifier.is_bound());
}
boolean CipherModeSetting__V::is_value() const
{
return field_sC.is_value()
  && field_algorithmIdentifier.is_value();
}
void CipherModeSetting__V::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ sC := ");
field_sC.log();
TTCN_Logger::log_event_str(", algorithmIdentifier := ");
field_algorithmIdentifier.log();
TTCN_Logger::log_event_str(" }");
}

void CipherModeSetting__V::set_implicit_omit()
{
if (sC().is_bound()) sC().set_implicit_omit();
if (algorithmIdentifier().is_bound()) algorithmIdentifier().set_implicit_omit();
}

void CipherModeSetting__V::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.CipherModeSetting_V has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) sC().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) algorithmIdentifier().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "sC")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          sC().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "algorithmIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          algorithmIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.CipherModeSetting_V: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.CipherModeSetting_V");
  }
}

void CipherModeSetting__V::encode_text(Text_Buf& text_buf) const
{
field_sC.encode_text(text_buf);
field_algorithmIdentifier.encode_text(text_buf);
}

void CipherModeSetting__V::decode_text(Text_Buf& text_buf)
{
field_sC.decode_text(text_buf);
field_algorithmIdentifier.decode_text(text_buf);
}

void CipherModeSetting__V::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void CipherModeSetting__V::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int CipherModeSetting__V::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::BIT1_descr_.raw->forceomit);
  decoded_field_length = field_sC.RAW_decode(General__Types::BIT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT3_descr_.raw->forceomit);
  decoded_field_length = field_algorithmIdentifier.RAW_decode(General__Types::BIT3_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int CipherModeSetting__V::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::BIT1_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT3_descr_.raw);
  encoded_length += field_sC.RAW_encode(General__Types::BIT1_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_algorithmIdentifier.RAW_encode(General__Types::BIT3_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct CipherModeSetting__V_template::single_value_struct {
BITSTRING_template field_sC;
BITSTRING_template field_algorithmIdentifier;
};

void CipherModeSetting__V_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_sC = ANY_VALUE;
single_value->field_algorithmIdentifier = ANY_VALUE;
}
}
}

void CipherModeSetting__V_template::copy_value(const CipherModeSetting__V& other_value)
{
single_value = new single_value_struct;
if (other_value.sC().is_bound()) {
  single_value->field_sC = other_value.sC();
} else {
  single_value->field_sC.clean_up();
}
if (other_value.algorithmIdentifier().is_bound()) {
  single_value->field_algorithmIdentifier = other_value.algorithmIdentifier();
} else {
  single_value->field_algorithmIdentifier.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void CipherModeSetting__V_template::copy_template(const CipherModeSetting__V_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.sC().get_selection()) {
single_value->field_sC = other_value.sC();
} else {
single_value->field_sC.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.algorithmIdentifier().get_selection()) {
single_value->field_algorithmIdentifier = other_value.algorithmIdentifier();
} else {
single_value->field_algorithmIdentifier.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new CipherModeSetting__V_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new CipherModeSetting__V_template(*other_value.implication_.precondition);
implication_.implied_template = new CipherModeSetting__V_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.CipherModeSetting_V.");
break;
}
set_selection(other_value);
}

CipherModeSetting__V_template::CipherModeSetting__V_template()
{
}

CipherModeSetting__V_template::CipherModeSetting__V_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

CipherModeSetting__V_template::CipherModeSetting__V_template(const CipherModeSetting__V& other_value)
{
copy_value(other_value);
}

CipherModeSetting__V_template::CipherModeSetting__V_template(const OPTIONAL<CipherModeSetting__V>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const CipherModeSetting__V&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.CipherModeSetting_V from an unbound optional field.");
}
}

CipherModeSetting__V_template::CipherModeSetting__V_template(CipherModeSetting__V_template* p_precondition, CipherModeSetting__V_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

CipherModeSetting__V_template::CipherModeSetting__V_template(Dynamic_Match_Interface<CipherModeSetting__V>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<CipherModeSetting__V>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

CipherModeSetting__V_template::CipherModeSetting__V_template(const CipherModeSetting__V_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

CipherModeSetting__V_template::~CipherModeSetting__V_template()
{
clean_up();
}

CipherModeSetting__V_template& CipherModeSetting__V_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

CipherModeSetting__V_template& CipherModeSetting__V_template::operator=(const CipherModeSetting__V& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

CipherModeSetting__V_template& CipherModeSetting__V_template::operator=(const OPTIONAL<CipherModeSetting__V>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const CipherModeSetting__V&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.CipherModeSetting_V.");
}
return *this;
}

CipherModeSetting__V_template& CipherModeSetting__V_template::operator=(const CipherModeSetting__V_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean CipherModeSetting__V_template::match(const CipherModeSetting__V& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.sC().is_bound()) return FALSE;
if(!single_value->field_sC.match(other_value.sC(), legacy))return FALSE;
if(!other_value.algorithmIdentifier().is_bound()) return FALSE;
if(!single_value->field_algorithmIdentifier.match(other_value.algorithmIdentifier(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.CipherModeSetting_V.");
}
return FALSE;
}

boolean CipherModeSetting__V_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_sC.is_bound()
 || single_value->field_algorithmIdentifier.is_bound();
}

boolean CipherModeSetting__V_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_sC.is_value()
 && single_value->field_algorithmIdentifier.is_value();
}

void CipherModeSetting__V_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

CipherModeSetting__V CipherModeSetting__V_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.CipherModeSetting_V.");
CipherModeSetting__V ret_val;
if (single_value->field_sC.is_bound()) {
ret_val.sC() = single_value->field_sC.valueof();
}
if (single_value->field_algorithmIdentifier.is_bound()) {
ret_val.algorithmIdentifier() = single_value->field_algorithmIdentifier.valueof();
}
return ret_val;
}

void CipherModeSetting__V_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.CipherModeSetting_V.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new CipherModeSetting__V_template[list_length];
}

CipherModeSetting__V_template& CipherModeSetting__V_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.CipherModeSetting_V.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.CipherModeSetting_V.");
return value_list.list_value[list_index];
}

BITSTRING_template& CipherModeSetting__V_template::sC()
{
set_specific();
return single_value->field_sC;
}

const BITSTRING_template& CipherModeSetting__V_template::sC() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field sC of a non-specific template of type @MobileL3_RRM_Types.CipherModeSetting_V.");
return single_value->field_sC;
}

BITSTRING_template& CipherModeSetting__V_template::algorithmIdentifier()
{
set_specific();
return single_value->field_algorithmIdentifier;
}

const BITSTRING_template& CipherModeSetting__V_template::algorithmIdentifier() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field algorithmIdentifier of a non-specific template of type @MobileL3_RRM_Types.CipherModeSetting_V.");
return single_value->field_algorithmIdentifier;
}

int CipherModeSetting__V_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeSetting_V which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeSetting_V containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeSetting_V containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeSetting_V containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeSetting_V containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeSetting_V containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeSetting_V containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeSetting_V containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeSetting_V containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.CipherModeSetting_V.");
  }
  return 0;
}

void CipherModeSetting__V_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ sC := ");
single_value->field_sC.log();
TTCN_Logger::log_event_str(", algorithmIdentifier := ");
single_value->field_algorithmIdentifier.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void CipherModeSetting__V_template::log_match(const CipherModeSetting__V& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_sC.match(match_value.sC(), legacy)){
TTCN_Logger::log_logmatch_info(".sC");
single_value->field_sC.log_match(match_value.sC(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_algorithmIdentifier.match(match_value.algorithmIdentifier(), legacy)){
TTCN_Logger::log_logmatch_info(".algorithmIdentifier");
single_value->field_algorithmIdentifier.log_match(match_value.algorithmIdentifier(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ sC := ");
single_value->field_sC.log_match(match_value.sC(), legacy);
TTCN_Logger::log_event_str(", algorithmIdentifier := ");
single_value->field_algorithmIdentifier.log_match(match_value.algorithmIdentifier(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void CipherModeSetting__V_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (sC().is_bound()) sC().set_implicit_omit();
if (algorithmIdentifier().is_bound()) algorithmIdentifier().set_implicit_omit();
}

void CipherModeSetting__V_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_sC.encode_text(text_buf);
single_value->field_algorithmIdentifier.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.CipherModeSetting_V.");
}
}

void CipherModeSetting__V_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_sC.decode_text(text_buf);
single_value->field_algorithmIdentifier.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new CipherModeSetting__V_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.CipherModeSetting_V.");
}
}

void CipherModeSetting__V_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    CipherModeSetting__V_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.CipherModeSetting_V has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) sC().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) algorithmIdentifier().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "sC")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          sC().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "algorithmIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          algorithmIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.CipherModeSetting_V: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    CipherModeSetting__V_template* precondition = new CipherModeSetting__V_template;
    precondition->set_param(*param.get_elem(0));
    CipherModeSetting__V_template* implied_template = new CipherModeSetting__V_template;
    implied_template->set_param(*param.get_elem(1));
    *this = CipherModeSetting__V_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.CipherModeSetting_V");
  }
  is_ifpresent = param.get_ifpresent();
}

void CipherModeSetting__V_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_sC.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.CipherModeSetting_V");
single_value->field_algorithmIdentifier.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.CipherModeSetting_V");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.CipherModeSetting_V");
}

boolean CipherModeSetting__V_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean CipherModeSetting__V_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

CipherModeResponse__TV::CipherModeResponse__TV()
{
}

CipherModeResponse__TV::CipherModeResponse__TV(const BITSTRING& par_cR,
    const BITSTRING& par_spare,
    const BITSTRING& par_elementIdentifier)
  :   field_cR(par_cR),
  field_spare(par_spare),
  field_elementIdentifier(par_elementIdentifier)
{
}

CipherModeResponse__TV::CipherModeResponse__TV(const CipherModeResponse__TV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.CipherModeResponse_TV.");
if (other_value.cR().is_bound()) field_cR = other_value.cR();
else field_cR.clean_up();
if (other_value.spare().is_bound()) field_spare = other_value.spare();
else field_spare.clean_up();
if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
else field_elementIdentifier.clean_up();
}

void CipherModeResponse__TV::clean_up()
{
field_cR.clean_up();
field_spare.clean_up();
field_elementIdentifier.clean_up();
}

const TTCN_Typedescriptor_t* CipherModeResponse__TV::get_descriptor() const { return &CipherModeResponse__TV_descr_; }
CipherModeResponse__TV& CipherModeResponse__TV::operator=(const CipherModeResponse__TV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.CipherModeResponse_TV.");
  if (other_value.cR().is_bound()) field_cR = other_value.cR();
  else field_cR.clean_up();
  if (other_value.spare().is_bound()) field_spare = other_value.spare();
  else field_spare.clean_up();
  if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
  else field_elementIdentifier.clean_up();
}
return *this;
}

boolean CipherModeResponse__TV::operator==(const CipherModeResponse__TV& other_value) const
{
return field_cR==other_value.field_cR
  && field_spare==other_value.field_spare
  && field_elementIdentifier==other_value.field_elementIdentifier;
}

boolean CipherModeResponse__TV::is_bound() const
{
return (field_cR.is_bound())
  || (field_spare.is_bound())
  || (field_elementIdentifier.is_bound());
}
boolean CipherModeResponse__TV::is_value() const
{
return field_cR.is_value()
  && field_spare.is_value()
  && field_elementIdentifier.is_value();
}
void CipherModeResponse__TV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ cR := ");
field_cR.log();
TTCN_Logger::log_event_str(", spare := ");
field_spare.log();
TTCN_Logger::log_event_str(", elementIdentifier := ");
field_elementIdentifier.log();
TTCN_Logger::log_event_str(" }");
}

void CipherModeResponse__TV::set_implicit_omit()
{
if (cR().is_bound()) cR().set_implicit_omit();
if (spare().is_bound()) spare().set_implicit_omit();
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
}

void CipherModeResponse__TV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (3<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.CipherModeResponse_TV has 3 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) cR().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) spare().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(2));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "cR")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          cR().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "spare")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          spare().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.CipherModeResponse_TV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.CipherModeResponse_TV");
  }
}

void CipherModeResponse__TV::encode_text(Text_Buf& text_buf) const
{
field_cR.encode_text(text_buf);
field_spare.encode_text(text_buf);
field_elementIdentifier.encode_text(text_buf);
}

void CipherModeResponse__TV::decode_text(Text_Buf& text_buf)
{
field_cR.decode_text(text_buf);
field_spare.decode_text(text_buf);
field_elementIdentifier.decode_text(text_buf);
}

void CipherModeResponse__TV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void CipherModeResponse__TV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int CipherModeResponse__TV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::BIT1_descr_.raw->forceomit);
  decoded_field_length = field_cR.RAW_decode(General__Types::BIT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT3_descr_.raw->forceomit);
  decoded_field_length = field_spare.RAW_decode(General__Types::BIT3_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_2_force_omit(2, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_elementIdentifier.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_2_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int CipherModeResponse__TV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 3;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(3);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::BIT1_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT3_descr_.raw);
  myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, General__Types::BIT4_descr_.raw);
  encoded_length += field_cR.RAW_encode(General__Types::BIT1_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_spare.RAW_encode(General__Types::BIT3_descr_, *myleaf.body.node.nodes[1]);
  encoded_length += field_elementIdentifier.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[2]);
  return myleaf.length = encoded_length;
}

struct CipherModeResponse__TV_template::single_value_struct {
BITSTRING_template field_cR;
BITSTRING_template field_spare;
BITSTRING_template field_elementIdentifier;
};

void CipherModeResponse__TV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_cR = ANY_VALUE;
single_value->field_spare = ANY_VALUE;
single_value->field_elementIdentifier = ANY_VALUE;
}
}
}

void CipherModeResponse__TV_template::copy_value(const CipherModeResponse__TV& other_value)
{
single_value = new single_value_struct;
if (other_value.cR().is_bound()) {
  single_value->field_cR = other_value.cR();
} else {
  single_value->field_cR.clean_up();
}
if (other_value.spare().is_bound()) {
  single_value->field_spare = other_value.spare();
} else {
  single_value->field_spare.clean_up();
}
if (other_value.elementIdentifier().is_bound()) {
  single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
  single_value->field_elementIdentifier.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void CipherModeResponse__TV_template::copy_template(const CipherModeResponse__TV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.cR().get_selection()) {
single_value->field_cR = other_value.cR();
} else {
single_value->field_cR.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.spare().get_selection()) {
single_value->field_spare = other_value.spare();
} else {
single_value->field_spare.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.elementIdentifier().get_selection()) {
single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
single_value->field_elementIdentifier.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new CipherModeResponse__TV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new CipherModeResponse__TV_template(*other_value.implication_.precondition);
implication_.implied_template = new CipherModeResponse__TV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.CipherModeResponse_TV.");
break;
}
set_selection(other_value);
}

CipherModeResponse__TV_template::CipherModeResponse__TV_template()
{
}

CipherModeResponse__TV_template::CipherModeResponse__TV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

CipherModeResponse__TV_template::CipherModeResponse__TV_template(const CipherModeResponse__TV& other_value)
{
copy_value(other_value);
}

CipherModeResponse__TV_template::CipherModeResponse__TV_template(const OPTIONAL<CipherModeResponse__TV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const CipherModeResponse__TV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.CipherModeResponse_TV from an unbound optional field.");
}
}

CipherModeResponse__TV_template::CipherModeResponse__TV_template(CipherModeResponse__TV_template* p_precondition, CipherModeResponse__TV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

CipherModeResponse__TV_template::CipherModeResponse__TV_template(Dynamic_Match_Interface<CipherModeResponse__TV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<CipherModeResponse__TV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

CipherModeResponse__TV_template::CipherModeResponse__TV_template(const CipherModeResponse__TV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

CipherModeResponse__TV_template::~CipherModeResponse__TV_template()
{
clean_up();
}

CipherModeResponse__TV_template& CipherModeResponse__TV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

CipherModeResponse__TV_template& CipherModeResponse__TV_template::operator=(const CipherModeResponse__TV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

CipherModeResponse__TV_template& CipherModeResponse__TV_template::operator=(const OPTIONAL<CipherModeResponse__TV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const CipherModeResponse__TV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.CipherModeResponse_TV.");
}
return *this;
}

CipherModeResponse__TV_template& CipherModeResponse__TV_template::operator=(const CipherModeResponse__TV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean CipherModeResponse__TV_template::match(const CipherModeResponse__TV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.cR().is_bound()) return FALSE;
if(!single_value->field_cR.match(other_value.cR(), legacy))return FALSE;
if(!other_value.spare().is_bound()) return FALSE;
if(!single_value->field_spare.match(other_value.spare(), legacy))return FALSE;
if(!other_value.elementIdentifier().is_bound()) return FALSE;
if(!single_value->field_elementIdentifier.match(other_value.elementIdentifier(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.CipherModeResponse_TV.");
}
return FALSE;
}

boolean CipherModeResponse__TV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_cR.is_bound()
 || single_value->field_spare.is_bound()
 || single_value->field_elementIdentifier.is_bound();
}

boolean CipherModeResponse__TV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_cR.is_value()
 && single_value->field_spare.is_value()
 && single_value->field_elementIdentifier.is_value();
}

void CipherModeResponse__TV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

CipherModeResponse__TV CipherModeResponse__TV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.CipherModeResponse_TV.");
CipherModeResponse__TV ret_val;
if (single_value->field_cR.is_bound()) {
ret_val.cR() = single_value->field_cR.valueof();
}
if (single_value->field_spare.is_bound()) {
ret_val.spare() = single_value->field_spare.valueof();
}
if (single_value->field_elementIdentifier.is_bound()) {
ret_val.elementIdentifier() = single_value->field_elementIdentifier.valueof();
}
return ret_val;
}

void CipherModeResponse__TV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.CipherModeResponse_TV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new CipherModeResponse__TV_template[list_length];
}

CipherModeResponse__TV_template& CipherModeResponse__TV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.CipherModeResponse_TV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.CipherModeResponse_TV.");
return value_list.list_value[list_index];
}

BITSTRING_template& CipherModeResponse__TV_template::cR()
{
set_specific();
return single_value->field_cR;
}

const BITSTRING_template& CipherModeResponse__TV_template::cR() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field cR of a non-specific template of type @MobileL3_RRM_Types.CipherModeResponse_TV.");
return single_value->field_cR;
}

BITSTRING_template& CipherModeResponse__TV_template::spare()
{
set_specific();
return single_value->field_spare;
}

const BITSTRING_template& CipherModeResponse__TV_template::spare() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field spare of a non-specific template of type @MobileL3_RRM_Types.CipherModeResponse_TV.");
return single_value->field_spare;
}

BITSTRING_template& CipherModeResponse__TV_template::elementIdentifier()
{
set_specific();
return single_value->field_elementIdentifier;
}

const BITSTRING_template& CipherModeResponse__TV_template::elementIdentifier() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field elementIdentifier of a non-specific template of type @MobileL3_RRM_Types.CipherModeResponse_TV.");
return single_value->field_elementIdentifier;
}

int CipherModeResponse__TV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeResponse_TV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 3;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeResponse_TV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeResponse_TV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeResponse_TV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeResponse_TV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeResponse_TV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeResponse_TV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeResponse_TV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeResponse_TV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.CipherModeResponse_TV.");
  }
  return 0;
}

void CipherModeResponse__TV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ cR := ");
single_value->field_cR.log();
TTCN_Logger::log_event_str(", spare := ");
single_value->field_spare.log();
TTCN_Logger::log_event_str(", elementIdentifier := ");
single_value->field_elementIdentifier.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void CipherModeResponse__TV_template::log_match(const CipherModeResponse__TV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_cR.match(match_value.cR(), legacy)){
TTCN_Logger::log_logmatch_info(".cR");
single_value->field_cR.log_match(match_value.cR(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_spare.match(match_value.spare(), legacy)){
TTCN_Logger::log_logmatch_info(".spare");
single_value->field_spare.log_match(match_value.spare(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_elementIdentifier.match(match_value.elementIdentifier(), legacy)){
TTCN_Logger::log_logmatch_info(".elementIdentifier");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ cR := ");
single_value->field_cR.log_match(match_value.cR(), legacy);
TTCN_Logger::log_event_str(", spare := ");
single_value->field_spare.log_match(match_value.spare(), legacy);
TTCN_Logger::log_event_str(", elementIdentifier := ");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void CipherModeResponse__TV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (cR().is_bound()) cR().set_implicit_omit();
if (spare().is_bound()) spare().set_implicit_omit();
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
}

void CipherModeResponse__TV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_cR.encode_text(text_buf);
single_value->field_spare.encode_text(text_buf);
single_value->field_elementIdentifier.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.CipherModeResponse_TV.");
}
}

void CipherModeResponse__TV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_cR.decode_text(text_buf);
single_value->field_spare.decode_text(text_buf);
single_value->field_elementIdentifier.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new CipherModeResponse__TV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.CipherModeResponse_TV.");
}
}

void CipherModeResponse__TV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    CipherModeResponse__TV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (3<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.CipherModeResponse_TV has 3 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) cR().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) spare().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(2));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "cR")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          cR().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "spare")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          spare().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.CipherModeResponse_TV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    CipherModeResponse__TV_template* precondition = new CipherModeResponse__TV_template;
    precondition->set_param(*param.get_elem(0));
    CipherModeResponse__TV_template* implied_template = new CipherModeResponse__TV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = CipherModeResponse__TV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.CipherModeResponse_TV");
  }
  is_ifpresent = param.get_ifpresent();
}

void CipherModeResponse__TV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_cR.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.CipherModeResponse_TV");
single_value->field_spare.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.CipherModeResponse_TV");
single_value->field_elementIdentifier.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.CipherModeResponse_TV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.CipherModeResponse_TV");
}

boolean CipherModeResponse__TV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean CipherModeResponse__TV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

CipherModeResponse__V::CipherModeResponse__V()
{
}

CipherModeResponse__V::CipherModeResponse__V(const BITSTRING& par_cR,
    const BITSTRING& par_spare)
  :   field_cR(par_cR),
  field_spare(par_spare)
{
}

CipherModeResponse__V::CipherModeResponse__V(const CipherModeResponse__V& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.CipherModeResponse_V.");
if (other_value.cR().is_bound()) field_cR = other_value.cR();
else field_cR.clean_up();
if (other_value.spare().is_bound()) field_spare = other_value.spare();
else field_spare.clean_up();
}

void CipherModeResponse__V::clean_up()
{
field_cR.clean_up();
field_spare.clean_up();
}

const TTCN_Typedescriptor_t* CipherModeResponse__V::get_descriptor() const { return &CipherModeResponse__V_descr_; }
CipherModeResponse__V& CipherModeResponse__V::operator=(const CipherModeResponse__V& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.CipherModeResponse_V.");
  if (other_value.cR().is_bound()) field_cR = other_value.cR();
  else field_cR.clean_up();
  if (other_value.spare().is_bound()) field_spare = other_value.spare();
  else field_spare.clean_up();
}
return *this;
}

boolean CipherModeResponse__V::operator==(const CipherModeResponse__V& other_value) const
{
return field_cR==other_value.field_cR
  && field_spare==other_value.field_spare;
}

boolean CipherModeResponse__V::is_bound() const
{
return (field_cR.is_bound())
  || (field_spare.is_bound());
}
boolean CipherModeResponse__V::is_value() const
{
return field_cR.is_value()
  && field_spare.is_value();
}
void CipherModeResponse__V::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ cR := ");
field_cR.log();
TTCN_Logger::log_event_str(", spare := ");
field_spare.log();
TTCN_Logger::log_event_str(" }");
}

void CipherModeResponse__V::set_implicit_omit()
{
if (cR().is_bound()) cR().set_implicit_omit();
if (spare().is_bound()) spare().set_implicit_omit();
}

void CipherModeResponse__V::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.CipherModeResponse_V has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) cR().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) spare().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "cR")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          cR().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "spare")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          spare().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.CipherModeResponse_V: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.CipherModeResponse_V");
  }
}

void CipherModeResponse__V::encode_text(Text_Buf& text_buf) const
{
field_cR.encode_text(text_buf);
field_spare.encode_text(text_buf);
}

void CipherModeResponse__V::decode_text(Text_Buf& text_buf)
{
field_cR.decode_text(text_buf);
field_spare.decode_text(text_buf);
}

void CipherModeResponse__V::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void CipherModeResponse__V::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int CipherModeResponse__V::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::BIT1_descr_.raw->forceomit);
  decoded_field_length = field_cR.RAW_decode(General__Types::BIT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT3_descr_.raw->forceomit);
  decoded_field_length = field_spare.RAW_decode(General__Types::BIT3_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int CipherModeResponse__V::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::BIT1_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT3_descr_.raw);
  encoded_length += field_cR.RAW_encode(General__Types::BIT1_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_spare.RAW_encode(General__Types::BIT3_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct CipherModeResponse__V_template::single_value_struct {
BITSTRING_template field_cR;
BITSTRING_template field_spare;
};

void CipherModeResponse__V_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_cR = ANY_VALUE;
single_value->field_spare = ANY_VALUE;
}
}
}

void CipherModeResponse__V_template::copy_value(const CipherModeResponse__V& other_value)
{
single_value = new single_value_struct;
if (other_value.cR().is_bound()) {
  single_value->field_cR = other_value.cR();
} else {
  single_value->field_cR.clean_up();
}
if (other_value.spare().is_bound()) {
  single_value->field_spare = other_value.spare();
} else {
  single_value->field_spare.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void CipherModeResponse__V_template::copy_template(const CipherModeResponse__V_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.cR().get_selection()) {
single_value->field_cR = other_value.cR();
} else {
single_value->field_cR.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.spare().get_selection()) {
single_value->field_spare = other_value.spare();
} else {
single_value->field_spare.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new CipherModeResponse__V_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new CipherModeResponse__V_template(*other_value.implication_.precondition);
implication_.implied_template = new CipherModeResponse__V_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.CipherModeResponse_V.");
break;
}
set_selection(other_value);
}

CipherModeResponse__V_template::CipherModeResponse__V_template()
{
}

CipherModeResponse__V_template::CipherModeResponse__V_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

CipherModeResponse__V_template::CipherModeResponse__V_template(const CipherModeResponse__V& other_value)
{
copy_value(other_value);
}

CipherModeResponse__V_template::CipherModeResponse__V_template(const OPTIONAL<CipherModeResponse__V>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const CipherModeResponse__V&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.CipherModeResponse_V from an unbound optional field.");
}
}

CipherModeResponse__V_template::CipherModeResponse__V_template(CipherModeResponse__V_template* p_precondition, CipherModeResponse__V_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

CipherModeResponse__V_template::CipherModeResponse__V_template(Dynamic_Match_Interface<CipherModeResponse__V>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<CipherModeResponse__V>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

CipherModeResponse__V_template::CipherModeResponse__V_template(const CipherModeResponse__V_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

CipherModeResponse__V_template::~CipherModeResponse__V_template()
{
clean_up();
}

CipherModeResponse__V_template& CipherModeResponse__V_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

CipherModeResponse__V_template& CipherModeResponse__V_template::operator=(const CipherModeResponse__V& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

CipherModeResponse__V_template& CipherModeResponse__V_template::operator=(const OPTIONAL<CipherModeResponse__V>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const CipherModeResponse__V&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.CipherModeResponse_V.");
}
return *this;
}

CipherModeResponse__V_template& CipherModeResponse__V_template::operator=(const CipherModeResponse__V_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean CipherModeResponse__V_template::match(const CipherModeResponse__V& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.cR().is_bound()) return FALSE;
if(!single_value->field_cR.match(other_value.cR(), legacy))return FALSE;
if(!other_value.spare().is_bound()) return FALSE;
if(!single_value->field_spare.match(other_value.spare(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.CipherModeResponse_V.");
}
return FALSE;
}

boolean CipherModeResponse__V_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_cR.is_bound()
 || single_value->field_spare.is_bound();
}

boolean CipherModeResponse__V_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_cR.is_value()
 && single_value->field_spare.is_value();
}

void CipherModeResponse__V_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

CipherModeResponse__V CipherModeResponse__V_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.CipherModeResponse_V.");
CipherModeResponse__V ret_val;
if (single_value->field_cR.is_bound()) {
ret_val.cR() = single_value->field_cR.valueof();
}
if (single_value->field_spare.is_bound()) {
ret_val.spare() = single_value->field_spare.valueof();
}
return ret_val;
}

void CipherModeResponse__V_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.CipherModeResponse_V.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new CipherModeResponse__V_template[list_length];
}

CipherModeResponse__V_template& CipherModeResponse__V_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.CipherModeResponse_V.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.CipherModeResponse_V.");
return value_list.list_value[list_index];
}

BITSTRING_template& CipherModeResponse__V_template::cR()
{
set_specific();
return single_value->field_cR;
}

const BITSTRING_template& CipherModeResponse__V_template::cR() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field cR of a non-specific template of type @MobileL3_RRM_Types.CipherModeResponse_V.");
return single_value->field_cR;
}

BITSTRING_template& CipherModeResponse__V_template::spare()
{
set_specific();
return single_value->field_spare;
}

const BITSTRING_template& CipherModeResponse__V_template::spare() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field spare of a non-specific template of type @MobileL3_RRM_Types.CipherModeResponse_V.");
return single_value->field_spare;
}

int CipherModeResponse__V_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeResponse_V which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeResponse_V containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeResponse_V containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeResponse_V containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeResponse_V containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeResponse_V containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeResponse_V containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeResponse_V containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.CipherModeResponse_V containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.CipherModeResponse_V.");
  }
  return 0;
}

void CipherModeResponse__V_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ cR := ");
single_value->field_cR.log();
TTCN_Logger::log_event_str(", spare := ");
single_value->field_spare.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void CipherModeResponse__V_template::log_match(const CipherModeResponse__V& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_cR.match(match_value.cR(), legacy)){
TTCN_Logger::log_logmatch_info(".cR");
single_value->field_cR.log_match(match_value.cR(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_spare.match(match_value.spare(), legacy)){
TTCN_Logger::log_logmatch_info(".spare");
single_value->field_spare.log_match(match_value.spare(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ cR := ");
single_value->field_cR.log_match(match_value.cR(), legacy);
TTCN_Logger::log_event_str(", spare := ");
single_value->field_spare.log_match(match_value.spare(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void CipherModeResponse__V_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (cR().is_bound()) cR().set_implicit_omit();
if (spare().is_bound()) spare().set_implicit_omit();
}

void CipherModeResponse__V_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_cR.encode_text(text_buf);
single_value->field_spare.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.CipherModeResponse_V.");
}
}

void CipherModeResponse__V_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_cR.decode_text(text_buf);
single_value->field_spare.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new CipherModeResponse__V_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.CipherModeResponse_V.");
}
}

void CipherModeResponse__V_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    CipherModeResponse__V_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.CipherModeResponse_V has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) cR().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) spare().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "cR")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          cR().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "spare")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          spare().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.CipherModeResponse_V: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    CipherModeResponse__V_template* precondition = new CipherModeResponse__V_template;
    precondition->set_param(*param.get_elem(0));
    CipherModeResponse__V_template* implied_template = new CipherModeResponse__V_template;
    implied_template->set_param(*param.get_elem(1));
    *this = CipherModeResponse__V_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.CipherModeResponse_V");
  }
  is_ifpresent = param.get_ifpresent();
}

void CipherModeResponse__V_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_cR.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.CipherModeResponse_V");
single_value->field_spare.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.CipherModeResponse_V");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.CipherModeResponse_V");
}

boolean CipherModeResponse__V_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean CipherModeResponse__V_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

DTM__InformationDetails__LV::DTM__InformationDetails__LV()
{
}

DTM__InformationDetails__LV::DTM__InformationDetails__LV(const INTEGER& par_lengthIndicator,
    const OCTETSTRING& par_valuePart)
  :   field_lengthIndicator(par_lengthIndicator),
  field_valuePart(par_valuePart)
{
}

DTM__InformationDetails__LV::DTM__InformationDetails__LV(const DTM__InformationDetails__LV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.DTM_InformationDetails_LV.");
if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
else field_lengthIndicator.clean_up();
if (other_value.valuePart().is_bound()) field_valuePart = other_value.valuePart();
else field_valuePart.clean_up();
}

void DTM__InformationDetails__LV::clean_up()
{
field_lengthIndicator.clean_up();
field_valuePart.clean_up();
}

const TTCN_Typedescriptor_t* DTM__InformationDetails__LV::get_descriptor() const { return &DTM__InformationDetails__LV_descr_; }
DTM__InformationDetails__LV& DTM__InformationDetails__LV::operator=(const DTM__InformationDetails__LV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.DTM_InformationDetails_LV.");
  if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
  else field_lengthIndicator.clean_up();
  if (other_value.valuePart().is_bound()) field_valuePart = other_value.valuePart();
  else field_valuePart.clean_up();
}
return *this;
}

boolean DTM__InformationDetails__LV::operator==(const DTM__InformationDetails__LV& other_value) const
{
return field_lengthIndicator==other_value.field_lengthIndicator
  && field_valuePart==other_value.field_valuePart;
}

boolean DTM__InformationDetails__LV::is_bound() const
{
return (field_lengthIndicator.is_bound())
  || (field_valuePart.is_bound());
}
boolean DTM__InformationDetails__LV::is_value() const
{
return field_lengthIndicator.is_value()
  && field_valuePart.is_value();
}
void DTM__InformationDetails__LV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ lengthIndicator := ");
field_lengthIndicator.log();
TTCN_Logger::log_event_str(", valuePart := ");
field_valuePart.log();
TTCN_Logger::log_event_str(" }");
}

void DTM__InformationDetails__LV::set_implicit_omit()
{
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (valuePart().is_bound()) valuePart().set_implicit_omit();
}

void DTM__InformationDetails__LV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.DTM_InformationDetails_LV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) valuePart().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "valuePart")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          valuePart().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.DTM_InformationDetails_LV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.DTM_InformationDetails_LV");
  }
}

void DTM__InformationDetails__LV::encode_text(Text_Buf& text_buf) const
{
field_lengthIndicator.encode_text(text_buf);
field_valuePart.encode_text(text_buf);
}

void DTM__InformationDetails__LV::decode_text(Text_Buf& text_buf)
{
field_lengthIndicator.decode_text(text_buf);
field_valuePart.decode_text(text_buf);
}

void DTM__InformationDetails__LV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void DTM__InformationDetails__LV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int DTM__InformationDetails__LV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  int value_of_length_field0 = 0;
  RAW_Force_Omit field_0_force_omit(0, force_omit, DTM__InformationDetails__LV_lengthIndicator_descr_.raw->forceomit);
  decoded_field_length = field_lengthIndicator.RAW_decode(DTM__InformationDetails__LV_lengthIndicator_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  INTEGER tmp0 = field_lengthIndicator.convert_to_Integer(DTM__InformationDetails__LV_lengthIndicator_descr_);
  field_lengthIndicator = tmp0;
  value_of_length_field0 += tmp0.get_long_long_val() * 8;
  RAW_Force_Omit field_1_force_omit(1, force_omit, OCTETSTRING_descr_.raw->forceomit);
  decoded_field_length = field_valuePart.RAW_decode(OCTETSTRING_descr_, p_buf, min_of_ints(2, limit, value_of_length_field0), local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  value_of_length_field0 -= decoded_field_length;
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int DTM__InformationDetails__LV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, DTM__InformationDetails__LV_lengthIndicator_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, OCTETSTRING_descr_.raw);
  encoded_length += 8;
  myleaf.body.node.nodes[0]->calc = CALC_LENGTH;
  myleaf.body.node.nodes[0]->coding_descr = &DTM__InformationDetails__LV_lengthIndicator_descr_;
  myleaf.body.node.nodes[0]->calcof.lengthto.num_of_fields = 1;
  myleaf.body.node.nodes[0]->calcof.lengthto.unit = 8;
  myleaf.body.node.nodes[0]->calcof.lengthto.offset = 0;
  myleaf.body.node.nodes[0]->calcof.lengthto.fields = init_lengthto_fields_list(1);
  myleaf.body.node.nodes[0]->length = 8;
  myleaf.body.node.nodes[0]->calcof.lengthto.fields[0].level = myleaf.body.node.nodes[1]->curr_pos.level;
  myleaf.body.node.nodes[0]->calcof.lengthto.fields[0].pos = myleaf.body.node.nodes[1]->curr_pos.pos;
  encoded_length += field_valuePart.RAW_encode(OCTETSTRING_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct DTM__InformationDetails__LV_template::single_value_struct {
INTEGER_template field_lengthIndicator;
OCTETSTRING_template field_valuePart;
};

void DTM__InformationDetails__LV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_lengthIndicator = ANY_VALUE;
single_value->field_valuePart = ANY_VALUE;
}
}
}

void DTM__InformationDetails__LV_template::copy_value(const DTM__InformationDetails__LV& other_value)
{
single_value = new single_value_struct;
if (other_value.lengthIndicator().is_bound()) {
  single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
  single_value->field_lengthIndicator.clean_up();
}
if (other_value.valuePart().is_bound()) {
  single_value->field_valuePart = other_value.valuePart();
} else {
  single_value->field_valuePart.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void DTM__InformationDetails__LV_template::copy_template(const DTM__InformationDetails__LV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.lengthIndicator().get_selection()) {
single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
single_value->field_lengthIndicator.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.valuePart().get_selection()) {
single_value->field_valuePart = other_value.valuePart();
} else {
single_value->field_valuePart.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new DTM__InformationDetails__LV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new DTM__InformationDetails__LV_template(*other_value.implication_.precondition);
implication_.implied_template = new DTM__InformationDetails__LV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.DTM_InformationDetails_LV.");
break;
}
set_selection(other_value);
}

DTM__InformationDetails__LV_template::DTM__InformationDetails__LV_template()
{
}

DTM__InformationDetails__LV_template::DTM__InformationDetails__LV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

DTM__InformationDetails__LV_template::DTM__InformationDetails__LV_template(const DTM__InformationDetails__LV& other_value)
{
copy_value(other_value);
}

DTM__InformationDetails__LV_template::DTM__InformationDetails__LV_template(const OPTIONAL<DTM__InformationDetails__LV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const DTM__InformationDetails__LV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.DTM_InformationDetails_LV from an unbound optional field.");
}
}

DTM__InformationDetails__LV_template::DTM__InformationDetails__LV_template(DTM__InformationDetails__LV_template* p_precondition, DTM__InformationDetails__LV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

DTM__InformationDetails__LV_template::DTM__InformationDetails__LV_template(Dynamic_Match_Interface<DTM__InformationDetails__LV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<DTM__InformationDetails__LV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

DTM__InformationDetails__LV_template::DTM__InformationDetails__LV_template(const DTM__InformationDetails__LV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

DTM__InformationDetails__LV_template::~DTM__InformationDetails__LV_template()
{
clean_up();
}

DTM__InformationDetails__LV_template& DTM__InformationDetails__LV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

DTM__InformationDetails__LV_template& DTM__InformationDetails__LV_template::operator=(const DTM__InformationDetails__LV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

DTM__InformationDetails__LV_template& DTM__InformationDetails__LV_template::operator=(const OPTIONAL<DTM__InformationDetails__LV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const DTM__InformationDetails__LV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.DTM_InformationDetails_LV.");
}
return *this;
}

DTM__InformationDetails__LV_template& DTM__InformationDetails__LV_template::operator=(const DTM__InformationDetails__LV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean DTM__InformationDetails__LV_template::match(const DTM__InformationDetails__LV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.lengthIndicator().is_bound()) return FALSE;
if(!single_value->field_lengthIndicator.match(other_value.lengthIndicator(), legacy))return FALSE;
if(!other_value.valuePart().is_bound()) return FALSE;
if(!single_value->field_valuePart.match(other_value.valuePart(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.DTM_InformationDetails_LV.");
}
return FALSE;
}

boolean DTM__InformationDetails__LV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_lengthIndicator.is_bound()
 || single_value->field_valuePart.is_bound();
}

boolean DTM__InformationDetails__LV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_lengthIndicator.is_value()
 && single_value->field_valuePart.is_value();
}

void DTM__InformationDetails__LV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

DTM__InformationDetails__LV DTM__InformationDetails__LV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.DTM_InformationDetails_LV.");
DTM__InformationDetails__LV ret_val;
if (single_value->field_lengthIndicator.is_bound()) {
ret_val.lengthIndicator() = single_value->field_lengthIndicator.valueof();
}
if (single_value->field_valuePart.is_bound()) {
ret_val.valuePart() = single_value->field_valuePart.valueof();
}
return ret_val;
}

void DTM__InformationDetails__LV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.DTM_InformationDetails_LV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new DTM__InformationDetails__LV_template[list_length];
}

DTM__InformationDetails__LV_template& DTM__InformationDetails__LV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.DTM_InformationDetails_LV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.DTM_InformationDetails_LV.");
return value_list.list_value[list_index];
}

INTEGER_template& DTM__InformationDetails__LV_template::lengthIndicator()
{
set_specific();
return single_value->field_lengthIndicator;
}

const INTEGER_template& DTM__InformationDetails__LV_template::lengthIndicator() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field lengthIndicator of a non-specific template of type @MobileL3_RRM_Types.DTM_InformationDetails_LV.");
return single_value->field_lengthIndicator;
}

OCTETSTRING_template& DTM__InformationDetails__LV_template::valuePart()
{
set_specific();
return single_value->field_valuePart;
}

const OCTETSTRING_template& DTM__InformationDetails__LV_template::valuePart() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field valuePart of a non-specific template of type @MobileL3_RRM_Types.DTM_InformationDetails_LV.");
return single_value->field_valuePart;
}

int DTM__InformationDetails__LV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.DTM_InformationDetails_LV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.DTM_InformationDetails_LV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.DTM_InformationDetails_LV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.DTM_InformationDetails_LV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.DTM_InformationDetails_LV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.DTM_InformationDetails_LV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.DTM_InformationDetails_LV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.DTM_InformationDetails_LV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.DTM_InformationDetails_LV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.DTM_InformationDetails_LV.");
  }
  return 0;
}

void DTM__InformationDetails__LV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ lengthIndicator := ");
single_value->field_lengthIndicator.log();
TTCN_Logger::log_event_str(", valuePart := ");
single_value->field_valuePart.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void DTM__InformationDetails__LV_template::log_match(const DTM__InformationDetails__LV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_lengthIndicator.match(match_value.lengthIndicator(), legacy)){
TTCN_Logger::log_logmatch_info(".lengthIndicator");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_valuePart.match(match_value.valuePart(), legacy)){
TTCN_Logger::log_logmatch_info(".valuePart");
single_value->field_valuePart.log_match(match_value.valuePart(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ lengthIndicator := ");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::log_event_str(", valuePart := ");
single_value->field_valuePart.log_match(match_value.valuePart(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void DTM__InformationDetails__LV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (valuePart().is_bound()) valuePart().set_implicit_omit();
}

void DTM__InformationDetails__LV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_lengthIndicator.encode_text(text_buf);
single_value->field_valuePart.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.DTM_InformationDetails_LV.");
}
}

void DTM__InformationDetails__LV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_lengthIndicator.decode_text(text_buf);
single_value->field_valuePart.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new DTM__InformationDetails__LV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.DTM_InformationDetails_LV.");
}
}

void DTM__InformationDetails__LV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    DTM__InformationDetails__LV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.DTM_InformationDetails_LV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) valuePart().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "valuePart")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          valuePart().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.DTM_InformationDetails_LV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    DTM__InformationDetails__LV_template* precondition = new DTM__InformationDetails__LV_template;
    precondition->set_param(*param.get_elem(0));
    DTM__InformationDetails__LV_template* implied_template = new DTM__InformationDetails__LV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = DTM__InformationDetails__LV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.DTM_InformationDetails_LV");
  }
  is_ifpresent = param.get_ifpresent();
}

void DTM__InformationDetails__LV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_lengthIndicator.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.DTM_InformationDetails_LV");
single_value->field_valuePart.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.DTM_InformationDetails_LV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.DTM_InformationDetails_LV");
}

boolean DTM__InformationDetails__LV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean DTM__InformationDetails__LV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

DynamicARFCN__Mapping__TLV::DynamicARFCN__Mapping__TLV()
{
}

DynamicARFCN__Mapping__TLV::DynamicARFCN__Mapping__TLV(const OCTETSTRING& par_elementIdentifier,
    const INTEGER& par_lengthIndicator,
    const OCTETSTRING& par_valuePart)
  :   field_elementIdentifier(par_elementIdentifier),
  field_lengthIndicator(par_lengthIndicator),
  field_valuePart(par_valuePart)
{
}

DynamicARFCN__Mapping__TLV::DynamicARFCN__Mapping__TLV(const DynamicARFCN__Mapping__TLV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV.");
if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
else field_elementIdentifier.clean_up();
if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
else field_lengthIndicator.clean_up();
if (other_value.valuePart().is_bound()) field_valuePart = other_value.valuePart();
else field_valuePart.clean_up();
}

void DynamicARFCN__Mapping__TLV::clean_up()
{
field_elementIdentifier.clean_up();
field_lengthIndicator.clean_up();
field_valuePart.clean_up();
}

const TTCN_Typedescriptor_t* DynamicARFCN__Mapping__TLV::get_descriptor() const { return &DynamicARFCN__Mapping__TLV_descr_; }
DynamicARFCN__Mapping__TLV& DynamicARFCN__Mapping__TLV::operator=(const DynamicARFCN__Mapping__TLV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV.");
  if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
  else field_elementIdentifier.clean_up();
  if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
  else field_lengthIndicator.clean_up();
  if (other_value.valuePart().is_bound()) field_valuePart = other_value.valuePart();
  else field_valuePart.clean_up();
}
return *this;
}

boolean DynamicARFCN__Mapping__TLV::operator==(const DynamicARFCN__Mapping__TLV& other_value) const
{
return field_elementIdentifier==other_value.field_elementIdentifier
  && field_lengthIndicator==other_value.field_lengthIndicator
  && field_valuePart==other_value.field_valuePart;
}

boolean DynamicARFCN__Mapping__TLV::is_bound() const
{
return (field_elementIdentifier.is_bound())
  || (field_lengthIndicator.is_bound())
  || (field_valuePart.is_bound());
}
boolean DynamicARFCN__Mapping__TLV::is_value() const
{
return field_elementIdentifier.is_value()
  && field_lengthIndicator.is_value()
  && field_valuePart.is_value();
}
void DynamicARFCN__Mapping__TLV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ elementIdentifier := ");
field_elementIdentifier.log();
TTCN_Logger::log_event_str(", lengthIndicator := ");
field_lengthIndicator.log();
TTCN_Logger::log_event_str(", valuePart := ");
field_valuePart.log();
TTCN_Logger::log_event_str(" }");
}

void DynamicARFCN__Mapping__TLV::set_implicit_omit()
{
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (valuePart().is_bound()) valuePart().set_implicit_omit();
}

void DynamicARFCN__Mapping__TLV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (3<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV has 3 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) valuePart().set_param(*param.get_elem(2));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "valuePart")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          valuePart().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV");
  }
}

void DynamicARFCN__Mapping__TLV::encode_text(Text_Buf& text_buf) const
{
field_elementIdentifier.encode_text(text_buf);
field_lengthIndicator.encode_text(text_buf);
field_valuePart.encode_text(text_buf);
}

void DynamicARFCN__Mapping__TLV::decode_text(Text_Buf& text_buf)
{
field_elementIdentifier.decode_text(text_buf);
field_lengthIndicator.decode_text(text_buf);
field_valuePart.decode_text(text_buf);
}

void DynamicARFCN__Mapping__TLV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void DynamicARFCN__Mapping__TLV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int DynamicARFCN__Mapping__TLV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  int value_of_length_field1 = 0;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_elementIdentifier.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, DynamicARFCN__Mapping__TLV_lengthIndicator_descr_.raw->forceomit);
  decoded_field_length = field_lengthIndicator.RAW_decode(DynamicARFCN__Mapping__TLV_lengthIndicator_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  INTEGER tmp1 = field_lengthIndicator.convert_to_Integer(DynamicARFCN__Mapping__TLV_lengthIndicator_descr_);
  field_lengthIndicator = tmp1;
  value_of_length_field1 += tmp1.get_long_long_val() * 8;
  RAW_Force_Omit field_2_force_omit(2, force_omit, OCTETSTRING_descr_.raw->forceomit);
  decoded_field_length = field_valuePart.RAW_decode(OCTETSTRING_descr_, p_buf, min_of_ints(2, limit, value_of_length_field1), local_top_order, no_err, -1, TRUE, &field_2_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  value_of_length_field1 -= decoded_field_length;
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int DynamicARFCN__Mapping__TLV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 3;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(3);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::OCT1_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, DynamicARFCN__Mapping__TLV_lengthIndicator_descr_.raw);
  myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, OCTETSTRING_descr_.raw);
  encoded_length += field_elementIdentifier.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += 8;
  myleaf.body.node.nodes[1]->calc = CALC_LENGTH;
  myleaf.body.node.nodes[1]->coding_descr = &DynamicARFCN__Mapping__TLV_lengthIndicator_descr_;
  myleaf.body.node.nodes[1]->calcof.lengthto.num_of_fields = 1;
  myleaf.body.node.nodes[1]->calcof.lengthto.unit = 8;
  myleaf.body.node.nodes[1]->calcof.lengthto.offset = 0;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields = init_lengthto_fields_list(1);
  myleaf.body.node.nodes[1]->length = 8;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields[0].level = myleaf.body.node.nodes[2]->curr_pos.level;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields[0].pos = myleaf.body.node.nodes[2]->curr_pos.pos;
  encoded_length += field_valuePart.RAW_encode(OCTETSTRING_descr_, *myleaf.body.node.nodes[2]);
  return myleaf.length = encoded_length;
}

struct DynamicARFCN__Mapping__TLV_template::single_value_struct {
OCTETSTRING_template field_elementIdentifier;
INTEGER_template field_lengthIndicator;
OCTETSTRING_template field_valuePart;
};

void DynamicARFCN__Mapping__TLV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_elementIdentifier = ANY_VALUE;
single_value->field_lengthIndicator = ANY_VALUE;
single_value->field_valuePart = ANY_VALUE;
}
}
}

void DynamicARFCN__Mapping__TLV_template::copy_value(const DynamicARFCN__Mapping__TLV& other_value)
{
single_value = new single_value_struct;
if (other_value.elementIdentifier().is_bound()) {
  single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
  single_value->field_elementIdentifier.clean_up();
}
if (other_value.lengthIndicator().is_bound()) {
  single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
  single_value->field_lengthIndicator.clean_up();
}
if (other_value.valuePart().is_bound()) {
  single_value->field_valuePart = other_value.valuePart();
} else {
  single_value->field_valuePart.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void DynamicARFCN__Mapping__TLV_template::copy_template(const DynamicARFCN__Mapping__TLV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.elementIdentifier().get_selection()) {
single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
single_value->field_elementIdentifier.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.lengthIndicator().get_selection()) {
single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
single_value->field_lengthIndicator.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.valuePart().get_selection()) {
single_value->field_valuePart = other_value.valuePart();
} else {
single_value->field_valuePart.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new DynamicARFCN__Mapping__TLV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new DynamicARFCN__Mapping__TLV_template(*other_value.implication_.precondition);
implication_.implied_template = new DynamicARFCN__Mapping__TLV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV.");
break;
}
set_selection(other_value);
}

DynamicARFCN__Mapping__TLV_template::DynamicARFCN__Mapping__TLV_template()
{
}

DynamicARFCN__Mapping__TLV_template::DynamicARFCN__Mapping__TLV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

DynamicARFCN__Mapping__TLV_template::DynamicARFCN__Mapping__TLV_template(const DynamicARFCN__Mapping__TLV& other_value)
{
copy_value(other_value);
}

DynamicARFCN__Mapping__TLV_template::DynamicARFCN__Mapping__TLV_template(const OPTIONAL<DynamicARFCN__Mapping__TLV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const DynamicARFCN__Mapping__TLV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV from an unbound optional field.");
}
}

DynamicARFCN__Mapping__TLV_template::DynamicARFCN__Mapping__TLV_template(DynamicARFCN__Mapping__TLV_template* p_precondition, DynamicARFCN__Mapping__TLV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

DynamicARFCN__Mapping__TLV_template::DynamicARFCN__Mapping__TLV_template(Dynamic_Match_Interface<DynamicARFCN__Mapping__TLV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<DynamicARFCN__Mapping__TLV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

DynamicARFCN__Mapping__TLV_template::DynamicARFCN__Mapping__TLV_template(const DynamicARFCN__Mapping__TLV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

DynamicARFCN__Mapping__TLV_template::~DynamicARFCN__Mapping__TLV_template()
{
clean_up();
}

DynamicARFCN__Mapping__TLV_template& DynamicARFCN__Mapping__TLV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

DynamicARFCN__Mapping__TLV_template& DynamicARFCN__Mapping__TLV_template::operator=(const DynamicARFCN__Mapping__TLV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

DynamicARFCN__Mapping__TLV_template& DynamicARFCN__Mapping__TLV_template::operator=(const OPTIONAL<DynamicARFCN__Mapping__TLV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const DynamicARFCN__Mapping__TLV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV.");
}
return *this;
}

DynamicARFCN__Mapping__TLV_template& DynamicARFCN__Mapping__TLV_template::operator=(const DynamicARFCN__Mapping__TLV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean DynamicARFCN__Mapping__TLV_template::match(const DynamicARFCN__Mapping__TLV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.elementIdentifier().is_bound()) return FALSE;
if(!single_value->field_elementIdentifier.match(other_value.elementIdentifier(), legacy))return FALSE;
if(!other_value.lengthIndicator().is_bound()) return FALSE;
if(!single_value->field_lengthIndicator.match(other_value.lengthIndicator(), legacy))return FALSE;
if(!other_value.valuePart().is_bound()) return FALSE;
if(!single_value->field_valuePart.match(other_value.valuePart(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV.");
}
return FALSE;
}

boolean DynamicARFCN__Mapping__TLV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_elementIdentifier.is_bound()
 || single_value->field_lengthIndicator.is_bound()
 || single_value->field_valuePart.is_bound();
}

boolean DynamicARFCN__Mapping__TLV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_elementIdentifier.is_value()
 && single_value->field_lengthIndicator.is_value()
 && single_value->field_valuePart.is_value();
}

void DynamicARFCN__Mapping__TLV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

DynamicARFCN__Mapping__TLV DynamicARFCN__Mapping__TLV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV.");
DynamicARFCN__Mapping__TLV ret_val;
if (single_value->field_elementIdentifier.is_bound()) {
ret_val.elementIdentifier() = single_value->field_elementIdentifier.valueof();
}
if (single_value->field_lengthIndicator.is_bound()) {
ret_val.lengthIndicator() = single_value->field_lengthIndicator.valueof();
}
if (single_value->field_valuePart.is_bound()) {
ret_val.valuePart() = single_value->field_valuePart.valueof();
}
return ret_val;
}

void DynamicARFCN__Mapping__TLV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new DynamicARFCN__Mapping__TLV_template[list_length];
}

DynamicARFCN__Mapping__TLV_template& DynamicARFCN__Mapping__TLV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV.");
return value_list.list_value[list_index];
}

OCTETSTRING_template& DynamicARFCN__Mapping__TLV_template::elementIdentifier()
{
set_specific();
return single_value->field_elementIdentifier;
}

const OCTETSTRING_template& DynamicARFCN__Mapping__TLV_template::elementIdentifier() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field elementIdentifier of a non-specific template of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV.");
return single_value->field_elementIdentifier;
}

INTEGER_template& DynamicARFCN__Mapping__TLV_template::lengthIndicator()
{
set_specific();
return single_value->field_lengthIndicator;
}

const INTEGER_template& DynamicARFCN__Mapping__TLV_template::lengthIndicator() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field lengthIndicator of a non-specific template of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV.");
return single_value->field_lengthIndicator;
}

OCTETSTRING_template& DynamicARFCN__Mapping__TLV_template::valuePart()
{
set_specific();
return single_value->field_valuePart;
}

const OCTETSTRING_template& DynamicARFCN__Mapping__TLV_template::valuePart() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field valuePart of a non-specific template of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV.");
return single_value->field_valuePart;
}

int DynamicARFCN__Mapping__TLV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 3;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV.");
  }
  return 0;
}

void DynamicARFCN__Mapping__TLV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log();
TTCN_Logger::log_event_str(", lengthIndicator := ");
single_value->field_lengthIndicator.log();
TTCN_Logger::log_event_str(", valuePart := ");
single_value->field_valuePart.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void DynamicARFCN__Mapping__TLV_template::log_match(const DynamicARFCN__Mapping__TLV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_elementIdentifier.match(match_value.elementIdentifier(), legacy)){
TTCN_Logger::log_logmatch_info(".elementIdentifier");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_lengthIndicator.match(match_value.lengthIndicator(), legacy)){
TTCN_Logger::log_logmatch_info(".lengthIndicator");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_valuePart.match(match_value.valuePart(), legacy)){
TTCN_Logger::log_logmatch_info(".valuePart");
single_value->field_valuePart.log_match(match_value.valuePart(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::log_event_str(", lengthIndicator := ");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::log_event_str(", valuePart := ");
single_value->field_valuePart.log_match(match_value.valuePart(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void DynamicARFCN__Mapping__TLV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (valuePart().is_bound()) valuePart().set_implicit_omit();
}

void DynamicARFCN__Mapping__TLV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_elementIdentifier.encode_text(text_buf);
single_value->field_lengthIndicator.encode_text(text_buf);
single_value->field_valuePart.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV.");
}
}

void DynamicARFCN__Mapping__TLV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_elementIdentifier.decode_text(text_buf);
single_value->field_lengthIndicator.decode_text(text_buf);
single_value->field_valuePart.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new DynamicARFCN__Mapping__TLV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV.");
}
}

void DynamicARFCN__Mapping__TLV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    DynamicARFCN__Mapping__TLV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (3<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV has 3 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) valuePart().set_param(*param.get_elem(2));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "valuePart")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          valuePart().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    DynamicARFCN__Mapping__TLV_template* precondition = new DynamicARFCN__Mapping__TLV_template;
    precondition->set_param(*param.get_elem(0));
    DynamicARFCN__Mapping__TLV_template* implied_template = new DynamicARFCN__Mapping__TLV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = DynamicARFCN__Mapping__TLV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV");
  }
  is_ifpresent = param.get_ifpresent();
}

void DynamicARFCN__Mapping__TLV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_elementIdentifier.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV");
single_value->field_lengthIndicator.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV");
single_value->field_valuePart.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.DynamicARFCN_Mapping_TLV");
}

boolean DynamicARFCN__Mapping__TLV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean DynamicARFCN__Mapping__TLV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

FrequencyChannelSequence__TV::FrequencyChannelSequence__TV()
{
}

FrequencyChannelSequence__TV::FrequencyChannelSequence__TV(const OCTETSTRING& par_elementIdentifier,
    const BITSTRING& par_lowestARFCN,
    const BITSTRING& par_spare,
    const BITSTRING& par_incSkipARFCN02,
    const BITSTRING& par_incSkipARFCN01,
    const BITSTRING& par_incSkipARFCN04,
    const BITSTRING& par_incSkipARFCN03,
    const BITSTRING& par_incSkipARFCN06,
    const BITSTRING& par_incSkipARFCN05,
    const BITSTRING& par_incSkipARFCN08,
    const BITSTRING& par_incSkipARFCN07,
    const BITSTRING& par_incSkipARFCN10,
    const BITSTRING& par_incSkipARFCN09,
    const BITSTRING& par_incSkipARFCN12,
    const BITSTRING& par_incSkipARFCN11,
    const BITSTRING& par_incSkipARFCN14,
    const BITSTRING& par_incSkipARFCN13,
    const BITSTRING& par_incSkipARFCN16,
    const BITSTRING& par_incSkipARFCN15)
  :   field_elementIdentifier(par_elementIdentifier),
  field_lowestARFCN(par_lowestARFCN),
  field_spare(par_spare),
  field_incSkipARFCN02(par_incSkipARFCN02),
  field_incSkipARFCN01(par_incSkipARFCN01),
  field_incSkipARFCN04(par_incSkipARFCN04),
  field_incSkipARFCN03(par_incSkipARFCN03),
  field_incSkipARFCN06(par_incSkipARFCN06),
  field_incSkipARFCN05(par_incSkipARFCN05),
  field_incSkipARFCN08(par_incSkipARFCN08),
  field_incSkipARFCN07(par_incSkipARFCN07),
  field_incSkipARFCN10(par_incSkipARFCN10),
  field_incSkipARFCN09(par_incSkipARFCN09),
  field_incSkipARFCN12(par_incSkipARFCN12),
  field_incSkipARFCN11(par_incSkipARFCN11),
  field_incSkipARFCN14(par_incSkipARFCN14),
  field_incSkipARFCN13(par_incSkipARFCN13),
  field_incSkipARFCN16(par_incSkipARFCN16),
  field_incSkipARFCN15(par_incSkipARFCN15)
{
}

FrequencyChannelSequence__TV::FrequencyChannelSequence__TV(const FrequencyChannelSequence__TV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
else field_elementIdentifier.clean_up();
if (other_value.lowestARFCN().is_bound()) field_lowestARFCN = other_value.lowestARFCN();
else field_lowestARFCN.clean_up();
if (other_value.spare().is_bound()) field_spare = other_value.spare();
else field_spare.clean_up();
if (other_value.incSkipARFCN02().is_bound()) field_incSkipARFCN02 = other_value.incSkipARFCN02();
else field_incSkipARFCN02.clean_up();
if (other_value.incSkipARFCN01().is_bound()) field_incSkipARFCN01 = other_value.incSkipARFCN01();
else field_incSkipARFCN01.clean_up();
if (other_value.incSkipARFCN04().is_bound()) field_incSkipARFCN04 = other_value.incSkipARFCN04();
else field_incSkipARFCN04.clean_up();
if (other_value.incSkipARFCN03().is_bound()) field_incSkipARFCN03 = other_value.incSkipARFCN03();
else field_incSkipARFCN03.clean_up();
if (other_value.incSkipARFCN06().is_bound()) field_incSkipARFCN06 = other_value.incSkipARFCN06();
else field_incSkipARFCN06.clean_up();
if (other_value.incSkipARFCN05().is_bound()) field_incSkipARFCN05 = other_value.incSkipARFCN05();
else field_incSkipARFCN05.clean_up();
if (other_value.incSkipARFCN08().is_bound()) field_incSkipARFCN08 = other_value.incSkipARFCN08();
else field_incSkipARFCN08.clean_up();
if (other_value.incSkipARFCN07().is_bound()) field_incSkipARFCN07 = other_value.incSkipARFCN07();
else field_incSkipARFCN07.clean_up();
if (other_value.incSkipARFCN10().is_bound()) field_incSkipARFCN10 = other_value.incSkipARFCN10();
else field_incSkipARFCN10.clean_up();
if (other_value.incSkipARFCN09().is_bound()) field_incSkipARFCN09 = other_value.incSkipARFCN09();
else field_incSkipARFCN09.clean_up();
if (other_value.incSkipARFCN12().is_bound()) field_incSkipARFCN12 = other_value.incSkipARFCN12();
else field_incSkipARFCN12.clean_up();
if (other_value.incSkipARFCN11().is_bound()) field_incSkipARFCN11 = other_value.incSkipARFCN11();
else field_incSkipARFCN11.clean_up();
if (other_value.incSkipARFCN14().is_bound()) field_incSkipARFCN14 = other_value.incSkipARFCN14();
else field_incSkipARFCN14.clean_up();
if (other_value.incSkipARFCN13().is_bound()) field_incSkipARFCN13 = other_value.incSkipARFCN13();
else field_incSkipARFCN13.clean_up();
if (other_value.incSkipARFCN16().is_bound()) field_incSkipARFCN16 = other_value.incSkipARFCN16();
else field_incSkipARFCN16.clean_up();
if (other_value.incSkipARFCN15().is_bound()) field_incSkipARFCN15 = other_value.incSkipARFCN15();
else field_incSkipARFCN15.clean_up();
}

void FrequencyChannelSequence__TV::clean_up()
{
field_elementIdentifier.clean_up();
field_lowestARFCN.clean_up();
field_spare.clean_up();
field_incSkipARFCN02.clean_up();
field_incSkipARFCN01.clean_up();
field_incSkipARFCN04.clean_up();
field_incSkipARFCN03.clean_up();
field_incSkipARFCN06.clean_up();
field_incSkipARFCN05.clean_up();
field_incSkipARFCN08.clean_up();
field_incSkipARFCN07.clean_up();
field_incSkipARFCN10.clean_up();
field_incSkipARFCN09.clean_up();
field_incSkipARFCN12.clean_up();
field_incSkipARFCN11.clean_up();
field_incSkipARFCN14.clean_up();
field_incSkipARFCN13.clean_up();
field_incSkipARFCN16.clean_up();
field_incSkipARFCN15.clean_up();
}

const TTCN_Typedescriptor_t* FrequencyChannelSequence__TV::get_descriptor() const { return &FrequencyChannelSequence__TV_descr_; }
FrequencyChannelSequence__TV& FrequencyChannelSequence__TV::operator=(const FrequencyChannelSequence__TV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
  if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
  else field_elementIdentifier.clean_up();
  if (other_value.lowestARFCN().is_bound()) field_lowestARFCN = other_value.lowestARFCN();
  else field_lowestARFCN.clean_up();
  if (other_value.spare().is_bound()) field_spare = other_value.spare();
  else field_spare.clean_up();
  if (other_value.incSkipARFCN02().is_bound()) field_incSkipARFCN02 = other_value.incSkipARFCN02();
  else field_incSkipARFCN02.clean_up();
  if (other_value.incSkipARFCN01().is_bound()) field_incSkipARFCN01 = other_value.incSkipARFCN01();
  else field_incSkipARFCN01.clean_up();
  if (other_value.incSkipARFCN04().is_bound()) field_incSkipARFCN04 = other_value.incSkipARFCN04();
  else field_incSkipARFCN04.clean_up();
  if (other_value.incSkipARFCN03().is_bound()) field_incSkipARFCN03 = other_value.incSkipARFCN03();
  else field_incSkipARFCN03.clean_up();
  if (other_value.incSkipARFCN06().is_bound()) field_incSkipARFCN06 = other_value.incSkipARFCN06();
  else field_incSkipARFCN06.clean_up();
  if (other_value.incSkipARFCN05().is_bound()) field_incSkipARFCN05 = other_value.incSkipARFCN05();
  else field_incSkipARFCN05.clean_up();
  if (other_value.incSkipARFCN08().is_bound()) field_incSkipARFCN08 = other_value.incSkipARFCN08();
  else field_incSkipARFCN08.clean_up();
  if (other_value.incSkipARFCN07().is_bound()) field_incSkipARFCN07 = other_value.incSkipARFCN07();
  else field_incSkipARFCN07.clean_up();
  if (other_value.incSkipARFCN10().is_bound()) field_incSkipARFCN10 = other_value.incSkipARFCN10();
  else field_incSkipARFCN10.clean_up();
  if (other_value.incSkipARFCN09().is_bound()) field_incSkipARFCN09 = other_value.incSkipARFCN09();
  else field_incSkipARFCN09.clean_up();
  if (other_value.incSkipARFCN12().is_bound()) field_incSkipARFCN12 = other_value.incSkipARFCN12();
  else field_incSkipARFCN12.clean_up();
  if (other_value.incSkipARFCN11().is_bound()) field_incSkipARFCN11 = other_value.incSkipARFCN11();
  else field_incSkipARFCN11.clean_up();
  if (other_value.incSkipARFCN14().is_bound()) field_incSkipARFCN14 = other_value.incSkipARFCN14();
  else field_incSkipARFCN14.clean_up();
  if (other_value.incSkipARFCN13().is_bound()) field_incSkipARFCN13 = other_value.incSkipARFCN13();
  else field_incSkipARFCN13.clean_up();
  if (other_value.incSkipARFCN16().is_bound()) field_incSkipARFCN16 = other_value.incSkipARFCN16();
  else field_incSkipARFCN16.clean_up();
  if (other_value.incSkipARFCN15().is_bound()) field_incSkipARFCN15 = other_value.incSkipARFCN15();
  else field_incSkipARFCN15.clean_up();
}
return *this;
}

boolean FrequencyChannelSequence__TV::operator==(const FrequencyChannelSequence__TV& other_value) const
{
return field_elementIdentifier==other_value.field_elementIdentifier
  && field_lowestARFCN==other_value.field_lowestARFCN
  && field_spare==other_value.field_spare
  && field_incSkipARFCN02==other_value.field_incSkipARFCN02
  && field_incSkipARFCN01==other_value.field_incSkipARFCN01
  && field_incSkipARFCN04==other_value.field_incSkipARFCN04
  && field_incSkipARFCN03==other_value.field_incSkipARFCN03
  && field_incSkipARFCN06==other_value.field_incSkipARFCN06
  && field_incSkipARFCN05==other_value.field_incSkipARFCN05
  && field_incSkipARFCN08==other_value.field_incSkipARFCN08
  && field_incSkipARFCN07==other_value.field_incSkipARFCN07
  && field_incSkipARFCN10==other_value.field_incSkipARFCN10
  && field_incSkipARFCN09==other_value.field_incSkipARFCN09
  && field_incSkipARFCN12==other_value.field_incSkipARFCN12
  && field_incSkipARFCN11==other_value.field_incSkipARFCN11
  && field_incSkipARFCN14==other_value.field_incSkipARFCN14
  && field_incSkipARFCN13==other_value.field_incSkipARFCN13
  && field_incSkipARFCN16==other_value.field_incSkipARFCN16
  && field_incSkipARFCN15==other_value.field_incSkipARFCN15;
}

boolean FrequencyChannelSequence__TV::is_bound() const
{
return (field_elementIdentifier.is_bound())
  || (field_lowestARFCN.is_bound())
  || (field_spare.is_bound())
  || (field_incSkipARFCN02.is_bound())
  || (field_incSkipARFCN01.is_bound())
  || (field_incSkipARFCN04.is_bound())
  || (field_incSkipARFCN03.is_bound())
  || (field_incSkipARFCN06.is_bound())
  || (field_incSkipARFCN05.is_bound())
  || (field_incSkipARFCN08.is_bound())
  || (field_incSkipARFCN07.is_bound())
  || (field_incSkipARFCN10.is_bound())
  || (field_incSkipARFCN09.is_bound())
  || (field_incSkipARFCN12.is_bound())
  || (field_incSkipARFCN11.is_bound())
  || (field_incSkipARFCN14.is_bound())
  || (field_incSkipARFCN13.is_bound())
  || (field_incSkipARFCN16.is_bound())
  || (field_incSkipARFCN15.is_bound());
}
boolean FrequencyChannelSequence__TV::is_value() const
{
return field_elementIdentifier.is_value()
  && field_lowestARFCN.is_value()
  && field_spare.is_value()
  && field_incSkipARFCN02.is_value()
  && field_incSkipARFCN01.is_value()
  && field_incSkipARFCN04.is_value()
  && field_incSkipARFCN03.is_value()
  && field_incSkipARFCN06.is_value()
  && field_incSkipARFCN05.is_value()
  && field_incSkipARFCN08.is_value()
  && field_incSkipARFCN07.is_value()
  && field_incSkipARFCN10.is_value()
  && field_incSkipARFCN09.is_value()
  && field_incSkipARFCN12.is_value()
  && field_incSkipARFCN11.is_value()
  && field_incSkipARFCN14.is_value()
  && field_incSkipARFCN13.is_value()
  && field_incSkipARFCN16.is_value()
  && field_incSkipARFCN15.is_value();
}
void FrequencyChannelSequence__TV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ elementIdentifier := ");
field_elementIdentifier.log();
TTCN_Logger::log_event_str(", lowestARFCN := ");
field_lowestARFCN.log();
TTCN_Logger::log_event_str(", spare := ");
field_spare.log();
TTCN_Logger::log_event_str(", incSkipARFCN02 := ");
field_incSkipARFCN02.log();
TTCN_Logger::log_event_str(", incSkipARFCN01 := ");
field_incSkipARFCN01.log();
TTCN_Logger::log_event_str(", incSkipARFCN04 := ");
field_incSkipARFCN04.log();
TTCN_Logger::log_event_str(", incSkipARFCN03 := ");
field_incSkipARFCN03.log();
TTCN_Logger::log_event_str(", incSkipARFCN06 := ");
field_incSkipARFCN06.log();
TTCN_Logger::log_event_str(", incSkipARFCN05 := ");
field_incSkipARFCN05.log();
TTCN_Logger::log_event_str(", incSkipARFCN08 := ");
field_incSkipARFCN08.log();
TTCN_Logger::log_event_str(", incSkipARFCN07 := ");
field_incSkipARFCN07.log();
TTCN_Logger::log_event_str(", incSkipARFCN10 := ");
field_incSkipARFCN10.log();
TTCN_Logger::log_event_str(", incSkipARFCN09 := ");
field_incSkipARFCN09.log();
TTCN_Logger::log_event_str(", incSkipARFCN12 := ");
field_incSkipARFCN12.log();
TTCN_Logger::log_event_str(", incSkipARFCN11 := ");
field_incSkipARFCN11.log();
TTCN_Logger::log_event_str(", incSkipARFCN14 := ");
field_incSkipARFCN14.log();
TTCN_Logger::log_event_str(", incSkipARFCN13 := ");
field_incSkipARFCN13.log();
TTCN_Logger::log_event_str(", incSkipARFCN16 := ");
field_incSkipARFCN16.log();
TTCN_Logger::log_event_str(", incSkipARFCN15 := ");
field_incSkipARFCN15.log();
TTCN_Logger::log_event_str(" }");
}

void FrequencyChannelSequence__TV::set_implicit_omit()
{
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (lowestARFCN().is_bound()) lowestARFCN().set_implicit_omit();
if (spare().is_bound()) spare().set_implicit_omit();
if (incSkipARFCN02().is_bound()) incSkipARFCN02().set_implicit_omit();
if (incSkipARFCN01().is_bound()) incSkipARFCN01().set_implicit_omit();
if (incSkipARFCN04().is_bound()) incSkipARFCN04().set_implicit_omit();
if (incSkipARFCN03().is_bound()) incSkipARFCN03().set_implicit_omit();
if (incSkipARFCN06().is_bound()) incSkipARFCN06().set_implicit_omit();
if (incSkipARFCN05().is_bound()) incSkipARFCN05().set_implicit_omit();
if (incSkipARFCN08().is_bound()) incSkipARFCN08().set_implicit_omit();
if (incSkipARFCN07().is_bound()) incSkipARFCN07().set_implicit_omit();
if (incSkipARFCN10().is_bound()) incSkipARFCN10().set_implicit_omit();
if (incSkipARFCN09().is_bound()) incSkipARFCN09().set_implicit_omit();
if (incSkipARFCN12().is_bound()) incSkipARFCN12().set_implicit_omit();
if (incSkipARFCN11().is_bound()) incSkipARFCN11().set_implicit_omit();
if (incSkipARFCN14().is_bound()) incSkipARFCN14().set_implicit_omit();
if (incSkipARFCN13().is_bound()) incSkipARFCN13().set_implicit_omit();
if (incSkipARFCN16().is_bound()) incSkipARFCN16().set_implicit_omit();
if (incSkipARFCN15().is_bound()) incSkipARFCN15().set_implicit_omit();
}

void FrequencyChannelSequence__TV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (19<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV has 19 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) lowestARFCN().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) spare().set_param(*param.get_elem(2));
    if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN02().set_param(*param.get_elem(3));
    if (param.get_size()>4 && param.get_elem(4)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN01().set_param(*param.get_elem(4));
    if (param.get_size()>5 && param.get_elem(5)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN04().set_param(*param.get_elem(5));
    if (param.get_size()>6 && param.get_elem(6)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN03().set_param(*param.get_elem(6));
    if (param.get_size()>7 && param.get_elem(7)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN06().set_param(*param.get_elem(7));
    if (param.get_size()>8 && param.get_elem(8)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN05().set_param(*param.get_elem(8));
    if (param.get_size()>9 && param.get_elem(9)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN08().set_param(*param.get_elem(9));
    if (param.get_size()>10 && param.get_elem(10)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN07().set_param(*param.get_elem(10));
    if (param.get_size()>11 && param.get_elem(11)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN10().set_param(*param.get_elem(11));
    if (param.get_size()>12 && param.get_elem(12)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN09().set_param(*param.get_elem(12));
    if (param.get_size()>13 && param.get_elem(13)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN12().set_param(*param.get_elem(13));
    if (param.get_size()>14 && param.get_elem(14)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN11().set_param(*param.get_elem(14));
    if (param.get_size()>15 && param.get_elem(15)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN14().set_param(*param.get_elem(15));
    if (param.get_size()>16 && param.get_elem(16)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN13().set_param(*param.get_elem(16));
    if (param.get_size()>17 && param.get_elem(17)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN16().set_param(*param.get_elem(17));
    if (param.get_size()>18 && param.get_elem(18)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN15().set_param(*param.get_elem(18));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lowestARFCN")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lowestARFCN().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "spare")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          spare().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN02")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN02().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN01")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN01().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN04")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN04().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN03")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN03().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN06")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN06().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN05")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN05().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN08")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN08().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN07")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN07().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN10")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN10().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN09")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN09().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN12")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN12().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN11")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN11().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN14")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN14().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN13")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN13().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN16")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN16().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN15")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN15().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.FrequencyChannelSequence_TV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.FrequencyChannelSequence_TV");
  }
}

void FrequencyChannelSequence__TV::encode_text(Text_Buf& text_buf) const
{
field_elementIdentifier.encode_text(text_buf);
field_lowestARFCN.encode_text(text_buf);
field_spare.encode_text(text_buf);
field_incSkipARFCN02.encode_text(text_buf);
field_incSkipARFCN01.encode_text(text_buf);
field_incSkipARFCN04.encode_text(text_buf);
field_incSkipARFCN03.encode_text(text_buf);
field_incSkipARFCN06.encode_text(text_buf);
field_incSkipARFCN05.encode_text(text_buf);
field_incSkipARFCN08.encode_text(text_buf);
field_incSkipARFCN07.encode_text(text_buf);
field_incSkipARFCN10.encode_text(text_buf);
field_incSkipARFCN09.encode_text(text_buf);
field_incSkipARFCN12.encode_text(text_buf);
field_incSkipARFCN11.encode_text(text_buf);
field_incSkipARFCN14.encode_text(text_buf);
field_incSkipARFCN13.encode_text(text_buf);
field_incSkipARFCN16.encode_text(text_buf);
field_incSkipARFCN15.encode_text(text_buf);
}

void FrequencyChannelSequence__TV::decode_text(Text_Buf& text_buf)
{
field_elementIdentifier.decode_text(text_buf);
field_lowestARFCN.decode_text(text_buf);
field_spare.decode_text(text_buf);
field_incSkipARFCN02.decode_text(text_buf);
field_incSkipARFCN01.decode_text(text_buf);
field_incSkipARFCN04.decode_text(text_buf);
field_incSkipARFCN03.decode_text(text_buf);
field_incSkipARFCN06.decode_text(text_buf);
field_incSkipARFCN05.decode_text(text_buf);
field_incSkipARFCN08.decode_text(text_buf);
field_incSkipARFCN07.decode_text(text_buf);
field_incSkipARFCN10.decode_text(text_buf);
field_incSkipARFCN09.decode_text(text_buf);
field_incSkipARFCN12.decode_text(text_buf);
field_incSkipARFCN11.decode_text(text_buf);
field_incSkipARFCN14.decode_text(text_buf);
field_incSkipARFCN13.decode_text(text_buf);
field_incSkipARFCN16.decode_text(text_buf);
field_incSkipARFCN15.decode_text(text_buf);
}

void FrequencyChannelSequence__TV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void FrequencyChannelSequence__TV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int FrequencyChannelSequence__TV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_elementIdentifier.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::BIT7_descr_.raw->forceomit);
  decoded_field_length = field_lowestARFCN.RAW_decode(General__Types::BIT7_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_2_force_omit(2, force_omit, General__Types::BIT1_descr_.raw->forceomit);
  decoded_field_length = field_spare.RAW_decode(General__Types::BIT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_2_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_3_force_omit(3, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_incSkipARFCN02.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_3_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_4_force_omit(4, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_incSkipARFCN01.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_4_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_5_force_omit(5, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_incSkipARFCN04.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_5_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_6_force_omit(6, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_incSkipARFCN03.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_6_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_7_force_omit(7, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_incSkipARFCN06.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_7_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_8_force_omit(8, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_incSkipARFCN05.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_8_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_9_force_omit(9, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_incSkipARFCN08.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_9_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_10_force_omit(10, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_incSkipARFCN07.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_10_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_11_force_omit(11, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_incSkipARFCN10.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_11_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_12_force_omit(12, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_incSkipARFCN09.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_12_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_13_force_omit(13, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_incSkipARFCN12.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_13_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_14_force_omit(14, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_incSkipARFCN11.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_14_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_15_force_omit(15, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_incSkipARFCN14.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_15_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_16_force_omit(16, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_incSkipARFCN13.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_16_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_17_force_omit(17, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_incSkipARFCN16.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_17_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_18_force_omit(18, force_omit, General__Types::BIT4_descr_.raw->forceomit);
  decoded_field_length = field_incSkipARFCN15.RAW_decode(General__Types::BIT4_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_18_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int FrequencyChannelSequence__TV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 19;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(19);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::OCT1_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::BIT7_descr_.raw);
  myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, General__Types::BIT1_descr_.raw);
  myleaf.body.node.nodes[3] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 3, General__Types::BIT4_descr_.raw);
  myleaf.body.node.nodes[4] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 4, General__Types::BIT4_descr_.raw);
  myleaf.body.node.nodes[5] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 5, General__Types::BIT4_descr_.raw);
  myleaf.body.node.nodes[6] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 6, General__Types::BIT4_descr_.raw);
  myleaf.body.node.nodes[7] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 7, General__Types::BIT4_descr_.raw);
  myleaf.body.node.nodes[8] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 8, General__Types::BIT4_descr_.raw);
  myleaf.body.node.nodes[9] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 9, General__Types::BIT4_descr_.raw);
  myleaf.body.node.nodes[10] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 10, General__Types::BIT4_descr_.raw);
  myleaf.body.node.nodes[11] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 11, General__Types::BIT4_descr_.raw);
  myleaf.body.node.nodes[12] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 12, General__Types::BIT4_descr_.raw);
  myleaf.body.node.nodes[13] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 13, General__Types::BIT4_descr_.raw);
  myleaf.body.node.nodes[14] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 14, General__Types::BIT4_descr_.raw);
  myleaf.body.node.nodes[15] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 15, General__Types::BIT4_descr_.raw);
  myleaf.body.node.nodes[16] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 16, General__Types::BIT4_descr_.raw);
  myleaf.body.node.nodes[17] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 17, General__Types::BIT4_descr_.raw);
  myleaf.body.node.nodes[18] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 18, General__Types::BIT4_descr_.raw);
  encoded_length += field_elementIdentifier.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_lowestARFCN.RAW_encode(General__Types::BIT7_descr_, *myleaf.body.node.nodes[1]);
  encoded_length += field_spare.RAW_encode(General__Types::BIT1_descr_, *myleaf.body.node.nodes[2]);
  encoded_length += field_incSkipARFCN02.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[3]);
  encoded_length += field_incSkipARFCN01.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[4]);
  encoded_length += field_incSkipARFCN04.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[5]);
  encoded_length += field_incSkipARFCN03.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[6]);
  encoded_length += field_incSkipARFCN06.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[7]);
  encoded_length += field_incSkipARFCN05.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[8]);
  encoded_length += field_incSkipARFCN08.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[9]);
  encoded_length += field_incSkipARFCN07.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[10]);
  encoded_length += field_incSkipARFCN10.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[11]);
  encoded_length += field_incSkipARFCN09.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[12]);
  encoded_length += field_incSkipARFCN12.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[13]);
  encoded_length += field_incSkipARFCN11.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[14]);
  encoded_length += field_incSkipARFCN14.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[15]);
  encoded_length += field_incSkipARFCN13.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[16]);
  encoded_length += field_incSkipARFCN16.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[17]);
  encoded_length += field_incSkipARFCN15.RAW_encode(General__Types::BIT4_descr_, *myleaf.body.node.nodes[18]);
  return myleaf.length = encoded_length;
}

struct FrequencyChannelSequence__TV_template::single_value_struct {
OCTETSTRING_template field_elementIdentifier;
BITSTRING_template field_lowestARFCN;
BITSTRING_template field_spare;
BITSTRING_template field_incSkipARFCN02;
BITSTRING_template field_incSkipARFCN01;
BITSTRING_template field_incSkipARFCN04;
BITSTRING_template field_incSkipARFCN03;
BITSTRING_template field_incSkipARFCN06;
BITSTRING_template field_incSkipARFCN05;
BITSTRING_template field_incSkipARFCN08;
BITSTRING_template field_incSkipARFCN07;
BITSTRING_template field_incSkipARFCN10;
BITSTRING_template field_incSkipARFCN09;
BITSTRING_template field_incSkipARFCN12;
BITSTRING_template field_incSkipARFCN11;
BITSTRING_template field_incSkipARFCN14;
BITSTRING_template field_incSkipARFCN13;
BITSTRING_template field_incSkipARFCN16;
BITSTRING_template field_incSkipARFCN15;
};

void FrequencyChannelSequence__TV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_elementIdentifier = ANY_VALUE;
single_value->field_lowestARFCN = ANY_VALUE;
single_value->field_spare = ANY_VALUE;
single_value->field_incSkipARFCN02 = ANY_VALUE;
single_value->field_incSkipARFCN01 = ANY_VALUE;
single_value->field_incSkipARFCN04 = ANY_VALUE;
single_value->field_incSkipARFCN03 = ANY_VALUE;
single_value->field_incSkipARFCN06 = ANY_VALUE;
single_value->field_incSkipARFCN05 = ANY_VALUE;
single_value->field_incSkipARFCN08 = ANY_VALUE;
single_value->field_incSkipARFCN07 = ANY_VALUE;
single_value->field_incSkipARFCN10 = ANY_VALUE;
single_value->field_incSkipARFCN09 = ANY_VALUE;
single_value->field_incSkipARFCN12 = ANY_VALUE;
single_value->field_incSkipARFCN11 = ANY_VALUE;
single_value->field_incSkipARFCN14 = ANY_VALUE;
single_value->field_incSkipARFCN13 = ANY_VALUE;
single_value->field_incSkipARFCN16 = ANY_VALUE;
single_value->field_incSkipARFCN15 = ANY_VALUE;
}
}
}

void FrequencyChannelSequence__TV_template::copy_value(const FrequencyChannelSequence__TV& other_value)
{
single_value = new single_value_struct;
if (other_value.elementIdentifier().is_bound()) {
  single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
  single_value->field_elementIdentifier.clean_up();
}
if (other_value.lowestARFCN().is_bound()) {
  single_value->field_lowestARFCN = other_value.lowestARFCN();
} else {
  single_value->field_lowestARFCN.clean_up();
}
if (other_value.spare().is_bound()) {
  single_value->field_spare = other_value.spare();
} else {
  single_value->field_spare.clean_up();
}
if (other_value.incSkipARFCN02().is_bound()) {
  single_value->field_incSkipARFCN02 = other_value.incSkipARFCN02();
} else {
  single_value->field_incSkipARFCN02.clean_up();
}
if (other_value.incSkipARFCN01().is_bound()) {
  single_value->field_incSkipARFCN01 = other_value.incSkipARFCN01();
} else {
  single_value->field_incSkipARFCN01.clean_up();
}
if (other_value.incSkipARFCN04().is_bound()) {
  single_value->field_incSkipARFCN04 = other_value.incSkipARFCN04();
} else {
  single_value->field_incSkipARFCN04.clean_up();
}
if (other_value.incSkipARFCN03().is_bound()) {
  single_value->field_incSkipARFCN03 = other_value.incSkipARFCN03();
} else {
  single_value->field_incSkipARFCN03.clean_up();
}
if (other_value.incSkipARFCN06().is_bound()) {
  single_value->field_incSkipARFCN06 = other_value.incSkipARFCN06();
} else {
  single_value->field_incSkipARFCN06.clean_up();
}
if (other_value.incSkipARFCN05().is_bound()) {
  single_value->field_incSkipARFCN05 = other_value.incSkipARFCN05();
} else {
  single_value->field_incSkipARFCN05.clean_up();
}
if (other_value.incSkipARFCN08().is_bound()) {
  single_value->field_incSkipARFCN08 = other_value.incSkipARFCN08();
} else {
  single_value->field_incSkipARFCN08.clean_up();
}
if (other_value.incSkipARFCN07().is_bound()) {
  single_value->field_incSkipARFCN07 = other_value.incSkipARFCN07();
} else {
  single_value->field_incSkipARFCN07.clean_up();
}
if (other_value.incSkipARFCN10().is_bound()) {
  single_value->field_incSkipARFCN10 = other_value.incSkipARFCN10();
} else {
  single_value->field_incSkipARFCN10.clean_up();
}
if (other_value.incSkipARFCN09().is_bound()) {
  single_value->field_incSkipARFCN09 = other_value.incSkipARFCN09();
} else {
  single_value->field_incSkipARFCN09.clean_up();
}
if (other_value.incSkipARFCN12().is_bound()) {
  single_value->field_incSkipARFCN12 = other_value.incSkipARFCN12();
} else {
  single_value->field_incSkipARFCN12.clean_up();
}
if (other_value.incSkipARFCN11().is_bound()) {
  single_value->field_incSkipARFCN11 = other_value.incSkipARFCN11();
} else {
  single_value->field_incSkipARFCN11.clean_up();
}
if (other_value.incSkipARFCN14().is_bound()) {
  single_value->field_incSkipARFCN14 = other_value.incSkipARFCN14();
} else {
  single_value->field_incSkipARFCN14.clean_up();
}
if (other_value.incSkipARFCN13().is_bound()) {
  single_value->field_incSkipARFCN13 = other_value.incSkipARFCN13();
} else {
  single_value->field_incSkipARFCN13.clean_up();
}
if (other_value.incSkipARFCN16().is_bound()) {
  single_value->field_incSkipARFCN16 = other_value.incSkipARFCN16();
} else {
  single_value->field_incSkipARFCN16.clean_up();
}
if (other_value.incSkipARFCN15().is_bound()) {
  single_value->field_incSkipARFCN15 = other_value.incSkipARFCN15();
} else {
  single_value->field_incSkipARFCN15.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void FrequencyChannelSequence__TV_template::copy_template(const FrequencyChannelSequence__TV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.elementIdentifier().get_selection()) {
single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
single_value->field_elementIdentifier.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.lowestARFCN().get_selection()) {
single_value->field_lowestARFCN = other_value.lowestARFCN();
} else {
single_value->field_lowestARFCN.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.spare().get_selection()) {
single_value->field_spare = other_value.spare();
} else {
single_value->field_spare.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.incSkipARFCN02().get_selection()) {
single_value->field_incSkipARFCN02 = other_value.incSkipARFCN02();
} else {
single_value->field_incSkipARFCN02.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.incSkipARFCN01().get_selection()) {
single_value->field_incSkipARFCN01 = other_value.incSkipARFCN01();
} else {
single_value->field_incSkipARFCN01.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.incSkipARFCN04().get_selection()) {
single_value->field_incSkipARFCN04 = other_value.incSkipARFCN04();
} else {
single_value->field_incSkipARFCN04.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.incSkipARFCN03().get_selection()) {
single_value->field_incSkipARFCN03 = other_value.incSkipARFCN03();
} else {
single_value->field_incSkipARFCN03.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.incSkipARFCN06().get_selection()) {
single_value->field_incSkipARFCN06 = other_value.incSkipARFCN06();
} else {
single_value->field_incSkipARFCN06.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.incSkipARFCN05().get_selection()) {
single_value->field_incSkipARFCN05 = other_value.incSkipARFCN05();
} else {
single_value->field_incSkipARFCN05.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.incSkipARFCN08().get_selection()) {
single_value->field_incSkipARFCN08 = other_value.incSkipARFCN08();
} else {
single_value->field_incSkipARFCN08.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.incSkipARFCN07().get_selection()) {
single_value->field_incSkipARFCN07 = other_value.incSkipARFCN07();
} else {
single_value->field_incSkipARFCN07.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.incSkipARFCN10().get_selection()) {
single_value->field_incSkipARFCN10 = other_value.incSkipARFCN10();
} else {
single_value->field_incSkipARFCN10.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.incSkipARFCN09().get_selection()) {
single_value->field_incSkipARFCN09 = other_value.incSkipARFCN09();
} else {
single_value->field_incSkipARFCN09.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.incSkipARFCN12().get_selection()) {
single_value->field_incSkipARFCN12 = other_value.incSkipARFCN12();
} else {
single_value->field_incSkipARFCN12.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.incSkipARFCN11().get_selection()) {
single_value->field_incSkipARFCN11 = other_value.incSkipARFCN11();
} else {
single_value->field_incSkipARFCN11.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.incSkipARFCN14().get_selection()) {
single_value->field_incSkipARFCN14 = other_value.incSkipARFCN14();
} else {
single_value->field_incSkipARFCN14.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.incSkipARFCN13().get_selection()) {
single_value->field_incSkipARFCN13 = other_value.incSkipARFCN13();
} else {
single_value->field_incSkipARFCN13.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.incSkipARFCN16().get_selection()) {
single_value->field_incSkipARFCN16 = other_value.incSkipARFCN16();
} else {
single_value->field_incSkipARFCN16.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.incSkipARFCN15().get_selection()) {
single_value->field_incSkipARFCN15 = other_value.incSkipARFCN15();
} else {
single_value->field_incSkipARFCN15.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new FrequencyChannelSequence__TV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new FrequencyChannelSequence__TV_template(*other_value.implication_.precondition);
implication_.implied_template = new FrequencyChannelSequence__TV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
break;
}
set_selection(other_value);
}

FrequencyChannelSequence__TV_template::FrequencyChannelSequence__TV_template()
{
}

FrequencyChannelSequence__TV_template::FrequencyChannelSequence__TV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

FrequencyChannelSequence__TV_template::FrequencyChannelSequence__TV_template(const FrequencyChannelSequence__TV& other_value)
{
copy_value(other_value);
}

FrequencyChannelSequence__TV_template::FrequencyChannelSequence__TV_template(const OPTIONAL<FrequencyChannelSequence__TV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const FrequencyChannelSequence__TV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV from an unbound optional field.");
}
}

FrequencyChannelSequence__TV_template::FrequencyChannelSequence__TV_template(FrequencyChannelSequence__TV_template* p_precondition, FrequencyChannelSequence__TV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

FrequencyChannelSequence__TV_template::FrequencyChannelSequence__TV_template(Dynamic_Match_Interface<FrequencyChannelSequence__TV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<FrequencyChannelSequence__TV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

FrequencyChannelSequence__TV_template::FrequencyChannelSequence__TV_template(const FrequencyChannelSequence__TV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

FrequencyChannelSequence__TV_template::~FrequencyChannelSequence__TV_template()
{
clean_up();
}

FrequencyChannelSequence__TV_template& FrequencyChannelSequence__TV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

FrequencyChannelSequence__TV_template& FrequencyChannelSequence__TV_template::operator=(const FrequencyChannelSequence__TV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

FrequencyChannelSequence__TV_template& FrequencyChannelSequence__TV_template::operator=(const OPTIONAL<FrequencyChannelSequence__TV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const FrequencyChannelSequence__TV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
}
return *this;
}

FrequencyChannelSequence__TV_template& FrequencyChannelSequence__TV_template::operator=(const FrequencyChannelSequence__TV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean FrequencyChannelSequence__TV_template::match(const FrequencyChannelSequence__TV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.elementIdentifier().is_bound()) return FALSE;
if(!single_value->field_elementIdentifier.match(other_value.elementIdentifier(), legacy))return FALSE;
if(!other_value.lowestARFCN().is_bound()) return FALSE;
if(!single_value->field_lowestARFCN.match(other_value.lowestARFCN(), legacy))return FALSE;
if(!other_value.spare().is_bound()) return FALSE;
if(!single_value->field_spare.match(other_value.spare(), legacy))return FALSE;
if(!other_value.incSkipARFCN02().is_bound()) return FALSE;
if(!single_value->field_incSkipARFCN02.match(other_value.incSkipARFCN02(), legacy))return FALSE;
if(!other_value.incSkipARFCN01().is_bound()) return FALSE;
if(!single_value->field_incSkipARFCN01.match(other_value.incSkipARFCN01(), legacy))return FALSE;
if(!other_value.incSkipARFCN04().is_bound()) return FALSE;
if(!single_value->field_incSkipARFCN04.match(other_value.incSkipARFCN04(), legacy))return FALSE;
if(!other_value.incSkipARFCN03().is_bound()) return FALSE;
if(!single_value->field_incSkipARFCN03.match(other_value.incSkipARFCN03(), legacy))return FALSE;
if(!other_value.incSkipARFCN06().is_bound()) return FALSE;
if(!single_value->field_incSkipARFCN06.match(other_value.incSkipARFCN06(), legacy))return FALSE;
if(!other_value.incSkipARFCN05().is_bound()) return FALSE;
if(!single_value->field_incSkipARFCN05.match(other_value.incSkipARFCN05(), legacy))return FALSE;
if(!other_value.incSkipARFCN08().is_bound()) return FALSE;
if(!single_value->field_incSkipARFCN08.match(other_value.incSkipARFCN08(), legacy))return FALSE;
if(!other_value.incSkipARFCN07().is_bound()) return FALSE;
if(!single_value->field_incSkipARFCN07.match(other_value.incSkipARFCN07(), legacy))return FALSE;
if(!other_value.incSkipARFCN10().is_bound()) return FALSE;
if(!single_value->field_incSkipARFCN10.match(other_value.incSkipARFCN10(), legacy))return FALSE;
if(!other_value.incSkipARFCN09().is_bound()) return FALSE;
if(!single_value->field_incSkipARFCN09.match(other_value.incSkipARFCN09(), legacy))return FALSE;
if(!other_value.incSkipARFCN12().is_bound()) return FALSE;
if(!single_value->field_incSkipARFCN12.match(other_value.incSkipARFCN12(), legacy))return FALSE;
if(!other_value.incSkipARFCN11().is_bound()) return FALSE;
if(!single_value->field_incSkipARFCN11.match(other_value.incSkipARFCN11(), legacy))return FALSE;
if(!other_value.incSkipARFCN14().is_bound()) return FALSE;
if(!single_value->field_incSkipARFCN14.match(other_value.incSkipARFCN14(), legacy))return FALSE;
if(!other_value.incSkipARFCN13().is_bound()) return FALSE;
if(!single_value->field_incSkipARFCN13.match(other_value.incSkipARFCN13(), legacy))return FALSE;
if(!other_value.incSkipARFCN16().is_bound()) return FALSE;
if(!single_value->field_incSkipARFCN16.match(other_value.incSkipARFCN16(), legacy))return FALSE;
if(!other_value.incSkipARFCN15().is_bound()) return FALSE;
if(!single_value->field_incSkipARFCN15.match(other_value.incSkipARFCN15(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
}
return FALSE;
}

boolean FrequencyChannelSequence__TV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_elementIdentifier.is_bound()
 || single_value->field_lowestARFCN.is_bound()
 || single_value->field_spare.is_bound()
 || single_value->field_incSkipARFCN02.is_bound()
 || single_value->field_incSkipARFCN01.is_bound()
 || single_value->field_incSkipARFCN04.is_bound()
 || single_value->field_incSkipARFCN03.is_bound()
 || single_value->field_incSkipARFCN06.is_bound()
 || single_value->field_incSkipARFCN05.is_bound()
 || single_value->field_incSkipARFCN08.is_bound()
 || single_value->field_incSkipARFCN07.is_bound()
 || single_value->field_incSkipARFCN10.is_bound()
 || single_value->field_incSkipARFCN09.is_bound()
 || single_value->field_incSkipARFCN12.is_bound()
 || single_value->field_incSkipARFCN11.is_bound()
 || single_value->field_incSkipARFCN14.is_bound()
 || single_value->field_incSkipARFCN13.is_bound()
 || single_value->field_incSkipARFCN16.is_bound()
 || single_value->field_incSkipARFCN15.is_bound();
}

boolean FrequencyChannelSequence__TV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_elementIdentifier.is_value()
 && single_value->field_lowestARFCN.is_value()
 && single_value->field_spare.is_value()
 && single_value->field_incSkipARFCN02.is_value()
 && single_value->field_incSkipARFCN01.is_value()
 && single_value->field_incSkipARFCN04.is_value()
 && single_value->field_incSkipARFCN03.is_value()
 && single_value->field_incSkipARFCN06.is_value()
 && single_value->field_incSkipARFCN05.is_value()
 && single_value->field_incSkipARFCN08.is_value()
 && single_value->field_incSkipARFCN07.is_value()
 && single_value->field_incSkipARFCN10.is_value()
 && single_value->field_incSkipARFCN09.is_value()
 && single_value->field_incSkipARFCN12.is_value()
 && single_value->field_incSkipARFCN11.is_value()
 && single_value->field_incSkipARFCN14.is_value()
 && single_value->field_incSkipARFCN13.is_value()
 && single_value->field_incSkipARFCN16.is_value()
 && single_value->field_incSkipARFCN15.is_value();
}

void FrequencyChannelSequence__TV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

FrequencyChannelSequence__TV FrequencyChannelSequence__TV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
FrequencyChannelSequence__TV ret_val;
if (single_value->field_elementIdentifier.is_bound()) {
ret_val.elementIdentifier() = single_value->field_elementIdentifier.valueof();
}
if (single_value->field_lowestARFCN.is_bound()) {
ret_val.lowestARFCN() = single_value->field_lowestARFCN.valueof();
}
if (single_value->field_spare.is_bound()) {
ret_val.spare() = single_value->field_spare.valueof();
}
if (single_value->field_incSkipARFCN02.is_bound()) {
ret_val.incSkipARFCN02() = single_value->field_incSkipARFCN02.valueof();
}
if (single_value->field_incSkipARFCN01.is_bound()) {
ret_val.incSkipARFCN01() = single_value->field_incSkipARFCN01.valueof();
}
if (single_value->field_incSkipARFCN04.is_bound()) {
ret_val.incSkipARFCN04() = single_value->field_incSkipARFCN04.valueof();
}
if (single_value->field_incSkipARFCN03.is_bound()) {
ret_val.incSkipARFCN03() = single_value->field_incSkipARFCN03.valueof();
}
if (single_value->field_incSkipARFCN06.is_bound()) {
ret_val.incSkipARFCN06() = single_value->field_incSkipARFCN06.valueof();
}
if (single_value->field_incSkipARFCN05.is_bound()) {
ret_val.incSkipARFCN05() = single_value->field_incSkipARFCN05.valueof();
}
if (single_value->field_incSkipARFCN08.is_bound()) {
ret_val.incSkipARFCN08() = single_value->field_incSkipARFCN08.valueof();
}
if (single_value->field_incSkipARFCN07.is_bound()) {
ret_val.incSkipARFCN07() = single_value->field_incSkipARFCN07.valueof();
}
if (single_value->field_incSkipARFCN10.is_bound()) {
ret_val.incSkipARFCN10() = single_value->field_incSkipARFCN10.valueof();
}
if (single_value->field_incSkipARFCN09.is_bound()) {
ret_val.incSkipARFCN09() = single_value->field_incSkipARFCN09.valueof();
}
if (single_value->field_incSkipARFCN12.is_bound()) {
ret_val.incSkipARFCN12() = single_value->field_incSkipARFCN12.valueof();
}
if (single_value->field_incSkipARFCN11.is_bound()) {
ret_val.incSkipARFCN11() = single_value->field_incSkipARFCN11.valueof();
}
if (single_value->field_incSkipARFCN14.is_bound()) {
ret_val.incSkipARFCN14() = single_value->field_incSkipARFCN14.valueof();
}
if (single_value->field_incSkipARFCN13.is_bound()) {
ret_val.incSkipARFCN13() = single_value->field_incSkipARFCN13.valueof();
}
if (single_value->field_incSkipARFCN16.is_bound()) {
ret_val.incSkipARFCN16() = single_value->field_incSkipARFCN16.valueof();
}
if (single_value->field_incSkipARFCN15.is_bound()) {
ret_val.incSkipARFCN15() = single_value->field_incSkipARFCN15.valueof();
}
return ret_val;
}

void FrequencyChannelSequence__TV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new FrequencyChannelSequence__TV_template[list_length];
}

FrequencyChannelSequence__TV_template& FrequencyChannelSequence__TV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
return value_list.list_value[list_index];
}

OCTETSTRING_template& FrequencyChannelSequence__TV_template::elementIdentifier()
{
set_specific();
return single_value->field_elementIdentifier;
}

const OCTETSTRING_template& FrequencyChannelSequence__TV_template::elementIdentifier() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field elementIdentifier of a non-specific template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
return single_value->field_elementIdentifier;
}

BITSTRING_template& FrequencyChannelSequence__TV_template::lowestARFCN()
{
set_specific();
return single_value->field_lowestARFCN;
}

const BITSTRING_template& FrequencyChannelSequence__TV_template::lowestARFCN() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field lowestARFCN of a non-specific template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
return single_value->field_lowestARFCN;
}

BITSTRING_template& FrequencyChannelSequence__TV_template::spare()
{
set_specific();
return single_value->field_spare;
}

const BITSTRING_template& FrequencyChannelSequence__TV_template::spare() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field spare of a non-specific template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
return single_value->field_spare;
}

BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN02()
{
set_specific();
return single_value->field_incSkipARFCN02;
}

const BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN02() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field incSkipARFCN02 of a non-specific template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
return single_value->field_incSkipARFCN02;
}

BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN01()
{
set_specific();
return single_value->field_incSkipARFCN01;
}

const BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN01() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field incSkipARFCN01 of a non-specific template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
return single_value->field_incSkipARFCN01;
}

BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN04()
{
set_specific();
return single_value->field_incSkipARFCN04;
}

const BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN04() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field incSkipARFCN04 of a non-specific template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
return single_value->field_incSkipARFCN04;
}

BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN03()
{
set_specific();
return single_value->field_incSkipARFCN03;
}

const BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN03() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field incSkipARFCN03 of a non-specific template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
return single_value->field_incSkipARFCN03;
}

BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN06()
{
set_specific();
return single_value->field_incSkipARFCN06;
}

const BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN06() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field incSkipARFCN06 of a non-specific template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
return single_value->field_incSkipARFCN06;
}

BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN05()
{
set_specific();
return single_value->field_incSkipARFCN05;
}

const BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN05() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field incSkipARFCN05 of a non-specific template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
return single_value->field_incSkipARFCN05;
}

BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN08()
{
set_specific();
return single_value->field_incSkipARFCN08;
}

const BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN08() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field incSkipARFCN08 of a non-specific template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
return single_value->field_incSkipARFCN08;
}

BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN07()
{
set_specific();
return single_value->field_incSkipARFCN07;
}

const BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN07() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field incSkipARFCN07 of a non-specific template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
return single_value->field_incSkipARFCN07;
}

BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN10()
{
set_specific();
return single_value->field_incSkipARFCN10;
}

const BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN10() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field incSkipARFCN10 of a non-specific template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
return single_value->field_incSkipARFCN10;
}

BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN09()
{
set_specific();
return single_value->field_incSkipARFCN09;
}

const BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN09() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field incSkipARFCN09 of a non-specific template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
return single_value->field_incSkipARFCN09;
}

BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN12()
{
set_specific();
return single_value->field_incSkipARFCN12;
}

const BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN12() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field incSkipARFCN12 of a non-specific template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
return single_value->field_incSkipARFCN12;
}

BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN11()
{
set_specific();
return single_value->field_incSkipARFCN11;
}

const BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN11() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field incSkipARFCN11 of a non-specific template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
return single_value->field_incSkipARFCN11;
}

BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN14()
{
set_specific();
return single_value->field_incSkipARFCN14;
}

const BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN14() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field incSkipARFCN14 of a non-specific template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
return single_value->field_incSkipARFCN14;
}

BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN13()
{
set_specific();
return single_value->field_incSkipARFCN13;
}

const BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN13() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field incSkipARFCN13 of a non-specific template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
return single_value->field_incSkipARFCN13;
}

BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN16()
{
set_specific();
return single_value->field_incSkipARFCN16;
}

const BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN16() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field incSkipARFCN16 of a non-specific template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
return single_value->field_incSkipARFCN16;
}

BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN15()
{
set_specific();
return single_value->field_incSkipARFCN15;
}

const BITSTRING_template& FrequencyChannelSequence__TV_template::incSkipARFCN15() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field incSkipARFCN15 of a non-specific template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
return single_value->field_incSkipARFCN15;
}

int FrequencyChannelSequence__TV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 19;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
  }
  return 0;
}

void FrequencyChannelSequence__TV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log();
TTCN_Logger::log_event_str(", lowestARFCN := ");
single_value->field_lowestARFCN.log();
TTCN_Logger::log_event_str(", spare := ");
single_value->field_spare.log();
TTCN_Logger::log_event_str(", incSkipARFCN02 := ");
single_value->field_incSkipARFCN02.log();
TTCN_Logger::log_event_str(", incSkipARFCN01 := ");
single_value->field_incSkipARFCN01.log();
TTCN_Logger::log_event_str(", incSkipARFCN04 := ");
single_value->field_incSkipARFCN04.log();
TTCN_Logger::log_event_str(", incSkipARFCN03 := ");
single_value->field_incSkipARFCN03.log();
TTCN_Logger::log_event_str(", incSkipARFCN06 := ");
single_value->field_incSkipARFCN06.log();
TTCN_Logger::log_event_str(", incSkipARFCN05 := ");
single_value->field_incSkipARFCN05.log();
TTCN_Logger::log_event_str(", incSkipARFCN08 := ");
single_value->field_incSkipARFCN08.log();
TTCN_Logger::log_event_str(", incSkipARFCN07 := ");
single_value->field_incSkipARFCN07.log();
TTCN_Logger::log_event_str(", incSkipARFCN10 := ");
single_value->field_incSkipARFCN10.log();
TTCN_Logger::log_event_str(", incSkipARFCN09 := ");
single_value->field_incSkipARFCN09.log();
TTCN_Logger::log_event_str(", incSkipARFCN12 := ");
single_value->field_incSkipARFCN12.log();
TTCN_Logger::log_event_str(", incSkipARFCN11 := ");
single_value->field_incSkipARFCN11.log();
TTCN_Logger::log_event_str(", incSkipARFCN14 := ");
single_value->field_incSkipARFCN14.log();
TTCN_Logger::log_event_str(", incSkipARFCN13 := ");
single_value->field_incSkipARFCN13.log();
TTCN_Logger::log_event_str(", incSkipARFCN16 := ");
single_value->field_incSkipARFCN16.log();
TTCN_Logger::log_event_str(", incSkipARFCN15 := ");
single_value->field_incSkipARFCN15.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void FrequencyChannelSequence__TV_template::log_match(const FrequencyChannelSequence__TV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_elementIdentifier.match(match_value.elementIdentifier(), legacy)){
TTCN_Logger::log_logmatch_info(".elementIdentifier");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_lowestARFCN.match(match_value.lowestARFCN(), legacy)){
TTCN_Logger::log_logmatch_info(".lowestARFCN");
single_value->field_lowestARFCN.log_match(match_value.lowestARFCN(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_spare.match(match_value.spare(), legacy)){
TTCN_Logger::log_logmatch_info(".spare");
single_value->field_spare.log_match(match_value.spare(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_incSkipARFCN02.match(match_value.incSkipARFCN02(), legacy)){
TTCN_Logger::log_logmatch_info(".incSkipARFCN02");
single_value->field_incSkipARFCN02.log_match(match_value.incSkipARFCN02(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_incSkipARFCN01.match(match_value.incSkipARFCN01(), legacy)){
TTCN_Logger::log_logmatch_info(".incSkipARFCN01");
single_value->field_incSkipARFCN01.log_match(match_value.incSkipARFCN01(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_incSkipARFCN04.match(match_value.incSkipARFCN04(), legacy)){
TTCN_Logger::log_logmatch_info(".incSkipARFCN04");
single_value->field_incSkipARFCN04.log_match(match_value.incSkipARFCN04(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_incSkipARFCN03.match(match_value.incSkipARFCN03(), legacy)){
TTCN_Logger::log_logmatch_info(".incSkipARFCN03");
single_value->field_incSkipARFCN03.log_match(match_value.incSkipARFCN03(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_incSkipARFCN06.match(match_value.incSkipARFCN06(), legacy)){
TTCN_Logger::log_logmatch_info(".incSkipARFCN06");
single_value->field_incSkipARFCN06.log_match(match_value.incSkipARFCN06(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_incSkipARFCN05.match(match_value.incSkipARFCN05(), legacy)){
TTCN_Logger::log_logmatch_info(".incSkipARFCN05");
single_value->field_incSkipARFCN05.log_match(match_value.incSkipARFCN05(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_incSkipARFCN08.match(match_value.incSkipARFCN08(), legacy)){
TTCN_Logger::log_logmatch_info(".incSkipARFCN08");
single_value->field_incSkipARFCN08.log_match(match_value.incSkipARFCN08(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_incSkipARFCN07.match(match_value.incSkipARFCN07(), legacy)){
TTCN_Logger::log_logmatch_info(".incSkipARFCN07");
single_value->field_incSkipARFCN07.log_match(match_value.incSkipARFCN07(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_incSkipARFCN10.match(match_value.incSkipARFCN10(), legacy)){
TTCN_Logger::log_logmatch_info(".incSkipARFCN10");
single_value->field_incSkipARFCN10.log_match(match_value.incSkipARFCN10(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_incSkipARFCN09.match(match_value.incSkipARFCN09(), legacy)){
TTCN_Logger::log_logmatch_info(".incSkipARFCN09");
single_value->field_incSkipARFCN09.log_match(match_value.incSkipARFCN09(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_incSkipARFCN12.match(match_value.incSkipARFCN12(), legacy)){
TTCN_Logger::log_logmatch_info(".incSkipARFCN12");
single_value->field_incSkipARFCN12.log_match(match_value.incSkipARFCN12(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_incSkipARFCN11.match(match_value.incSkipARFCN11(), legacy)){
TTCN_Logger::log_logmatch_info(".incSkipARFCN11");
single_value->field_incSkipARFCN11.log_match(match_value.incSkipARFCN11(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_incSkipARFCN14.match(match_value.incSkipARFCN14(), legacy)){
TTCN_Logger::log_logmatch_info(".incSkipARFCN14");
single_value->field_incSkipARFCN14.log_match(match_value.incSkipARFCN14(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_incSkipARFCN13.match(match_value.incSkipARFCN13(), legacy)){
TTCN_Logger::log_logmatch_info(".incSkipARFCN13");
single_value->field_incSkipARFCN13.log_match(match_value.incSkipARFCN13(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_incSkipARFCN16.match(match_value.incSkipARFCN16(), legacy)){
TTCN_Logger::log_logmatch_info(".incSkipARFCN16");
single_value->field_incSkipARFCN16.log_match(match_value.incSkipARFCN16(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_incSkipARFCN15.match(match_value.incSkipARFCN15(), legacy)){
TTCN_Logger::log_logmatch_info(".incSkipARFCN15");
single_value->field_incSkipARFCN15.log_match(match_value.incSkipARFCN15(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::log_event_str(", lowestARFCN := ");
single_value->field_lowestARFCN.log_match(match_value.lowestARFCN(), legacy);
TTCN_Logger::log_event_str(", spare := ");
single_value->field_spare.log_match(match_value.spare(), legacy);
TTCN_Logger::log_event_str(", incSkipARFCN02 := ");
single_value->field_incSkipARFCN02.log_match(match_value.incSkipARFCN02(), legacy);
TTCN_Logger::log_event_str(", incSkipARFCN01 := ");
single_value->field_incSkipARFCN01.log_match(match_value.incSkipARFCN01(), legacy);
TTCN_Logger::log_event_str(", incSkipARFCN04 := ");
single_value->field_incSkipARFCN04.log_match(match_value.incSkipARFCN04(), legacy);
TTCN_Logger::log_event_str(", incSkipARFCN03 := ");
single_value->field_incSkipARFCN03.log_match(match_value.incSkipARFCN03(), legacy);
TTCN_Logger::log_event_str(", incSkipARFCN06 := ");
single_value->field_incSkipARFCN06.log_match(match_value.incSkipARFCN06(), legacy);
TTCN_Logger::log_event_str(", incSkipARFCN05 := ");
single_value->field_incSkipARFCN05.log_match(match_value.incSkipARFCN05(), legacy);
TTCN_Logger::log_event_str(", incSkipARFCN08 := ");
single_value->field_incSkipARFCN08.log_match(match_value.incSkipARFCN08(), legacy);
TTCN_Logger::log_event_str(", incSkipARFCN07 := ");
single_value->field_incSkipARFCN07.log_match(match_value.incSkipARFCN07(), legacy);
TTCN_Logger::log_event_str(", incSkipARFCN10 := ");
single_value->field_incSkipARFCN10.log_match(match_value.incSkipARFCN10(), legacy);
TTCN_Logger::log_event_str(", incSkipARFCN09 := ");
single_value->field_incSkipARFCN09.log_match(match_value.incSkipARFCN09(), legacy);
TTCN_Logger::log_event_str(", incSkipARFCN12 := ");
single_value->field_incSkipARFCN12.log_match(match_value.incSkipARFCN12(), legacy);
TTCN_Logger::log_event_str(", incSkipARFCN11 := ");
single_value->field_incSkipARFCN11.log_match(match_value.incSkipARFCN11(), legacy);
TTCN_Logger::log_event_str(", incSkipARFCN14 := ");
single_value->field_incSkipARFCN14.log_match(match_value.incSkipARFCN14(), legacy);
TTCN_Logger::log_event_str(", incSkipARFCN13 := ");
single_value->field_incSkipARFCN13.log_match(match_value.incSkipARFCN13(), legacy);
TTCN_Logger::log_event_str(", incSkipARFCN16 := ");
single_value->field_incSkipARFCN16.log_match(match_value.incSkipARFCN16(), legacy);
TTCN_Logger::log_event_str(", incSkipARFCN15 := ");
single_value->field_incSkipARFCN15.log_match(match_value.incSkipARFCN15(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void FrequencyChannelSequence__TV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (lowestARFCN().is_bound()) lowestARFCN().set_implicit_omit();
if (spare().is_bound()) spare().set_implicit_omit();
if (incSkipARFCN02().is_bound()) incSkipARFCN02().set_implicit_omit();
if (incSkipARFCN01().is_bound()) incSkipARFCN01().set_implicit_omit();
if (incSkipARFCN04().is_bound()) incSkipARFCN04().set_implicit_omit();
if (incSkipARFCN03().is_bound()) incSkipARFCN03().set_implicit_omit();
if (incSkipARFCN06().is_bound()) incSkipARFCN06().set_implicit_omit();
if (incSkipARFCN05().is_bound()) incSkipARFCN05().set_implicit_omit();
if (incSkipARFCN08().is_bound()) incSkipARFCN08().set_implicit_omit();
if (incSkipARFCN07().is_bound()) incSkipARFCN07().set_implicit_omit();
if (incSkipARFCN10().is_bound()) incSkipARFCN10().set_implicit_omit();
if (incSkipARFCN09().is_bound()) incSkipARFCN09().set_implicit_omit();
if (incSkipARFCN12().is_bound()) incSkipARFCN12().set_implicit_omit();
if (incSkipARFCN11().is_bound()) incSkipARFCN11().set_implicit_omit();
if (incSkipARFCN14().is_bound()) incSkipARFCN14().set_implicit_omit();
if (incSkipARFCN13().is_bound()) incSkipARFCN13().set_implicit_omit();
if (incSkipARFCN16().is_bound()) incSkipARFCN16().set_implicit_omit();
if (incSkipARFCN15().is_bound()) incSkipARFCN15().set_implicit_omit();
}

void FrequencyChannelSequence__TV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_elementIdentifier.encode_text(text_buf);
single_value->field_lowestARFCN.encode_text(text_buf);
single_value->field_spare.encode_text(text_buf);
single_value->field_incSkipARFCN02.encode_text(text_buf);
single_value->field_incSkipARFCN01.encode_text(text_buf);
single_value->field_incSkipARFCN04.encode_text(text_buf);
single_value->field_incSkipARFCN03.encode_text(text_buf);
single_value->field_incSkipARFCN06.encode_text(text_buf);
single_value->field_incSkipARFCN05.encode_text(text_buf);
single_value->field_incSkipARFCN08.encode_text(text_buf);
single_value->field_incSkipARFCN07.encode_text(text_buf);
single_value->field_incSkipARFCN10.encode_text(text_buf);
single_value->field_incSkipARFCN09.encode_text(text_buf);
single_value->field_incSkipARFCN12.encode_text(text_buf);
single_value->field_incSkipARFCN11.encode_text(text_buf);
single_value->field_incSkipARFCN14.encode_text(text_buf);
single_value->field_incSkipARFCN13.encode_text(text_buf);
single_value->field_incSkipARFCN16.encode_text(text_buf);
single_value->field_incSkipARFCN15.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
}
}

void FrequencyChannelSequence__TV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_elementIdentifier.decode_text(text_buf);
single_value->field_lowestARFCN.decode_text(text_buf);
single_value->field_spare.decode_text(text_buf);
single_value->field_incSkipARFCN02.decode_text(text_buf);
single_value->field_incSkipARFCN01.decode_text(text_buf);
single_value->field_incSkipARFCN04.decode_text(text_buf);
single_value->field_incSkipARFCN03.decode_text(text_buf);
single_value->field_incSkipARFCN06.decode_text(text_buf);
single_value->field_incSkipARFCN05.decode_text(text_buf);
single_value->field_incSkipARFCN08.decode_text(text_buf);
single_value->field_incSkipARFCN07.decode_text(text_buf);
single_value->field_incSkipARFCN10.decode_text(text_buf);
single_value->field_incSkipARFCN09.decode_text(text_buf);
single_value->field_incSkipARFCN12.decode_text(text_buf);
single_value->field_incSkipARFCN11.decode_text(text_buf);
single_value->field_incSkipARFCN14.decode_text(text_buf);
single_value->field_incSkipARFCN13.decode_text(text_buf);
single_value->field_incSkipARFCN16.decode_text(text_buf);
single_value->field_incSkipARFCN15.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new FrequencyChannelSequence__TV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV.");
}
}

void FrequencyChannelSequence__TV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    FrequencyChannelSequence__TV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (19<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.FrequencyChannelSequence_TV has 19 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) lowestARFCN().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) spare().set_param(*param.get_elem(2));
    if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN02().set_param(*param.get_elem(3));
    if (param.get_size()>4 && param.get_elem(4)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN01().set_param(*param.get_elem(4));
    if (param.get_size()>5 && param.get_elem(5)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN04().set_param(*param.get_elem(5));
    if (param.get_size()>6 && param.get_elem(6)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN03().set_param(*param.get_elem(6));
    if (param.get_size()>7 && param.get_elem(7)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN06().set_param(*param.get_elem(7));
    if (param.get_size()>8 && param.get_elem(8)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN05().set_param(*param.get_elem(8));
    if (param.get_size()>9 && param.get_elem(9)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN08().set_param(*param.get_elem(9));
    if (param.get_size()>10 && param.get_elem(10)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN07().set_param(*param.get_elem(10));
    if (param.get_size()>11 && param.get_elem(11)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN10().set_param(*param.get_elem(11));
    if (param.get_size()>12 && param.get_elem(12)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN09().set_param(*param.get_elem(12));
    if (param.get_size()>13 && param.get_elem(13)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN12().set_param(*param.get_elem(13));
    if (param.get_size()>14 && param.get_elem(14)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN11().set_param(*param.get_elem(14));
    if (param.get_size()>15 && param.get_elem(15)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN14().set_param(*param.get_elem(15));
    if (param.get_size()>16 && param.get_elem(16)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN13().set_param(*param.get_elem(16));
    if (param.get_size()>17 && param.get_elem(17)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN16().set_param(*param.get_elem(17));
    if (param.get_size()>18 && param.get_elem(18)->get_type()!=Module_Param::MP_NotUsed) incSkipARFCN15().set_param(*param.get_elem(18));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lowestARFCN")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lowestARFCN().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "spare")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          spare().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN02")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN02().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN01")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN01().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN04")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN04().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN03")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN03().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN06")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN06().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN05")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN05().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN08")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN08().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN07")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN07().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN10")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN10().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN09")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN09().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN12")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN12().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN11")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN11().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN14")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN14().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN13")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN13().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN16")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN16().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "incSkipARFCN15")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          incSkipARFCN15().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.FrequencyChannelSequence_TV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    FrequencyChannelSequence__TV_template* precondition = new FrequencyChannelSequence__TV_template;
    precondition->set_param(*param.get_elem(0));
    FrequencyChannelSequence__TV_template* implied_template = new FrequencyChannelSequence__TV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = FrequencyChannelSequence__TV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.FrequencyChannelSequence_TV");
  }
  is_ifpresent = param.get_ifpresent();
}

void FrequencyChannelSequence__TV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_elementIdentifier.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.FrequencyChannelSequence_TV");
single_value->field_lowestARFCN.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.FrequencyChannelSequence_TV");
single_value->field_spare.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.FrequencyChannelSequence_TV");
single_value->field_incSkipARFCN02.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.FrequencyChannelSequence_TV");
single_value->field_incSkipARFCN01.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.FrequencyChannelSequence_TV");
single_value->field_incSkipARFCN04.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.FrequencyChannelSequence_TV");
single_value->field_incSkipARFCN03.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.FrequencyChannelSequence_TV");
single_value->field_incSkipARFCN06.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.FrequencyChannelSequence_TV");
single_value->field_incSkipARFCN05.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.FrequencyChannelSequence_TV");
single_value->field_incSkipARFCN08.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.FrequencyChannelSequence_TV");
single_value->field_incSkipARFCN07.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.FrequencyChannelSequence_TV");
single_value->field_incSkipARFCN10.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.FrequencyChannelSequence_TV");
single_value->field_incSkipARFCN09.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.FrequencyChannelSequence_TV");
single_value->field_incSkipARFCN12.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.FrequencyChannelSequence_TV");
single_value->field_incSkipARFCN11.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.FrequencyChannelSequence_TV");
single_value->field_incSkipARFCN14.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.FrequencyChannelSequence_TV");
single_value->field_incSkipARFCN13.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.FrequencyChannelSequence_TV");
single_value->field_incSkipARFCN16.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.FrequencyChannelSequence_TV");
single_value->field_incSkipARFCN15.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.FrequencyChannelSequence_TV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.FrequencyChannelSequence_TV");
}

boolean FrequencyChannelSequence__TV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean FrequencyChannelSequence__TV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

FrequencyShortList__TV::FrequencyShortList__TV()
{
}

FrequencyShortList__TV::FrequencyShortList__TV(const OCTETSTRING& par_elementIdentifier,
    const OCTETSTRING& par_frequencyShortListValue)
  :   field_elementIdentifier(par_elementIdentifier),
  field_frequencyShortListValue(par_frequencyShortListValue)
{
}

FrequencyShortList__TV::FrequencyShortList__TV(const FrequencyShortList__TV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.FrequencyShortList_TV.");
if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
else field_elementIdentifier.clean_up();
if (other_value.frequencyShortListValue().is_bound()) field_frequencyShortListValue = other_value.frequencyShortListValue();
else field_frequencyShortListValue.clean_up();
}

void FrequencyShortList__TV::clean_up()
{
field_elementIdentifier.clean_up();
field_frequencyShortListValue.clean_up();
}

const TTCN_Typedescriptor_t* FrequencyShortList__TV::get_descriptor() const { return &FrequencyShortList__TV_descr_; }
FrequencyShortList__TV& FrequencyShortList__TV::operator=(const FrequencyShortList__TV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.FrequencyShortList_TV.");
  if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
  else field_elementIdentifier.clean_up();
  if (other_value.frequencyShortListValue().is_bound()) field_frequencyShortListValue = other_value.frequencyShortListValue();
  else field_frequencyShortListValue.clean_up();
}
return *this;
}

boolean FrequencyShortList__TV::operator==(const FrequencyShortList__TV& other_value) const
{
return field_elementIdentifier==other_value.field_elementIdentifier
  && field_frequencyShortListValue==other_value.field_frequencyShortListValue;
}

boolean FrequencyShortList__TV::is_bound() const
{
return (field_elementIdentifier.is_bound())
  || (field_frequencyShortListValue.is_bound());
}
boolean FrequencyShortList__TV::is_value() const
{
return field_elementIdentifier.is_value()
  && field_frequencyShortListValue.is_value();
}
void FrequencyShortList__TV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ elementIdentifier := ");
field_elementIdentifier.log();
TTCN_Logger::log_event_str(", frequencyShortListValue := ");
field_frequencyShortListValue.log();
TTCN_Logger::log_event_str(" }");
}

void FrequencyShortList__TV::set_implicit_omit()
{
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (frequencyShortListValue().is_bound()) frequencyShortListValue().set_implicit_omit();
}

void FrequencyShortList__TV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.FrequencyShortList_TV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) frequencyShortListValue().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "frequencyShortListValue")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          frequencyShortListValue().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.FrequencyShortList_TV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.FrequencyShortList_TV");
  }
}

void FrequencyShortList__TV::encode_text(Text_Buf& text_buf) const
{
field_elementIdentifier.encode_text(text_buf);
field_frequencyShortListValue.encode_text(text_buf);
}

void FrequencyShortList__TV::decode_text(Text_Buf& text_buf)
{
field_elementIdentifier.decode_text(text_buf);
field_frequencyShortListValue.decode_text(text_buf);
}

void FrequencyShortList__TV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void FrequencyShortList__TV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int FrequencyShortList__TV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_elementIdentifier.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, General__Types::OCT9_descr_.raw->forceomit);
  decoded_field_length = field_frequencyShortListValue.RAW_decode(General__Types::OCT9_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int FrequencyShortList__TV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 2;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(2);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::OCT1_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, General__Types::OCT9_descr_.raw);
  encoded_length += field_elementIdentifier.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += field_frequencyShortListValue.RAW_encode(General__Types::OCT9_descr_, *myleaf.body.node.nodes[1]);
  return myleaf.length = encoded_length;
}

struct FrequencyShortList__TV_template::single_value_struct {
OCTETSTRING_template field_elementIdentifier;
OCTETSTRING_template field_frequencyShortListValue;
};

void FrequencyShortList__TV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_elementIdentifier = ANY_VALUE;
single_value->field_frequencyShortListValue = ANY_VALUE;
}
}
}

void FrequencyShortList__TV_template::copy_value(const FrequencyShortList__TV& other_value)
{
single_value = new single_value_struct;
if (other_value.elementIdentifier().is_bound()) {
  single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
  single_value->field_elementIdentifier.clean_up();
}
if (other_value.frequencyShortListValue().is_bound()) {
  single_value->field_frequencyShortListValue = other_value.frequencyShortListValue();
} else {
  single_value->field_frequencyShortListValue.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void FrequencyShortList__TV_template::copy_template(const FrequencyShortList__TV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.elementIdentifier().get_selection()) {
single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
single_value->field_elementIdentifier.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.frequencyShortListValue().get_selection()) {
single_value->field_frequencyShortListValue = other_value.frequencyShortListValue();
} else {
single_value->field_frequencyShortListValue.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new FrequencyShortList__TV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new FrequencyShortList__TV_template(*other_value.implication_.precondition);
implication_.implied_template = new FrequencyShortList__TV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.FrequencyShortList_TV.");
break;
}
set_selection(other_value);
}

FrequencyShortList__TV_template::FrequencyShortList__TV_template()
{
}

FrequencyShortList__TV_template::FrequencyShortList__TV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

FrequencyShortList__TV_template::FrequencyShortList__TV_template(const FrequencyShortList__TV& other_value)
{
copy_value(other_value);
}

FrequencyShortList__TV_template::FrequencyShortList__TV_template(const OPTIONAL<FrequencyShortList__TV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const FrequencyShortList__TV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.FrequencyShortList_TV from an unbound optional field.");
}
}

FrequencyShortList__TV_template::FrequencyShortList__TV_template(FrequencyShortList__TV_template* p_precondition, FrequencyShortList__TV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

FrequencyShortList__TV_template::FrequencyShortList__TV_template(Dynamic_Match_Interface<FrequencyShortList__TV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<FrequencyShortList__TV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

FrequencyShortList__TV_template::FrequencyShortList__TV_template(const FrequencyShortList__TV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

FrequencyShortList__TV_template::~FrequencyShortList__TV_template()
{
clean_up();
}

FrequencyShortList__TV_template& FrequencyShortList__TV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

FrequencyShortList__TV_template& FrequencyShortList__TV_template::operator=(const FrequencyShortList__TV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

FrequencyShortList__TV_template& FrequencyShortList__TV_template::operator=(const OPTIONAL<FrequencyShortList__TV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const FrequencyShortList__TV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.FrequencyShortList_TV.");
}
return *this;
}

FrequencyShortList__TV_template& FrequencyShortList__TV_template::operator=(const FrequencyShortList__TV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean FrequencyShortList__TV_template::match(const FrequencyShortList__TV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.elementIdentifier().is_bound()) return FALSE;
if(!single_value->field_elementIdentifier.match(other_value.elementIdentifier(), legacy))return FALSE;
if(!other_value.frequencyShortListValue().is_bound()) return FALSE;
if(!single_value->field_frequencyShortListValue.match(other_value.frequencyShortListValue(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.FrequencyShortList_TV.");
}
return FALSE;
}

boolean FrequencyShortList__TV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_elementIdentifier.is_bound()
 || single_value->field_frequencyShortListValue.is_bound();
}

boolean FrequencyShortList__TV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_elementIdentifier.is_value()
 && single_value->field_frequencyShortListValue.is_value();
}

void FrequencyShortList__TV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

FrequencyShortList__TV FrequencyShortList__TV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.FrequencyShortList_TV.");
FrequencyShortList__TV ret_val;
if (single_value->field_elementIdentifier.is_bound()) {
ret_val.elementIdentifier() = single_value->field_elementIdentifier.valueof();
}
if (single_value->field_frequencyShortListValue.is_bound()) {
ret_val.frequencyShortListValue() = single_value->field_frequencyShortListValue.valueof();
}
return ret_val;
}

void FrequencyShortList__TV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.FrequencyShortList_TV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new FrequencyShortList__TV_template[list_length];
}

FrequencyShortList__TV_template& FrequencyShortList__TV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.FrequencyShortList_TV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.FrequencyShortList_TV.");
return value_list.list_value[list_index];
}

OCTETSTRING_template& FrequencyShortList__TV_template::elementIdentifier()
{
set_specific();
return single_value->field_elementIdentifier;
}

const OCTETSTRING_template& FrequencyShortList__TV_template::elementIdentifier() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field elementIdentifier of a non-specific template of type @MobileL3_RRM_Types.FrequencyShortList_TV.");
return single_value->field_elementIdentifier;
}

OCTETSTRING_template& FrequencyShortList__TV_template::frequencyShortListValue()
{
set_specific();
return single_value->field_frequencyShortListValue;
}

const OCTETSTRING_template& FrequencyShortList__TV_template::frequencyShortListValue() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field frequencyShortListValue of a non-specific template of type @MobileL3_RRM_Types.FrequencyShortList_TV.");
return single_value->field_frequencyShortListValue;
}

int FrequencyShortList__TV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.FrequencyShortList_TV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 2;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.FrequencyShortList_TV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.FrequencyShortList_TV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.FrequencyShortList_TV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.FrequencyShortList_TV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.FrequencyShortList_TV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.FrequencyShortList_TV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.FrequencyShortList_TV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.FrequencyShortList_TV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.FrequencyShortList_TV.");
  }
  return 0;
}

void FrequencyShortList__TV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log();
TTCN_Logger::log_event_str(", frequencyShortListValue := ");
single_value->field_frequencyShortListValue.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void FrequencyShortList__TV_template::log_match(const FrequencyShortList__TV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_elementIdentifier.match(match_value.elementIdentifier(), legacy)){
TTCN_Logger::log_logmatch_info(".elementIdentifier");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_frequencyShortListValue.match(match_value.frequencyShortListValue(), legacy)){
TTCN_Logger::log_logmatch_info(".frequencyShortListValue");
single_value->field_frequencyShortListValue.log_match(match_value.frequencyShortListValue(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::log_event_str(", frequencyShortListValue := ");
single_value->field_frequencyShortListValue.log_match(match_value.frequencyShortListValue(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void FrequencyShortList__TV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (frequencyShortListValue().is_bound()) frequencyShortListValue().set_implicit_omit();
}

void FrequencyShortList__TV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_elementIdentifier.encode_text(text_buf);
single_value->field_frequencyShortListValue.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.FrequencyShortList_TV.");
}
}

void FrequencyShortList__TV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_elementIdentifier.decode_text(text_buf);
single_value->field_frequencyShortListValue.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new FrequencyShortList__TV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.FrequencyShortList_TV.");
}
}

void FrequencyShortList__TV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    FrequencyShortList__TV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (2<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.FrequencyShortList_TV has 2 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) frequencyShortListValue().set_param(*param.get_elem(1));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "frequencyShortListValue")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          frequencyShortListValue().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.FrequencyShortList_TV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    FrequencyShortList__TV_template* precondition = new FrequencyShortList__TV_template;
    precondition->set_param(*param.get_elem(0));
    FrequencyShortList__TV_template* implied_template = new FrequencyShortList__TV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = FrequencyShortList__TV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.FrequencyShortList_TV");
  }
  is_ifpresent = param.get_ifpresent();
}

void FrequencyShortList__TV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_elementIdentifier.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.FrequencyShortList_TV");
single_value->field_frequencyShortListValue.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.FrequencyShortList_TV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.FrequencyShortList_TV");
}

boolean FrequencyShortList__TV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean FrequencyShortList__TV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}

GroupChannelDescription__TLV::GroupChannelDescription__TLV()
{
}

GroupChannelDescription__TLV::GroupChannelDescription__TLV(const OCTETSTRING& par_elementIdentifier,
    const INTEGER& par_lengthIndicator,
    const BITSTRING& par_tN,
    const BITSTRING& par_channelType__tDMAoffset,
    const OCTETSTRING& par_oct4__13)
  :   field_elementIdentifier(par_elementIdentifier),
  field_lengthIndicator(par_lengthIndicator),
  field_tN(par_tN),
  field_channelType__tDMAoffset(par_channelType__tDMAoffset),
  field_oct4__13(par_oct4__13)
{
}

GroupChannelDescription__TLV::GroupChannelDescription__TLV(const GroupChannelDescription__TLV& other_value)
{
if(!other_value.is_bound()) TTCN_error("Copying an unbound value of type @MobileL3_RRM_Types.GroupChannelDescription_TLV.");
if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
else field_elementIdentifier.clean_up();
if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
else field_lengthIndicator.clean_up();
if (other_value.tN().is_bound()) field_tN = other_value.tN();
else field_tN.clean_up();
if (other_value.channelType__tDMAoffset().is_bound()) field_channelType__tDMAoffset = other_value.channelType__tDMAoffset();
else field_channelType__tDMAoffset.clean_up();
if (other_value.oct4__13().is_bound()) field_oct4__13 = other_value.oct4__13();
else field_oct4__13.clean_up();
}

void GroupChannelDescription__TLV::clean_up()
{
field_elementIdentifier.clean_up();
field_lengthIndicator.clean_up();
field_tN.clean_up();
field_channelType__tDMAoffset.clean_up();
field_oct4__13.clean_up();
}

const TTCN_Typedescriptor_t* GroupChannelDescription__TLV::get_descriptor() const { return &GroupChannelDescription__TLV_descr_; }
GroupChannelDescription__TLV& GroupChannelDescription__TLV::operator=(const GroupChannelDescription__TLV& other_value)
{
if (this != &other_value) {
  if(!other_value.is_bound()) TTCN_error("Assignment of an unbound value of type @MobileL3_RRM_Types.GroupChannelDescription_TLV.");
  if (other_value.elementIdentifier().is_bound()) field_elementIdentifier = other_value.elementIdentifier();
  else field_elementIdentifier.clean_up();
  if (other_value.lengthIndicator().is_bound()) field_lengthIndicator = other_value.lengthIndicator();
  else field_lengthIndicator.clean_up();
  if (other_value.tN().is_bound()) field_tN = other_value.tN();
  else field_tN.clean_up();
  if (other_value.channelType__tDMAoffset().is_bound()) field_channelType__tDMAoffset = other_value.channelType__tDMAoffset();
  else field_channelType__tDMAoffset.clean_up();
  if (other_value.oct4__13().is_bound()) field_oct4__13 = other_value.oct4__13();
  else field_oct4__13.clean_up();
}
return *this;
}

boolean GroupChannelDescription__TLV::operator==(const GroupChannelDescription__TLV& other_value) const
{
return field_elementIdentifier==other_value.field_elementIdentifier
  && field_lengthIndicator==other_value.field_lengthIndicator
  && field_tN==other_value.field_tN
  && field_channelType__tDMAoffset==other_value.field_channelType__tDMAoffset
  && field_oct4__13==other_value.field_oct4__13;
}

boolean GroupChannelDescription__TLV::is_bound() const
{
return (field_elementIdentifier.is_bound())
  || (field_lengthIndicator.is_bound())
  || (field_tN.is_bound())
  || (field_channelType__tDMAoffset.is_bound())
  || (field_oct4__13.is_bound());
}
boolean GroupChannelDescription__TLV::is_value() const
{
return field_elementIdentifier.is_value()
  && field_lengthIndicator.is_value()
  && field_tN.is_value()
  && field_channelType__tDMAoffset.is_value()
  && field_oct4__13.is_value();
}
void GroupChannelDescription__TLV::log() const
{
if (!is_bound()) {
TTCN_Logger::log_event_unbound();
return;
}
TTCN_Logger::log_event_str("{ elementIdentifier := ");
field_elementIdentifier.log();
TTCN_Logger::log_event_str(", lengthIndicator := ");
field_lengthIndicator.log();
TTCN_Logger::log_event_str(", tN := ");
field_tN.log();
TTCN_Logger::log_event_str(", channelType_tDMAoffset := ");
field_channelType__tDMAoffset.log();
TTCN_Logger::log_event_str(", oct4_13 := ");
field_oct4__13.log();
TTCN_Logger::log_event_str(" }");
}

void GroupChannelDescription__TLV::set_implicit_omit()
{
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (tN().is_bound()) tN().set_implicit_omit();
if (channelType__tDMAoffset().is_bound()) channelType__tDMAoffset().set_implicit_omit();
if (oct4__13().is_bound()) oct4__13().set_implicit_omit();
}

void GroupChannelDescription__TLV::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_VALUE, "record value");
  switch (param.get_type()) {
  case Module_Param::MP_Value_List:
    if (5<param.get_size()) {
      param.error("record value of type @MobileL3_RRM_Types.GroupChannelDescription_TLV has 5 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) tN().set_param(*param.get_elem(2));
    if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) channelType__tDMAoffset().set_param(*param.get_elem(3));
    if (param.get_size()>4 && param.get_elem(4)->get_type()!=Module_Param::MP_NotUsed) oct4__13().set_param(*param.get_elem(4));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "tN")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          tN().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "channelType_tDMAoffset")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          channelType__tDMAoffset().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "oct4_13")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          oct4__13().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.GroupChannelDescription_TLV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  default:
    param.type_error("record value", "@MobileL3_RRM_Types.GroupChannelDescription_TLV");
  }
}

void GroupChannelDescription__TLV::encode_text(Text_Buf& text_buf) const
{
field_elementIdentifier.encode_text(text_buf);
field_lengthIndicator.encode_text(text_buf);
field_tN.encode_text(text_buf);
field_channelType__tDMAoffset.encode_text(text_buf);
field_oct4__13.encode_text(text_buf);
}

void GroupChannelDescription__TLV::decode_text(Text_Buf& text_buf)
{
field_elementIdentifier.decode_text(text_buf);
field_lengthIndicator.decode_text(text_buf);
field_tN.decode_text(text_buf);
field_channelType__tDMAoffset.decode_text(text_buf);
field_oct4__13.decode_text(text_buf);
}

void GroupChannelDescription__TLV::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...) const
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-encoding type '%s': ", p_td.name);
    unsigned BER_coding=va_arg(pvar, unsigned);
    BER_encode_chk_coding(BER_coding);
    ASN_BER_TLV_t *tlv=BER_encode_TLV(p_td, BER_coding);
    tlv->put_in_buffer(p_buf);
    ASN_BER_TLV_t::destruct(tlv);
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-encoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    RAW_enc_tr_pos rp;
    rp.level=0;
    rp.pos=NULL;
    RAW_enc_tree root(FALSE, NULL, &rp, 1, p_td.raw);
    RAW_encode(p_td, root);
    root.put_to_buf(p_buf);
    break;}
  case TTCN_EncDec::CT_TEXT: {
    TTCN_EncDec_ErrorContext ec("While TEXT-encoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
      ("No TEXT descriptor available for type '%s'.", p_td.name);
    TEXT_encode(p_td,p_buf);
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-encoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XER_encode(*(p_td.xer),p_buf, XER_coding, 0, 0, 0);
    p_buf.put_c('\n');
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-encoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok(va_arg(pvar, int) != 0);
    JSON_encode(p_td, tok, FALSE);
    p_buf.put_s(tok.get_buffer_length(), (const unsigned char*)tok.get_buffer());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-encoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
    OER_encode(p_td, p_buf);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-encoding type '%s': ", p_td.name);
    if (!p_td.per) TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    PER_encode(p_td, p_buf, opt);
    break; }
  default:
    TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name);
  }
  va_end(pvar);
}

void GroupChannelDescription__TLV::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int p_coding, ...)
{
  va_list pvar;
  va_start(pvar, p_coding);
  switch(p_coding) {
  case TTCN_EncDec::CT_BER: {
    TTCN_EncDec_ErrorContext ec("While BER-decoding type '%s': ", p_td.name);
    unsigned L_form=va_arg(pvar, unsigned);
    ASN_BER_TLV_t tlv;
    BER_decode_str2TLV(p_buf, tlv, L_form);
    BER_decode_TLV(p_td, tlv, L_form);
    if(tlv.isComplete) p_buf.increase_pos(tlv.get_len());
    break;}
  case TTCN_EncDec::CT_RAW: {
    TTCN_EncDec_ErrorContext ec("While RAW-decoding type '%s': ", p_td.name);
    if(!p_td.raw)
      TTCN_EncDec_ErrorContext::error_internal
        ("No RAW descriptor available for type '%s'.", p_td.name);
    raw_order_t r_order;
    switch(p_td.raw->top_bit_order) {
    case TOP_BIT_LEFT:
      r_order=ORDER_LSB;
      break;
    case TOP_BIT_RIGHT:
    default:
      r_order=ORDER_MSB;
    }
    int rawr = RAW_decode(p_td, p_buf, p_buf.get_len()*8, r_order);
    if(rawr<0) switch (-rawr) {
    case TTCN_EncDec::ET_INCOMPL_MSG:
    case TTCN_EncDec::ET_LEN_ERR:
      ec.error((TTCN_EncDec::error_type_t)-rawr, "Can not decode type '%s', because incomplete message was received", p_td.name);
      break;
    case 1:
    default:
      ec.error(TTCN_EncDec::ET_INVAL_MSG, "Can not decode type '%s', because invalid message was received", p_td.name);
      break;
    }
    break;}
  case TTCN_EncDec::CT_TEXT: {
    Limit_Token_List limit;
    TTCN_EncDec_ErrorContext ec("While TEXT-decoding type '%s': ", p_td.name);
    if(!p_td.text)
      TTCN_EncDec_ErrorContext::error_internal
        ("No TEXT descriptor available for type '%s'.", p_td.name);
    const unsigned char *b_data=p_buf.get_data();
    int null_added=0;
    if(b_data[p_buf.get_len()-1]!='\0'){
      null_added=1;
      p_buf.set_pos(p_buf.get_len());
      p_buf.put_zero(8,ORDER_LSB);
      p_buf.rewind();
    }
    if(TEXT_decode(p_td,p_buf,limit)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    if(null_added){
      size_t actpos=p_buf.get_pos();
      p_buf.set_pos(p_buf.get_len()-1);
      p_buf.cut_end();
      p_buf.set_pos(actpos);
    }
    break;}
  case TTCN_EncDec::CT_XER: {
    TTCN_EncDec_ErrorContext ec("While XER-decoding type '%s': ", p_td.name);
    unsigned XER_coding=va_arg(pvar, unsigned);
    XER_encode_chk_coding(XER_coding, p_td);
    XmlReaderWrap reader(p_buf);
    for (int rd_ok=reader.Read(); rd_ok==1; rd_ok=reader.Read()) {
      if (reader.NodeType() == XML_READER_TYPE_ELEMENT) break;
    }
    XER_decode(*(p_td.xer), reader, XER_coding | XER_TOPLEVEL, XER_NONE, 0);
    size_t bytes = reader.ByteConsumed();
    p_buf.set_pos(bytes);
    break;}
  case TTCN_EncDec::CT_JSON: {
    TTCN_EncDec_ErrorContext ec("While JSON-decoding type '%s': ", p_td.name);
    if(!p_td.json)
      TTCN_EncDec_ErrorContext::error_internal
        ("No JSON descriptor available for type '%s'.", p_td.name);
    JSON_Tokenizer tok((const char*)p_buf.get_data(), p_buf.get_len());
    if(JSON_decode(p_td, tok, FALSE, FALSE)<0)
      ec.error(TTCN_EncDec::ET_INCOMPL_MSG,"Can not decode type '%s', because invalid or incomplete message was received", p_td.name);
    p_buf.set_pos(tok.get_buf_pos());
    break;}
  case TTCN_EncDec::CT_OER: {
    TTCN_EncDec_ErrorContext ec("While OER-decoding type '%s': ", p_td.name);
    if(!p_td.oer)
      TTCN_EncDec_ErrorContext::error_internal
        ("No OER descriptor available for type '%s'.", p_td.name);
     OER_struct p_oer;
    OER_decode(p_td, p_buf, p_oer);
    break;}
  case TTCN_EncDec::CT_PER: {
    TTCN_EncDec_ErrorContext ec("While PER-decoding type '%s': ", p_td.name);
    if(!p_td.per)  TTCN_EncDec_ErrorContext::error_internal(
      "No PER descriptor available for type '%s'.", p_td.name);
    int opt = va_arg(pvar, int);
    try {
      PER_decode(p_td, p_buf, opt);
      p_buf.PER_octet_align(FALSE);
    }
    catch (PER_Buffer_Exception) { }
    break; }
  default:
    TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name);
  }
  va_end(pvar);
}

int GroupChannelDescription__TLV::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean no_err, int, boolean, const RAW_Force_Omit* force_omit)
{ (void)no_err;
  int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding);
  limit-=prepaddlength;
  size_t last_decoded_pos = p_buf.get_pos_bit();
  int decoded_length = 0;
  int decoded_field_length = 0;
  raw_order_t local_top_order;
  if(p_td.raw->top_bit_order==TOP_BIT_INHERITED)local_top_order=top_bit_ord;
  else if(p_td.raw->top_bit_order==TOP_BIT_RIGHT)local_top_order=ORDER_MSB;
  else local_top_order=ORDER_LSB;
  int value_of_length_field1 = 0;
  RAW_Force_Omit field_0_force_omit(0, force_omit, General__Types::OCT1_descr_.raw->forceomit);
  decoded_field_length = field_elementIdentifier.RAW_decode(General__Types::OCT1_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_0_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  RAW_Force_Omit field_1_force_omit(1, force_omit, GroupChannelDescription__TLV_lengthIndicator_descr_.raw->forceomit);
  decoded_field_length = field_lengthIndicator.RAW_decode(GroupChannelDescription__TLV_lengthIndicator_descr_, p_buf, limit, local_top_order, no_err, -1, TRUE, &field_1_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  INTEGER tmp1 = field_lengthIndicator.convert_to_Integer(GroupChannelDescription__TLV_lengthIndicator_descr_);
  field_lengthIndicator = tmp1;
  value_of_length_field1 += tmp1.get_long_long_val() * 8;
  RAW_Force_Omit field_2_force_omit(2, force_omit, General__Types::BIT3_descr_.raw->forceomit);
  decoded_field_length = field_tN.RAW_decode(General__Types::BIT3_descr_, p_buf, min_of_ints(2, limit, value_of_length_field1), local_top_order, no_err, -1, TRUE, &field_2_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  value_of_length_field1 -= decoded_field_length;
  RAW_Force_Omit field_3_force_omit(3, force_omit, General__Types::BIT5_descr_.raw->forceomit);
  decoded_field_length = field_channelType__tDMAoffset.RAW_decode(General__Types::BIT5_descr_, p_buf, min_of_ints(2, limit, value_of_length_field1), local_top_order, no_err, -1, TRUE, &field_3_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  value_of_length_field1 -= decoded_field_length;
  RAW_Force_Omit field_4_force_omit(4, force_omit, General__Types::OCTN_descr_.raw->forceomit);
  decoded_field_length = field_oct4__13.RAW_decode(General__Types::OCTN_descr_, p_buf, min_of_ints(2, limit, value_of_length_field1), local_top_order, no_err, -1, TRUE, &field_4_force_omit);
  if (decoded_field_length < 0) return decoded_field_length;
  decoded_length+=decoded_field_length;
  limit-=decoded_field_length;
  last_decoded_pos=bigger(last_decoded_pos, p_buf.get_pos_bit());
  value_of_length_field1 -= decoded_field_length;
  p_buf.set_pos_bit(last_decoded_pos);
  return decoded_length+prepaddlength+p_buf.increase_pos_padd(p_td.raw->padding);
}

int GroupChannelDescription__TLV::RAW_encode(const TTCN_Typedescriptor_t&, RAW_enc_tree& myleaf) const {
  if (!is_bound()) TTCN_EncDec_ErrorContext::error(TTCN_EncDec::ET_UNBOUND, "Encoding an unbound value.");
  int encoded_length = 0;
  myleaf.isleaf = FALSE;
  myleaf.body.node.num_of_nodes = 5;
  myleaf.body.node.nodes = init_nodes_of_enc_tree(5);
  myleaf.body.node.nodes[0] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 0, General__Types::OCT1_descr_.raw);
  myleaf.body.node.nodes[1] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 1, GroupChannelDescription__TLV_lengthIndicator_descr_.raw);
  myleaf.body.node.nodes[2] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 2, General__Types::BIT3_descr_.raw);
  myleaf.body.node.nodes[3] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 3, General__Types::BIT5_descr_.raw);
  myleaf.body.node.nodes[4] = new RAW_enc_tree(TRUE, &myleaf, &(myleaf.curr_pos), 4, General__Types::OCTN_descr_.raw);
  encoded_length += field_elementIdentifier.RAW_encode(General__Types::OCT1_descr_, *myleaf.body.node.nodes[0]);
  encoded_length += 8;
  myleaf.body.node.nodes[1]->calc = CALC_LENGTH;
  myleaf.body.node.nodes[1]->coding_descr = &GroupChannelDescription__TLV_lengthIndicator_descr_;
  myleaf.body.node.nodes[1]->calcof.lengthto.num_of_fields = 3;
  myleaf.body.node.nodes[1]->calcof.lengthto.unit = 8;
  myleaf.body.node.nodes[1]->calcof.lengthto.offset = 0;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields = init_lengthto_fields_list(3);
  myleaf.body.node.nodes[1]->length = 8;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields[0].level = myleaf.body.node.nodes[2]->curr_pos.level;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields[0].pos = myleaf.body.node.nodes[2]->curr_pos.pos;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields[1].level = myleaf.body.node.nodes[3]->curr_pos.level;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields[1].pos = myleaf.body.node.nodes[3]->curr_pos.pos;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields[2].level = myleaf.body.node.nodes[4]->curr_pos.level;
  myleaf.body.node.nodes[1]->calcof.lengthto.fields[2].pos = myleaf.body.node.nodes[4]->curr_pos.pos;
  encoded_length += field_tN.RAW_encode(General__Types::BIT3_descr_, *myleaf.body.node.nodes[2]);
  encoded_length += field_channelType__tDMAoffset.RAW_encode(General__Types::BIT5_descr_, *myleaf.body.node.nodes[3]);
  encoded_length += field_oct4__13.RAW_encode(General__Types::OCTN_descr_, *myleaf.body.node.nodes[4]);
  return myleaf.length = encoded_length;
}

struct GroupChannelDescription__TLV_template::single_value_struct {
OCTETSTRING_template field_elementIdentifier;
INTEGER_template field_lengthIndicator;
BITSTRING_template field_tN;
BITSTRING_template field_channelType__tDMAoffset;
OCTETSTRING_template field_oct4__13;
};

void GroupChannelDescription__TLV_template::set_specific()
{
if (template_selection != SPECIFIC_VALUE) {
template_sel old_selection = template_selection;
clean_up();
single_value = new single_value_struct;
set_selection(SPECIFIC_VALUE);
if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) {
single_value->field_elementIdentifier = ANY_VALUE;
single_value->field_lengthIndicator = ANY_VALUE;
single_value->field_tN = ANY_VALUE;
single_value->field_channelType__tDMAoffset = ANY_VALUE;
single_value->field_oct4__13 = ANY_VALUE;
}
}
}

void GroupChannelDescription__TLV_template::copy_value(const GroupChannelDescription__TLV& other_value)
{
single_value = new single_value_struct;
if (other_value.elementIdentifier().is_bound()) {
  single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
  single_value->field_elementIdentifier.clean_up();
}
if (other_value.lengthIndicator().is_bound()) {
  single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
  single_value->field_lengthIndicator.clean_up();
}
if (other_value.tN().is_bound()) {
  single_value->field_tN = other_value.tN();
} else {
  single_value->field_tN.clean_up();
}
if (other_value.channelType__tDMAoffset().is_bound()) {
  single_value->field_channelType__tDMAoffset = other_value.channelType__tDMAoffset();
} else {
  single_value->field_channelType__tDMAoffset.clean_up();
}
if (other_value.oct4__13().is_bound()) {
  single_value->field_oct4__13 = other_value.oct4__13();
} else {
  single_value->field_oct4__13.clean_up();
}
set_selection(SPECIFIC_VALUE);
}

void GroupChannelDescription__TLV_template::copy_template(const GroupChannelDescription__TLV_template& other_value)
{
switch (other_value.template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
if (UNINITIALIZED_TEMPLATE != other_value.elementIdentifier().get_selection()) {
single_value->field_elementIdentifier = other_value.elementIdentifier();
} else {
single_value->field_elementIdentifier.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.lengthIndicator().get_selection()) {
single_value->field_lengthIndicator = other_value.lengthIndicator();
} else {
single_value->field_lengthIndicator.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.tN().get_selection()) {
single_value->field_tN = other_value.tN();
} else {
single_value->field_tN.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.channelType__tDMAoffset().get_selection()) {
single_value->field_channelType__tDMAoffset = other_value.channelType__tDMAoffset();
} else {
single_value->field_channelType__tDMAoffset.clean_up();
}
if (UNINITIALIZED_TEMPLATE != other_value.oct4__13().get_selection()) {
single_value->field_oct4__13 = other_value.oct4__13();
} else {
single_value->field_oct4__13.clean_up();
}
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
value_list.n_values = other_value.value_list.n_values;
value_list.list_value = new GroupChannelDescription__TLV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].copy_template(other_value.value_list.list_value[list_count]);
break;
case IMPLICATION_MATCH:
implication_.precondition = new GroupChannelDescription__TLV_template(*other_value.implication_.precondition);
implication_.implied_template = new GroupChannelDescription__TLV_template(*other_value.implication_.implied_template);
break;
case DYNAMIC_MATCH:
dyn_match = other_value.dyn_match;
dyn_match->ref_count++;
break;
default:
TTCN_error("Copying an uninitialized/unsupported template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV.");
break;
}
set_selection(other_value);
}

GroupChannelDescription__TLV_template::GroupChannelDescription__TLV_template()
{
}

GroupChannelDescription__TLV_template::GroupChannelDescription__TLV_template(template_sel other_value)
 : Base_Template(other_value)
{
check_single_selection(other_value);
}

GroupChannelDescription__TLV_template::GroupChannelDescription__TLV_template(const GroupChannelDescription__TLV& other_value)
{
copy_value(other_value);
}

GroupChannelDescription__TLV_template::GroupChannelDescription__TLV_template(const OPTIONAL<GroupChannelDescription__TLV>& other_value)
{
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const GroupChannelDescription__TLV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Creating a template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV from an unbound optional field.");
}
}

GroupChannelDescription__TLV_template::GroupChannelDescription__TLV_template(GroupChannelDescription__TLV_template* p_precondition, GroupChannelDescription__TLV_template* p_implied_template)
 : Base_Template(IMPLICATION_MATCH)
{
implication_.precondition = p_precondition;
implication_.implied_template = p_implied_template;
}

GroupChannelDescription__TLV_template::GroupChannelDescription__TLV_template(Dynamic_Match_Interface<GroupChannelDescription__TLV>* p_dyn_match)
 : Base_Template(DYNAMIC_MATCH)
{
dyn_match = new dynmatch_struct<GroupChannelDescription__TLV>;
dyn_match->ptr = p_dyn_match;
dyn_match->ref_count = 1;
}

GroupChannelDescription__TLV_template::GroupChannelDescription__TLV_template(const GroupChannelDescription__TLV_template& other_value)
: Base_Template()
{
copy_template(other_value);
}

GroupChannelDescription__TLV_template::~GroupChannelDescription__TLV_template()
{
clean_up();
}

GroupChannelDescription__TLV_template& GroupChannelDescription__TLV_template::operator=(template_sel other_value)
{
check_single_selection(other_value);
clean_up();
set_selection(other_value);
return *this;
}

GroupChannelDescription__TLV_template& GroupChannelDescription__TLV_template::operator=(const GroupChannelDescription__TLV& other_value)
{
clean_up();
copy_value(other_value);
return *this;
}

GroupChannelDescription__TLV_template& GroupChannelDescription__TLV_template::operator=(const OPTIONAL<GroupChannelDescription__TLV>& other_value)
{
clean_up();
switch (other_value.get_selection()) {
case OPTIONAL_PRESENT:
copy_value((const GroupChannelDescription__TLV&)other_value);
break;
case OPTIONAL_OMIT:
set_selection(OMIT_VALUE);
break;
default:
TTCN_error("Assignment of an unbound optional field to a template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV.");
}
return *this;
}

GroupChannelDescription__TLV_template& GroupChannelDescription__TLV_template::operator=(const GroupChannelDescription__TLV_template& other_value)
{
if (&other_value != this) {
clean_up();
copy_template(other_value);
}
return *this;
}

boolean GroupChannelDescription__TLV_template::match(const GroupChannelDescription__TLV& other_value, boolean legacy) const
{
if (!other_value.is_bound()) return FALSE;
switch (template_selection) {
case ANY_VALUE:
case ANY_OR_OMIT:
return TRUE;
case OMIT_VALUE:
return FALSE;
case SPECIFIC_VALUE:
if(!other_value.elementIdentifier().is_bound()) return FALSE;
if(!single_value->field_elementIdentifier.match(other_value.elementIdentifier(), legacy))return FALSE;
if(!other_value.lengthIndicator().is_bound()) return FALSE;
if(!single_value->field_lengthIndicator.match(other_value.lengthIndicator(), legacy))return FALSE;
if(!other_value.tN().is_bound()) return FALSE;
if(!single_value->field_tN.match(other_value.tN(), legacy))return FALSE;
if(!other_value.channelType__tDMAoffset().is_bound()) return FALSE;
if(!single_value->field_channelType__tDMAoffset.match(other_value.channelType__tDMAoffset(), legacy))return FALSE;
if(!other_value.oct4__13().is_bound()) return FALSE;
if(!single_value->field_oct4__13.match(other_value.oct4__13(), legacy))return FALSE;
return TRUE;
case VALUE_LIST:
case COMPLEMENTED_LIST:
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
if (value_list.list_value[list_count].match(other_value, legacy)) return template_selection == VALUE_LIST;
return template_selection == COMPLEMENTED_LIST;
case CONJUNCTION_MATCH:
for (unsigned int i = 0; i < value_list.n_values; i++) {
if (!value_list.list_value[i].match(other_value)) {
return FALSE;
}
}
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match(other_value) || implication_.implied_template->match(other_value);
case DYNAMIC_MATCH:
return dyn_match->ptr->match(other_value);
default:
TTCN_error("Matching an uninitialized/unsupported template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV.");
}
return FALSE;
}

boolean GroupChannelDescription__TLV_template::is_bound() const
{
if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE;
if (template_selection != SPECIFIC_VALUE) return TRUE;
return single_value->field_elementIdentifier.is_bound()
 || single_value->field_lengthIndicator.is_bound()
 || single_value->field_tN.is_bound()
 || single_value->field_channelType__tDMAoffset.is_bound()
 || single_value->field_oct4__13.is_bound();
}

boolean GroupChannelDescription__TLV_template::is_value() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE;
return single_value->field_elementIdentifier.is_value()
 && single_value->field_lengthIndicator.is_value()
 && single_value->field_tN.is_value()
 && single_value->field_channelType__tDMAoffset.is_value()
 && single_value->field_oct4__13.is_value();
}

void GroupChannelDescription__TLV_template::clean_up()
{
switch (template_selection) {
case SPECIFIC_VALUE:
delete single_value;
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
case CONJUNCTION_MATCH:
delete [] value_list.list_value;
break;
case IMPLICATION_MATCH:
delete implication_.precondition;
delete implication_.implied_template;
break;
case DYNAMIC_MATCH:
dyn_match->ref_count--;
if (dyn_match->ref_count == 0) {
delete dyn_match->ptr;
delete dyn_match;
}
break;
default:
break;
}
template_selection = UNINITIALIZED_TEMPLATE;
}

GroupChannelDescription__TLV GroupChannelDescription__TLV_template::valueof() const
{
if (template_selection != SPECIFIC_VALUE || is_ifpresent)
TTCN_error("Performing a valueof or send operation on a non-specific template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV.");
GroupChannelDescription__TLV ret_val;
if (single_value->field_elementIdentifier.is_bound()) {
ret_val.elementIdentifier() = single_value->field_elementIdentifier.valueof();
}
if (single_value->field_lengthIndicator.is_bound()) {
ret_val.lengthIndicator() = single_value->field_lengthIndicator.valueof();
}
if (single_value->field_tN.is_bound()) {
ret_val.tN() = single_value->field_tN.valueof();
}
if (single_value->field_channelType__tDMAoffset.is_bound()) {
ret_val.channelType__tDMAoffset() = single_value->field_channelType__tDMAoffset.valueof();
}
if (single_value->field_oct4__13.is_bound()) {
ret_val.oct4__13() = single_value->field_oct4__13.valueof();
}
return ret_val;
}

void GroupChannelDescription__TLV_template::set_type(template_sel template_type, unsigned int list_length)
{
if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST&& template_type != CONJUNCTION_MATCH)
TTCN_error("Setting an invalid list for a template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV.");
clean_up();
set_selection(template_type);
value_list.n_values = list_length;
value_list.list_value = new GroupChannelDescription__TLV_template[list_length];
}

GroupChannelDescription__TLV_template& GroupChannelDescription__TLV_template::list_item(unsigned int list_index) const
{
if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST&& template_selection != CONJUNCTION_MATCH)
TTCN_error("Accessing a list element of a non-list template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV.");
if (list_index >= value_list.n_values)
TTCN_error("Index overflow in a value list template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV.");
return value_list.list_value[list_index];
}

OCTETSTRING_template& GroupChannelDescription__TLV_template::elementIdentifier()
{
set_specific();
return single_value->field_elementIdentifier;
}

const OCTETSTRING_template& GroupChannelDescription__TLV_template::elementIdentifier() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field elementIdentifier of a non-specific template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV.");
return single_value->field_elementIdentifier;
}

INTEGER_template& GroupChannelDescription__TLV_template::lengthIndicator()
{
set_specific();
return single_value->field_lengthIndicator;
}

const INTEGER_template& GroupChannelDescription__TLV_template::lengthIndicator() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field lengthIndicator of a non-specific template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV.");
return single_value->field_lengthIndicator;
}

BITSTRING_template& GroupChannelDescription__TLV_template::tN()
{
set_specific();
return single_value->field_tN;
}

const BITSTRING_template& GroupChannelDescription__TLV_template::tN() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field tN of a non-specific template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV.");
return single_value->field_tN;
}

BITSTRING_template& GroupChannelDescription__TLV_template::channelType__tDMAoffset()
{
set_specific();
return single_value->field_channelType__tDMAoffset;
}

const BITSTRING_template& GroupChannelDescription__TLV_template::channelType__tDMAoffset() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field channelType_tDMAoffset of a non-specific template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV.");
return single_value->field_channelType__tDMAoffset;
}

OCTETSTRING_template& GroupChannelDescription__TLV_template::oct4__13()
{
set_specific();
return single_value->field_oct4__13;
}

const OCTETSTRING_template& GroupChannelDescription__TLV_template::oct4__13() const
{
if (template_selection != SPECIFIC_VALUE)
TTCN_error("Accessing field oct4_13 of a non-specific template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV.");
return single_value->field_oct4__13;
}

int GroupChannelDescription__TLV_template::size_of() const
{
  if (is_ifpresent) TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV which has an ifpresent attribute.");
  switch (template_selection)
  {
  case SPECIFIC_VALUE:
    return 5;
  case VALUE_LIST:
   {
     if (value_list.n_values<1)
       TTCN_error("Internal error: Performing sizeof() operation on a template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV containing an empty list.");
      int item_size = value_list.list_value[0].size_of();
      for (unsigned int l_idx = 1; l_idx < value_list.n_values; l_idx++)
      {
        if (value_list.list_value[l_idx].size_of()!=item_size)
          TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV containing a value list with different sizes.");
      }
      return item_size;
    }
  case OMIT_VALUE:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV containing omit value.");
  case ANY_VALUE:
  case ANY_OR_OMIT:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV containing */? value.");
  case COMPLEMENTED_LIST:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV containing complemented list.");
  case CONJUNCTION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV containing a conjunction list match.");
  case IMPLICATION_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV containing an implication match.");
  case DYNAMIC_MATCH:
    TTCN_error("Performing sizeof() operation on a template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV containing a dynamic match.");
  default:
    TTCN_error("Performing sizeof() operation on an uninitialized/unsupported template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV.");
  }
  return 0;
}

void GroupChannelDescription__TLV_template::log() const
{
switch (template_selection) {
case SPECIFIC_VALUE:
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log();
TTCN_Logger::log_event_str(", lengthIndicator := ");
single_value->field_lengthIndicator.log();
TTCN_Logger::log_event_str(", tN := ");
single_value->field_tN.log();
TTCN_Logger::log_event_str(", channelType_tDMAoffset := ");
single_value->field_channelType__tDMAoffset.log();
TTCN_Logger::log_event_str(", oct4_13 := ");
single_value->field_oct4__13.log();
TTCN_Logger::log_event_str(" }");
break;
case COMPLEMENTED_LIST:
TTCN_Logger::log_event_str("complement");
case CONJUNCTION_MATCH:
if (template_selection == CONJUNCTION_MATCH) {
TTCN_Logger::log_event_str("conjunct");
}
case VALUE_LIST:
TTCN_Logger::log_char('(');
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++) {
if (list_count > 0) TTCN_Logger::log_event_str(", ");
value_list.list_value[list_count].log();
}
TTCN_Logger::log_char(')');
break;
case IMPLICATION_MATCH:
implication_.precondition->log();
TTCN_Logger::log_event_str(" implies ");
implication_.implied_template->log();
break;
case DYNAMIC_MATCH:
TTCN_Logger::log_event_str("@dynamic template");
break;
default:
log_generic();
}
log_ifpresent();
}

void GroupChannelDescription__TLV_template::log_match(const GroupChannelDescription__TLV& match_value, boolean legacy) const
{
if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity()){
if(match(match_value, legacy)){
TTCN_Logger::print_logmatch_buffer();
TTCN_Logger::log_event_str(" matched");
} else{
if (template_selection == SPECIFIC_VALUE) {
size_t previous_size = TTCN_Logger::get_logmatch_buffer_len();
if(!single_value->field_elementIdentifier.match(match_value.elementIdentifier(), legacy)){
TTCN_Logger::log_logmatch_info(".elementIdentifier");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_lengthIndicator.match(match_value.lengthIndicator(), legacy)){
TTCN_Logger::log_logmatch_info(".lengthIndicator");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_tN.match(match_value.tN(), legacy)){
TTCN_Logger::log_logmatch_info(".tN");
single_value->field_tN.log_match(match_value.tN(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_channelType__tDMAoffset.match(match_value.channelType__tDMAoffset(), legacy)){
TTCN_Logger::log_logmatch_info(".channelType_tDMAoffset");
single_value->field_channelType__tDMAoffset.log_match(match_value.channelType__tDMAoffset(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
if(!single_value->field_oct4__13.match(match_value.oct4__13(), legacy)){
TTCN_Logger::log_logmatch_info(".oct4_13");
single_value->field_oct4__13.log_match(match_value.oct4__13(), legacy);
TTCN_Logger::set_logmatch_buffer_len(previous_size);
}
}else {
TTCN_Logger::print_logmatch_buffer();
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
TTCN_Logger::log_event_str(" unmatched");
}
}
return;
}
if (template_selection == SPECIFIC_VALUE) {
TTCN_Logger::log_event_str("{ elementIdentifier := ");
single_value->field_elementIdentifier.log_match(match_value.elementIdentifier(), legacy);
TTCN_Logger::log_event_str(", lengthIndicator := ");
single_value->field_lengthIndicator.log_match(match_value.lengthIndicator(), legacy);
TTCN_Logger::log_event_str(", tN := ");
single_value->field_tN.log_match(match_value.tN(), legacy);
TTCN_Logger::log_event_str(", channelType_tDMAoffset := ");
single_value->field_channelType__tDMAoffset.log_match(match_value.channelType__tDMAoffset(), legacy);
TTCN_Logger::log_event_str(", oct4_13 := ");
single_value->field_oct4__13.log_match(match_value.oct4__13(), legacy);
TTCN_Logger::log_event_str(" }");
} else {
match_value.log();
TTCN_Logger::log_event_str(" with ");
log();
if (match(match_value, legacy)) TTCN_Logger::log_event_str(" matched");
else TTCN_Logger::log_event_str(" unmatched");
}
}

void GroupChannelDescription__TLV_template::set_implicit_omit()
{
if (template_selection != SPECIFIC_VALUE) return;
if (elementIdentifier().is_bound()) elementIdentifier().set_implicit_omit();
if (lengthIndicator().is_bound()) lengthIndicator().set_implicit_omit();
if (tN().is_bound()) tN().set_implicit_omit();
if (channelType__tDMAoffset().is_bound()) channelType__tDMAoffset().set_implicit_omit();
if (oct4__13().is_bound()) oct4__13().set_implicit_omit();
}

void GroupChannelDescription__TLV_template::encode_text(Text_Buf& text_buf) const
{
encode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value->field_elementIdentifier.encode_text(text_buf);
single_value->field_lengthIndicator.encode_text(text_buf);
single_value->field_tN.encode_text(text_buf);
single_value->field_channelType__tDMAoffset.encode_text(text_buf);
single_value->field_oct4__13.encode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
text_buf.push_int(value_list.n_values);
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].encode_text(text_buf);
break;
default:
TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV.");
}
}

void GroupChannelDescription__TLV_template::decode_text(Text_Buf& text_buf)
{
clean_up();
decode_text_base(text_buf);
switch (template_selection) {
case SPECIFIC_VALUE:
single_value = new single_value_struct;
single_value->field_elementIdentifier.decode_text(text_buf);
single_value->field_lengthIndicator.decode_text(text_buf);
single_value->field_tN.decode_text(text_buf);
single_value->field_channelType__tDMAoffset.decode_text(text_buf);
single_value->field_oct4__13.decode_text(text_buf);
case OMIT_VALUE:
case ANY_VALUE:
case ANY_OR_OMIT:
break;
case VALUE_LIST:
case COMPLEMENTED_LIST:
value_list.n_values = text_buf.pull_int().get_val();
value_list.list_value = new GroupChannelDescription__TLV_template[value_list.n_values];
for (unsigned int list_count = 0; list_count < value_list.n_values; list_count++)
value_list.list_value[list_count].decode_text(text_buf);
break;
default:
TTCN_error("Text decoder: An unknown/unsupported selection was received in a template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV.");
}
}

void GroupChannelDescription__TLV_template::set_param(Module_Param& param)
{
  param.basic_check(Module_Param::BC_TEMPLATE, "record template");
  switch (param.get_type()) {
  case Module_Param::MP_Omit:
    *this = OMIT_VALUE;
    break;
  case Module_Param::MP_Any:
    *this = ANY_VALUE;
    break;
  case Module_Param::MP_AnyOrNone:
    *this = ANY_OR_OMIT;
    break;
  case Module_Param::MP_List_Template:
  case Module_Param::MP_ComplementList_Template:
  case Module_Param::MP_ConjunctList_Template: {
    GroupChannelDescription__TLV_template new_temp;
    new_temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : (param.get_type() == Module_Param::MP_ConjunctList_Template ? CONJUNCTION_MATCH : COMPLEMENTED_LIST), param.get_size());
    for (size_t p_i=0; p_i<param.get_size(); p_i++) {
      new_temp.list_item(p_i).set_param(*param.get_elem(p_i));
    }
    *this = new_temp;
    break; }
  case Module_Param::MP_Value_List:
    if (5<param.get_size()) {
      param.error("record template of type @MobileL3_RRM_Types.GroupChannelDescription_TLV has 5 fields but list value has %d fields", (int)param.get_size());
    }
    if (param.get_size()>0 && param.get_elem(0)->get_type()!=Module_Param::MP_NotUsed) elementIdentifier().set_param(*param.get_elem(0));
    if (param.get_size()>1 && param.get_elem(1)->get_type()!=Module_Param::MP_NotUsed) lengthIndicator().set_param(*param.get_elem(1));
    if (param.get_size()>2 && param.get_elem(2)->get_type()!=Module_Param::MP_NotUsed) tN().set_param(*param.get_elem(2));
    if (param.get_size()>3 && param.get_elem(3)->get_type()!=Module_Param::MP_NotUsed) channelType__tDMAoffset().set_param(*param.get_elem(3));
    if (param.get_size()>4 && param.get_elem(4)->get_type()!=Module_Param::MP_NotUsed) oct4__13().set_param(*param.get_elem(4));
    break;
  case Module_Param::MP_Assignment_List: {
    Vector<bool> value_used(param.get_size());
    value_used.resize(param.get_size(), FALSE);
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "elementIdentifier")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          elementIdentifier().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "lengthIndicator")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          lengthIndicator().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "tN")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          tN().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "channelType_tDMAoffset")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          channelType__tDMAoffset().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      if (!strcmp(curr_param->get_id()->get_name(), "oct4_13")) {
        if (curr_param->get_type()!=Module_Param::MP_NotUsed) {
          oct4__13().set_param(*curr_param);
        }
        value_used[val_idx]=TRUE;
      }
    }
    for (size_t val_idx=0; val_idx<param.get_size(); val_idx++) if (!value_used[val_idx]) {
      Module_Param* const curr_param = param.get_elem(val_idx);
      curr_param->error("Non existent field name in type @MobileL3_RRM_Types.GroupChannelDescription_TLV: %s", curr_param->get_id()->get_name());
      break;
    }
  } break;
  case Module_Param::MP_Implication_Template: {
    GroupChannelDescription__TLV_template* precondition = new GroupChannelDescription__TLV_template;
    precondition->set_param(*param.get_elem(0));
    GroupChannelDescription__TLV_template* implied_template = new GroupChannelDescription__TLV_template;
    implied_template->set_param(*param.get_elem(1));
    *this = GroupChannelDescription__TLV_template(precondition, implied_template);
  } break;
  default:
    param.type_error("record template", "@MobileL3_RRM_Types.GroupChannelDescription_TLV");
  }
  is_ifpresent = param.get_ifpresent();
}

void GroupChannelDescription__TLV_template::check_restriction(template_res t_res, const char* t_name, boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return;
switch ((t_name&&(t_res==TR_VALUE))?TR_OMIT:t_res) {
case TR_OMIT:
if (template_selection==OMIT_VALUE) return;
case TR_VALUE:
if (template_selection!=SPECIFIC_VALUE || is_ifpresent) break;
single_value->field_elementIdentifier.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.GroupChannelDescription_TLV");
single_value->field_lengthIndicator.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.GroupChannelDescription_TLV");
single_value->field_tN.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.GroupChannelDescription_TLV");
single_value->field_channelType__tDMAoffset.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.GroupChannelDescription_TLV");
single_value->field_oct4__13.check_restriction(t_res, t_name ? t_name : "@MobileL3_RRM_Types.GroupChannelDescription_TLV");
return;
case TR_PRESENT:
if (!match_omit(legacy)) return;
break;
default:
return;
}
TTCN_error("Restriction `%s' on template of type %s violated.", get_res_name(t_res), t_name ? t_name : "@MobileL3_RRM_Types.GroupChannelDescription_TLV");
}

boolean GroupChannelDescription__TLV_template::is_present(boolean legacy) const
{
if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE;
return !match_omit(legacy);
}

boolean GroupChannelDescription__TLV_template::match_omit(boolean legacy) const
{
if (is_ifpresent) return TRUE;
switch (template_selection) {
case OMIT_VALUE:
case ANY_OR_OMIT:
return TRUE;
case IMPLICATION_MATCH:
return !implication_.precondition->match_omit() || implication_.implied_template->match_omit();
case VALUE_LIST:
case COMPLEMENTED_LIST:
if (legacy) {
for (unsigned int l_idx=0; l_idx<value_list.n_values; l_idx++)
if (value_list.list_value[l_idx].match_omit())
return template_selection==VALUE_LIST;
return template_selection==COMPLEMENTED_LIST;
} // else fall through
default:
return FALSE;
}
return FALSE;
}


} /* end of namespace */
