| // This C++ source file was generated by the TTCN-3 compiler |
| // of the TTCN-3 Test Executor version CRL 113 200/6 R6A |
| // for Lénárd Nagy (elnrnag@elx78355y6x) on Thu Oct 24 10:29:40 2019 |
| |
| // Copyright (c) 2000-2019 Ericsson Telecom AB |
| |
| // Do not edit this file unless you know what you are doing. |
| |
| /* Including header files */ |
| |
| #include "General_Types.hh" |
| |
| namespace General__Types { |
| |
| /* Prototypes of static functions */ |
| |
| static boolean init_comp_type(const char *component_type, boolean init_base_comps); |
| |
| /* Literal string constants */ |
| |
| static const unsigned char module_checksum[] = { 0x38, 0xab, 0x27, 0xd4, 0xfd, 0x80, 0xda, 0x36, 0xf2, 0xea, 0x3a, 0x72, 0x9f, 0x2a, 0xd2, 0xb5 }; |
| |
| /* Global variable definitions */ |
| |
| const TTCN_RAWdescriptor_t BIT1n_raw_ = {1,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,NULL,false}; |
| const XERdescriptor_t BIT1n_xer_ = { {"BIT1n>\n", "BIT1n>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT1n_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT1n_descr_ = { "@General_Types.BIT1n", &BITSTRING_ber_, &BIT1n_raw_, NULL, &BIT1n_xer_, &BITSTRING_json_, &BIT1n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT2n_raw_ = {2,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,NULL,false}; |
| const XERdescriptor_t BIT2n_xer_ = { {"BIT2n>\n", "BIT2n>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT2n_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT2n_descr_ = { "@General_Types.BIT2n", &BITSTRING_ber_, &BIT2n_raw_, NULL, &BIT2n_xer_, &BITSTRING_json_, &BIT2n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT3n_raw_ = {3,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,NULL,false}; |
| const XERdescriptor_t BIT3n_xer_ = { {"BIT3n>\n", "BIT3n>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT3n_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT3n_descr_ = { "@General_Types.BIT3n", &BITSTRING_ber_, &BIT3n_raw_, NULL, &BIT3n_xer_, &BITSTRING_json_, &BIT3n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT4n_raw_ = {4,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,NULL,false}; |
| const XERdescriptor_t BIT4n_xer_ = { {"BIT4n>\n", "BIT4n>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT4n_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT4n_descr_ = { "@General_Types.BIT4n", &BITSTRING_ber_, &BIT4n_raw_, NULL, &BIT4n_xer_, &BITSTRING_json_, &BIT4n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT5n_raw_ = {5,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,NULL,false}; |
| const XERdescriptor_t BIT5n_xer_ = { {"BIT5n>\n", "BIT5n>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT5n_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT5n_descr_ = { "@General_Types.BIT5n", &BITSTRING_ber_, &BIT5n_raw_, NULL, &BIT5n_xer_, &BITSTRING_json_, &BIT5n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT6n_raw_ = {6,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,NULL,false}; |
| const XERdescriptor_t BIT6n_xer_ = { {"BIT6n>\n", "BIT6n>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT6n_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT6n_descr_ = { "@General_Types.BIT6n", &BITSTRING_ber_, &BIT6n_raw_, NULL, &BIT6n_xer_, &BITSTRING_json_, &BIT6n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT7n_raw_ = {7,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,NULL,false}; |
| const XERdescriptor_t BIT7n_xer_ = { {"BIT7n>\n", "BIT7n>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT7n_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT7n_descr_ = { "@General_Types.BIT7n", &BITSTRING_ber_, &BIT7n_raw_, NULL, &BIT7n_xer_, &BITSTRING_json_, &BIT7n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT8n_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,NULL,false}; |
| const XERdescriptor_t BIT8n_xer_ = { {"BIT8n>\n", "BIT8n>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT8n_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT8n_descr_ = { "@General_Types.BIT8n", &BITSTRING_ber_, &BIT8n_raw_, NULL, &BIT8n_xer_, &BITSTRING_json_, &BIT8n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT9n_raw_ = {9,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,NULL,false}; |
| const XERdescriptor_t BIT9n_xer_ = { {"BIT9n>\n", "BIT9n>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT9n_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT9n_descr_ = { "@General_Types.BIT9n", &BITSTRING_ber_, &BIT9n_raw_, NULL, &BIT9n_xer_, &BITSTRING_json_, &BIT9n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT12n_raw_ = {12,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,NULL,false}; |
| const XERdescriptor_t BIT12n_xer_ = { {"BIT12n>\n", "BIT12n>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT12n_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT12n_descr_ = { "@General_Types.BIT12n", &BITSTRING_ber_, &BIT12n_raw_, NULL, &BIT12n_xer_, &BITSTRING_json_, &BIT12n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT14n_raw_ = {14,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,NULL,false}; |
| const XERdescriptor_t BIT14n_xer_ = { {"BIT14n>\n", "BIT14n>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT14n_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT14n_descr_ = { "@General_Types.BIT14n", &BITSTRING_ber_, &BIT14n_raw_, NULL, &BIT14n_xer_, &BITSTRING_json_, &BIT14n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT15n_raw_ = {15,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,NULL,false}; |
| const XERdescriptor_t BIT15n_xer_ = { {"BIT15n>\n", "BIT15n>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT15n_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT15n_descr_ = { "@General_Types.BIT15n", &BITSTRING_ber_, &BIT15n_raw_, NULL, &BIT15n_xer_, &BITSTRING_json_, &BIT15n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT16n_raw_ = {16,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,NULL,false}; |
| const XERdescriptor_t BIT16n_xer_ = { {"BIT16n>\n", "BIT16n>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT16n_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT16n_descr_ = { "@General_Types.BIT16n", &BITSTRING_ber_, &BIT16n_raw_, NULL, &BIT16n_xer_, &BITSTRING_json_, &BIT16n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT56n_raw_ = {56,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,NULL,false}; |
| const XERdescriptor_t BIT56n_xer_ = { {"BIT56n>\n", "BIT56n>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT56n_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT56n_descr_ = { "@General_Types.BIT56n", &BITSTRING_ber_, &BIT56n_raw_, NULL, &BIT56n_xer_, &BITSTRING_json_, &BIT56n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT14__24n_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,NULL,false}; |
| const XERdescriptor_t BIT14__24n_xer_ = { {"BIT14_24n>\n", "BIT14_24n>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT14__24n_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT14__24n_descr_ = { "@General_Types.BIT14_24n", &BITSTRING_ber_, &BIT14__24n_raw_, NULL, &BIT14__24n_xer_, &BITSTRING_json_, &BIT14__24n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT1np_raw_ = {1,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,NULL,false}; |
| const XERdescriptor_t BIT1np_xer_ = { {"BIT1np>\n", "BIT1np>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT1np_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT1np_descr_ = { "@General_Types.BIT1np", &BITSTRING_ber_, &BIT1np_raw_, NULL, &BIT1np_xer_, &BITSTRING_json_, &BIT1np_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT2np_raw_ = {2,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,NULL,false}; |
| const XERdescriptor_t BIT2np_xer_ = { {"BIT2np>\n", "BIT2np>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT2np_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT2np_descr_ = { "@General_Types.BIT2np", &BITSTRING_ber_, &BIT2np_raw_, NULL, &BIT2np_xer_, &BITSTRING_json_, &BIT2np_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT3np_raw_ = {3,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,NULL,false}; |
| const XERdescriptor_t BIT3np_xer_ = { {"BIT3np>\n", "BIT3np>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT3np_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT3np_descr_ = { "@General_Types.BIT3np", &BITSTRING_ber_, &BIT3np_raw_, NULL, &BIT3np_xer_, &BITSTRING_json_, &BIT3np_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT4np_raw_ = {4,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,NULL,false}; |
| const XERdescriptor_t BIT4np_xer_ = { {"BIT4np>\n", "BIT4np>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT4np_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT4np_descr_ = { "@General_Types.BIT4np", &BITSTRING_ber_, &BIT4np_raw_, NULL, &BIT4np_xer_, &BITSTRING_json_, &BIT4np_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT5np_raw_ = {5,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,NULL,false}; |
| const XERdescriptor_t BIT5np_xer_ = { {"BIT5np>\n", "BIT5np>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT5np_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT5np_descr_ = { "@General_Types.BIT5np", &BITSTRING_ber_, &BIT5np_raw_, NULL, &BIT5np_xer_, &BITSTRING_json_, &BIT5np_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT6np_raw_ = {6,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,NULL,false}; |
| const XERdescriptor_t BIT6np_xer_ = { {"BIT6np>\n", "BIT6np>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT6np_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT6np_descr_ = { "@General_Types.BIT6np", &BITSTRING_ber_, &BIT6np_raw_, NULL, &BIT6np_xer_, &BITSTRING_json_, &BIT6np_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT7np_raw_ = {7,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,NULL,false}; |
| const XERdescriptor_t BIT7np_xer_ = { {"BIT7np>\n", "BIT7np>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT7np_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT7np_descr_ = { "@General_Types.BIT7np", &BITSTRING_ber_, &BIT7np_raw_, NULL, &BIT7np_xer_, &BITSTRING_json_, &BIT7np_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT15np_raw_ = {15,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,NULL,false}; |
| const XERdescriptor_t BIT15np_xer_ = { {"BIT15np>\n", "BIT15np>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT15np_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT15np_descr_ = { "@General_Types.BIT15np", &BITSTRING_ber_, &BIT15np_raw_, NULL, &BIT15np_xer_, &BITSTRING_json_, &BIT15np_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT1_raw_ = {1,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,NULL,false}; |
| const XERdescriptor_t BIT1_xer_ = { {"BIT1>\n", "BIT1>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT1_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT1_descr_ = { "@General_Types.BIT1", &BITSTRING_ber_, &BIT1_raw_, NULL, &BIT1_xer_, &BITSTRING_json_, &BIT1_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT2_raw_ = {2,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,2,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t BIT2_xer_ = { {"BIT2>\n", "BIT2>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT2_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT2_descr_ = { "@General_Types.BIT2", &BITSTRING_ber_, &BIT2_raw_, NULL, &BIT2_xer_, &BITSTRING_json_, &BIT2_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT3_raw_ = {3,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,3,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t BIT3_xer_ = { {"BIT3>\n", "BIT3>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT3_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT3_descr_ = { "@General_Types.BIT3", &BITSTRING_ber_, &BIT3_raw_, NULL, &BIT3_xer_, &BITSTRING_json_, &BIT3_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT4_raw_ = {4,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,4,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t BIT4_xer_ = { {"BIT4>\n", "BIT4>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT4_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT4_descr_ = { "@General_Types.BIT4", &BITSTRING_ber_, &BIT4_raw_, NULL, &BIT4_xer_, &BITSTRING_json_, &BIT4_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT5_raw_ = {5,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,5,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t BIT5_xer_ = { {"BIT5>\n", "BIT5>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT5_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT5_descr_ = { "@General_Types.BIT5", &BITSTRING_ber_, &BIT5_raw_, NULL, &BIT5_xer_, &BITSTRING_json_, &BIT5_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT6_raw_ = {6,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,6,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t BIT6_xer_ = { {"BIT6>\n", "BIT6>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT6_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT6_descr_ = { "@General_Types.BIT6", &BITSTRING_ber_, &BIT6_raw_, NULL, &BIT6_xer_, &BITSTRING_json_, &BIT6_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT7_raw_ = {7,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,7,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t BIT7_xer_ = { {"BIT7>\n", "BIT7>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT7_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT7_descr_ = { "@General_Types.BIT7", &BITSTRING_ber_, &BIT7_raw_, NULL, &BIT7_xer_, &BITSTRING_json_, &BIT7_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT8_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,8,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t BIT8_xer_ = { {"BIT8>\n", "BIT8>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT8_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT8_descr_ = { "@General_Types.BIT8", &BITSTRING_ber_, &BIT8_raw_, NULL, &BIT8_xer_, &BITSTRING_json_, &BIT8_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT9_raw_ = {9,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,9,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t BIT9_xer_ = { {"BIT9>\n", "BIT9>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT9_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT9_descr_ = { "@General_Types.BIT9", &BITSTRING_ber_, &BIT9_raw_, NULL, &BIT9_xer_, &BITSTRING_json_, &BIT9_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT10_raw_ = {10,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,10,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t BIT10_xer_ = { {"BIT10>\n", "BIT10>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT10_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT10_descr_ = { "@General_Types.BIT10", &BITSTRING_ber_, &BIT10_raw_, NULL, &BIT10_xer_, &BITSTRING_json_, &BIT10_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT11_raw_ = {11,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,11,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t BIT11_xer_ = { {"BIT11>\n", "BIT11>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT11_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT11_descr_ = { "@General_Types.BIT11", &BITSTRING_ber_, &BIT11_raw_, NULL, &BIT11_xer_, &BITSTRING_json_, &BIT11_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT12_raw_ = {12,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,12,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t BIT12_xer_ = { {"BIT12>\n", "BIT12>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT12_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT12_descr_ = { "@General_Types.BIT12", &BITSTRING_ber_, &BIT12_raw_, NULL, &BIT12_xer_, &BITSTRING_json_, &BIT12_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT14_raw_ = {14,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,14,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t BIT14_xer_ = { {"BIT14>\n", "BIT14>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT14_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT14_descr_ = { "@General_Types.BIT14", &BITSTRING_ber_, &BIT14_raw_, NULL, &BIT14_xer_, &BITSTRING_json_, &BIT14_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT15_raw_ = {15,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,15,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t BIT15_xer_ = { {"BIT15>\n", "BIT15>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT15_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT15_descr_ = { "@General_Types.BIT15", &BITSTRING_ber_, &BIT15_raw_, NULL, &BIT15_xer_, &BITSTRING_json_, &BIT15_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT16_raw_ = {16,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,16,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t BIT16_xer_ = { {"BIT16>\n", "BIT16>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT16_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT16_descr_ = { "@General_Types.BIT16", &BITSTRING_ber_, &BIT16_raw_, NULL, &BIT16_xer_, &BITSTRING_json_, &BIT16_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT24_raw_ = {24,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,24,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t BIT24_xer_ = { {"BIT24>\n", "BIT24>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT24_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT24_descr_ = { "@General_Types.BIT24", &BITSTRING_ber_, &BIT24_raw_, NULL, &BIT24_xer_, &BITSTRING_json_, &BIT24_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT31_raw_ = {31,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,31,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t BIT31_xer_ = { {"BIT31>\n", "BIT31>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT31_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT31_descr_ = { "@General_Types.BIT31", &BITSTRING_ber_, &BIT31_raw_, NULL, &BIT31_xer_, &BITSTRING_json_, &BIT31_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT56_raw_ = {56,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,56,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t BIT56_xer_ = { {"BIT56>\n", "BIT56>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT56_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT56_descr_ = { "@General_Types.BIT56", &BITSTRING_ber_, &BIT56_raw_, NULL, &BIT56_xer_, &BITSTRING_json_, &BIT56_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t Bitstrings_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,NULL,false}; |
| // No XER for Bitstrings |
| const TTCN_Typedescriptor_t Bitstrings_descr_ = { "@General_Types.Bitstrings", NULL, &Bitstrings_raw_, NULL, NULL, NULL, NULL, &BITSTRING_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t Bitstrings_0_xer_ = { {"BITSTRING>\n", "BITSTRING>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t Bitstrings_0_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t Bitstrings_0_descr_ = { "@General_Types.Bitstrings.<oftype>", &BITSTRING_ber_, &BITSTRING_raw_, NULL, &Bitstrings_0_xer_, &BITSTRING_json_, &Bitstrings_0_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_Typedescriptor_t& BitstringList_descr_ = Bitstrings_descr_; |
| const TTCN_RAWdescriptor_t BitstringSet_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,NULL,false}; |
| // No XER for BitstringSet |
| const TTCN_Typedescriptor_t BitstringSet_descr_ = { "@General_Types.BitstringSet", NULL, &BitstringSet_raw_, NULL, NULL, NULL, NULL, &BITSTRING_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t BitstringSet_0_xer_ = { {"BITSTRING>\n", "BITSTRING>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BitstringSet_0_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BitstringSet_0_descr_ = { "@General_Types.BitstringSet.<oftype>", &BITSTRING_ber_, &BITSTRING_raw_, NULL, &BitstringSet_0_xer_, &BITSTRING_json_, &BitstringSet_0_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT0n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT0n_xer_ = { {"OCT0n>\n", "OCT0n>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT0n_oer_ext_arr_[0] = {}; |
| const int OCT0n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT0n_oer_ = { -1, TRUE, 0, FALSE, 0, 0, OCT0n_oer_ext_arr_, 0, OCT0n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT0n_descr_ = { "@General_Types.OCT0n", &OCTETSTRING_ber_, &OCT0n_raw_, &OCTETSTRING_text_, &OCT0n_xer_, &OCTETSTRING_json_, &OCT0n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1n_raw_ = {8,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,NULL,false}; |
| const XERdescriptor_t OCT1n_xer_ = { {"OCT1n>\n", "OCT1n>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1n_oer_ext_arr_[0] = {}; |
| const int OCT1n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1n_oer_ = { -1, TRUE, 1, FALSE, 0, 0, OCT1n_oer_ext_arr_, 0, OCT1n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1n_descr_ = { "@General_Types.OCT1n", &OCTETSTRING_ber_, &OCT1n_raw_, &OCTETSTRING_text_, &OCT1n_xer_, &OCTETSTRING_json_, &OCT1n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT2n_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,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t OCT2n_xer_ = { {"OCT2n>\n", "OCT2n>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT2n_oer_ext_arr_[0] = {}; |
| const int OCT2n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT2n_oer_ = { -1, TRUE, 2, FALSE, 0, 0, OCT2n_oer_ext_arr_, 0, OCT2n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT2n_descr_ = { "@General_Types.OCT2n", &OCTETSTRING_ber_, &OCT2n_raw_, &OCTETSTRING_text_, &OCT2n_xer_, &OCTETSTRING_json_, &OCT2n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT3n_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,NULL,false}; |
| const XERdescriptor_t OCT3n_xer_ = { {"OCT3n>\n", "OCT3n>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT3n_oer_ext_arr_[0] = {}; |
| const int OCT3n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT3n_oer_ = { -1, TRUE, 3, FALSE, 0, 0, OCT3n_oer_ext_arr_, 0, OCT3n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT3n_descr_ = { "@General_Types.OCT3n", &OCTETSTRING_ber_, &OCT3n_raw_, &OCTETSTRING_text_, &OCT3n_xer_, &OCTETSTRING_json_, &OCT3n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT4n_raw_ = {32,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,NULL,false}; |
| const XERdescriptor_t OCT4n_xer_ = { {"OCT4n>\n", "OCT4n>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT4n_oer_ext_arr_[0] = {}; |
| const int OCT4n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT4n_oer_ = { -1, TRUE, 4, FALSE, 0, 0, OCT4n_oer_ext_arr_, 0, OCT4n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT4n_descr_ = { "@General_Types.OCT4n", &OCTETSTRING_ber_, &OCT4n_raw_, &OCTETSTRING_text_, &OCT4n_xer_, &OCTETSTRING_json_, &OCT4n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT5n_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,-1,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t OCT5n_xer_ = { {"OCT5n>\n", "OCT5n>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT5n_oer_ext_arr_[0] = {}; |
| const int OCT5n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT5n_oer_ = { -1, TRUE, 5, FALSE, 0, 0, OCT5n_oer_ext_arr_, 0, OCT5n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT5n_descr_ = { "@General_Types.OCT5n", &OCTETSTRING_ber_, &OCT5n_raw_, &OCTETSTRING_text_, &OCT5n_xer_, &OCTETSTRING_json_, &OCT5n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT6n_raw_ = {48,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,NULL,false}; |
| const XERdescriptor_t OCT6n_xer_ = { {"OCT6n>\n", "OCT6n>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT6n_oer_ext_arr_[0] = {}; |
| const int OCT6n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT6n_oer_ = { -1, TRUE, 6, FALSE, 0, 0, OCT6n_oer_ext_arr_, 0, OCT6n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT6n_descr_ = { "@General_Types.OCT6n", &OCTETSTRING_ber_, &OCT6n_raw_, &OCTETSTRING_text_, &OCT6n_xer_, &OCTETSTRING_json_, &OCT6n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT7n_raw_ = {56,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,NULL,false}; |
| const XERdescriptor_t OCT7n_xer_ = { {"OCT7n>\n", "OCT7n>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT7n_oer_ext_arr_[0] = {}; |
| const int OCT7n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT7n_oer_ = { -1, TRUE, 7, FALSE, 0, 0, OCT7n_oer_ext_arr_, 0, OCT7n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT7n_descr_ = { "@General_Types.OCT7n", &OCTETSTRING_ber_, &OCT7n_raw_, &OCTETSTRING_text_, &OCT7n_xer_, &OCTETSTRING_json_, &OCT7n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT8n_raw_ = {64,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,NULL,false}; |
| const XERdescriptor_t OCT8n_xer_ = { {"OCT8n>\n", "OCT8n>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT8n_oer_ext_arr_[0] = {}; |
| const int OCT8n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT8n_oer_ = { -1, TRUE, 8, FALSE, 0, 0, OCT8n_oer_ext_arr_, 0, OCT8n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT8n_descr_ = { "@General_Types.OCT8n", &OCTETSTRING_ber_, &OCT8n_raw_, &OCTETSTRING_text_, &OCT8n_xer_, &OCTETSTRING_json_, &OCT8n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT9n_raw_ = {72,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,NULL,false}; |
| const XERdescriptor_t OCT9n_xer_ = { {"OCT9n>\n", "OCT9n>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT9n_oer_ext_arr_[0] = {}; |
| const int OCT9n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT9n_oer_ = { -1, TRUE, 9, FALSE, 0, 0, OCT9n_oer_ext_arr_, 0, OCT9n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT9n_descr_ = { "@General_Types.OCT9n", &OCTETSTRING_ber_, &OCT9n_raw_, &OCTETSTRING_text_, &OCT9n_xer_, &OCTETSTRING_json_, &OCT9n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT10n_raw_ = {80,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,NULL,false}; |
| const XERdescriptor_t OCT10n_xer_ = { {"OCT10n>\n", "OCT10n>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT10n_oer_ext_arr_[0] = {}; |
| const int OCT10n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT10n_oer_ = { -1, TRUE, 10, FALSE, 0, 0, OCT10n_oer_ext_arr_, 0, OCT10n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT10n_descr_ = { "@General_Types.OCT10n", &OCTETSTRING_ber_, &OCT10n_raw_, &OCTETSTRING_text_, &OCT10n_xer_, &OCTETSTRING_json_, &OCT10n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT11n_raw_ = {88,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,NULL,false}; |
| const XERdescriptor_t OCT11n_xer_ = { {"OCT11n>\n", "OCT11n>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT11n_oer_ext_arr_[0] = {}; |
| const int OCT11n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT11n_oer_ = { -1, TRUE, 11, FALSE, 0, 0, OCT11n_oer_ext_arr_, 0, OCT11n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT11n_descr_ = { "@General_Types.OCT11n", &OCTETSTRING_ber_, &OCT11n_raw_, &OCTETSTRING_text_, &OCT11n_xer_, &OCTETSTRING_json_, &OCT11n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT12n_raw_ = {96,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,NULL,false}; |
| const XERdescriptor_t OCT12n_xer_ = { {"OCT12n>\n", "OCT12n>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT12n_oer_ext_arr_[0] = {}; |
| const int OCT12n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT12n_oer_ = { -1, TRUE, 12, FALSE, 0, 0, OCT12n_oer_ext_arr_, 0, OCT12n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT12n_descr_ = { "@General_Types.OCT12n", &OCTETSTRING_ber_, &OCT12n_raw_, &OCTETSTRING_text_, &OCT12n_xer_, &OCTETSTRING_json_, &OCT12n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT13n_raw_ = {104,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,NULL,false}; |
| const XERdescriptor_t OCT13n_xer_ = { {"OCT13n>\n", "OCT13n>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT13n_oer_ext_arr_[0] = {}; |
| const int OCT13n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT13n_oer_ = { -1, TRUE, 13, FALSE, 0, 0, OCT13n_oer_ext_arr_, 0, OCT13n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT13n_descr_ = { "@General_Types.OCT13n", &OCTETSTRING_ber_, &OCT13n_raw_, &OCTETSTRING_text_, &OCT13n_xer_, &OCTETSTRING_json_, &OCT13n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT14n_raw_ = {112,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,NULL,false}; |
| const XERdescriptor_t OCT14n_xer_ = { {"OCT14n>\n", "OCT14n>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT14n_oer_ext_arr_[0] = {}; |
| const int OCT14n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT14n_oer_ = { -1, TRUE, 14, FALSE, 0, 0, OCT14n_oer_ext_arr_, 0, OCT14n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT14n_descr_ = { "@General_Types.OCT14n", &OCTETSTRING_ber_, &OCT14n_raw_, &OCTETSTRING_text_, &OCT14n_xer_, &OCTETSTRING_json_, &OCT14n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT15n_raw_ = {120,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,NULL,false}; |
| const XERdescriptor_t OCT15n_xer_ = { {"OCT15n>\n", "OCT15n>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT15n_oer_ext_arr_[0] = {}; |
| const int OCT15n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT15n_oer_ = { -1, TRUE, 15, FALSE, 0, 0, OCT15n_oer_ext_arr_, 0, OCT15n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT15n_descr_ = { "@General_Types.OCT15n", &OCTETSTRING_ber_, &OCT15n_raw_, &OCTETSTRING_text_, &OCT15n_xer_, &OCTETSTRING_json_, &OCT15n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT16n_raw_ = {128,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,NULL,false}; |
| const XERdescriptor_t OCT16n_xer_ = { {"OCT16n>\n", "OCT16n>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT16n_oer_ext_arr_[0] = {}; |
| const int OCT16n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT16n_oer_ = { -1, TRUE, 16, FALSE, 0, 0, OCT16n_oer_ext_arr_, 0, OCT16n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT16n_descr_ = { "@General_Types.OCT16n", &OCTETSTRING_ber_, &OCT16n_raw_, &OCTETSTRING_text_, &OCT16n_xer_, &OCTETSTRING_json_, &OCT16n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT17n_raw_ = {136,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,NULL,false}; |
| const XERdescriptor_t OCT17n_xer_ = { {"OCT17n>\n", "OCT17n>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT17n_oer_ext_arr_[0] = {}; |
| const int OCT17n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT17n_oer_ = { -1, TRUE, 17, FALSE, 0, 0, OCT17n_oer_ext_arr_, 0, OCT17n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT17n_descr_ = { "@General_Types.OCT17n", &OCTETSTRING_ber_, &OCT17n_raw_, &OCTETSTRING_text_, &OCT17n_xer_, &OCTETSTRING_json_, &OCT17n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT18n_raw_ = {144,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,NULL,false}; |
| const XERdescriptor_t OCT18n_xer_ = { {"OCT18n>\n", "OCT18n>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT18n_oer_ext_arr_[0] = {}; |
| const int OCT18n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT18n_oer_ = { -1, TRUE, 18, FALSE, 0, 0, OCT18n_oer_ext_arr_, 0, OCT18n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT18n_descr_ = { "@General_Types.OCT18n", &OCTETSTRING_ber_, &OCT18n_raw_, &OCTETSTRING_text_, &OCT18n_xer_, &OCTETSTRING_json_, &OCT18n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT19n_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,NULL,false}; |
| const XERdescriptor_t OCT19n_xer_ = { {"OCT19n>\n", "OCT19n>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT19n_oer_ext_arr_[0] = {}; |
| const int OCT19n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT19n_oer_ = { -1, TRUE, 19, FALSE, 0, 0, OCT19n_oer_ext_arr_, 0, OCT19n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT19n_descr_ = { "@General_Types.OCT19n", &OCTETSTRING_ber_, &OCT19n_raw_, &OCTETSTRING_text_, &OCT19n_xer_, &OCTETSTRING_json_, &OCT19n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT20n_raw_ = {160,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,NULL,false}; |
| const XERdescriptor_t OCT20n_xer_ = { {"OCT20n>\n", "OCT20n>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT20n_oer_ext_arr_[0] = {}; |
| const int OCT20n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT20n_oer_ = { -1, TRUE, 20, FALSE, 0, 0, OCT20n_oer_ext_arr_, 0, OCT20n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT20n_descr_ = { "@General_Types.OCT20n", &OCTETSTRING_ber_, &OCT20n_raw_, &OCTETSTRING_text_, &OCT20n_xer_, &OCTETSTRING_json_, &OCT20n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT28n_raw_ = {224,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,NULL,false}; |
| const XERdescriptor_t OCT28n_xer_ = { {"OCT28n>\n", "OCT28n>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT28n_oer_ext_arr_[0] = {}; |
| const int OCT28n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT28n_oer_ = { -1, TRUE, 28, FALSE, 0, 0, OCT28n_oer_ext_arr_, 0, OCT28n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT28n_descr_ = { "@General_Types.OCT28n", &OCTETSTRING_ber_, &OCT28n_raw_, &OCTETSTRING_text_, &OCT28n_xer_, &OCTETSTRING_json_, &OCT28n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT32n_raw_ = {256,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,NULL,false}; |
| const XERdescriptor_t OCT32n_xer_ = { {"OCT32n>\n", "OCT32n>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT32n_oer_ext_arr_[0] = {}; |
| const int OCT32n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT32n_oer_ = { -1, TRUE, 32, FALSE, 0, 0, OCT32n_oer_ext_arr_, 0, OCT32n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT32n_descr_ = { "@General_Types.OCT32n", &OCTETSTRING_ber_, &OCT32n_raw_, &OCTETSTRING_text_, &OCT32n_xer_, &OCTETSTRING_json_, &OCT32n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT34n_raw_ = {272,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,NULL,false}; |
| const XERdescriptor_t OCT34n_xer_ = { {"OCT34n>\n", "OCT34n>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT34n_oer_ext_arr_[0] = {}; |
| const int OCT34n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT34n_oer_ = { -1, TRUE, 34, FALSE, 0, 0, OCT34n_oer_ext_arr_, 0, OCT34n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT34n_descr_ = { "@General_Types.OCT34n", &OCTETSTRING_ber_, &OCT34n_raw_, &OCTETSTRING_text_, &OCT34n_xer_, &OCTETSTRING_json_, &OCT34n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT46n_raw_ = {368,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,NULL,false}; |
| const XERdescriptor_t OCT46n_xer_ = { {"OCT46n>\n", "OCT46n>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT46n_oer_ext_arr_[0] = {}; |
| const int OCT46n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT46n_oer_ = { -1, TRUE, 46, FALSE, 0, 0, OCT46n_oer_ext_arr_, 0, OCT46n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT46n_descr_ = { "@General_Types.OCT46n", &OCTETSTRING_ber_, &OCT46n_raw_, &OCTETSTRING_text_, &OCT46n_xer_, &OCTETSTRING_json_, &OCT46n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT50n_raw_ = {400,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,NULL,false}; |
| const XERdescriptor_t OCT50n_xer_ = { {"OCT50n>\n", "OCT50n>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT50n_oer_ext_arr_[0] = {}; |
| const int OCT50n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT50n_oer_ = { -1, TRUE, 50, FALSE, 0, 0, OCT50n_oer_ext_arr_, 0, OCT50n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT50n_descr_ = { "@General_Types.OCT50n", &OCTETSTRING_ber_, &OCT50n_raw_, &OCTETSTRING_text_, &OCT50n_xer_, &OCTETSTRING_json_, &OCT50n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT69n_raw_ = {552,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,NULL,false}; |
| const XERdescriptor_t OCT69n_xer_ = { {"OCT69n>\n", "OCT69n>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT69n_oer_ext_arr_[0] = {}; |
| const int OCT69n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT69n_oer_ = { -1, TRUE, 69, FALSE, 0, 0, OCT69n_oer_ext_arr_, 0, OCT69n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT69n_descr_ = { "@General_Types.OCT69n", &OCTETSTRING_ber_, &OCT69n_raw_, &OCTETSTRING_text_, &OCT69n_xer_, &OCTETSTRING_json_, &OCT69n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT100n_raw_ = {800,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,NULL,false}; |
| const XERdescriptor_t OCT100n_xer_ = { {"OCT100n>\n", "OCT100n>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT100n_oer_ext_arr_[0] = {}; |
| const int OCT100n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT100n_oer_ = { -1, TRUE, 100, FALSE, 0, 0, OCT100n_oer_ext_arr_, 0, OCT100n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT100n_descr_ = { "@General_Types.OCT100n", &OCTETSTRING_ber_, &OCT100n_raw_, &OCTETSTRING_text_, &OCT100n_xer_, &OCTETSTRING_json_, &OCT100n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT128n_raw_ = {1024,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,NULL,false}; |
| const XERdescriptor_t OCT128n_xer_ = { {"OCT128n>\n", "OCT128n>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT128n_oer_ext_arr_[0] = {}; |
| const int OCT128n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT128n_oer_ = { -1, TRUE, 128, FALSE, 0, 0, OCT128n_oer_ext_arr_, 0, OCT128n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT128n_descr_ = { "@General_Types.OCT128n", &OCTETSTRING_ber_, &OCT128n_raw_, &OCTETSTRING_text_, &OCT128n_xer_, &OCTETSTRING_json_, &OCT128n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT500n_raw_ = {4000,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,NULL,false}; |
| const XERdescriptor_t OCT500n_xer_ = { {"OCT500n>\n", "OCT500n>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT500n_oer_ext_arr_[0] = {}; |
| const int OCT500n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT500n_oer_ = { -1, TRUE, 500, FALSE, 0, 0, OCT500n_oer_ext_arr_, 0, OCT500n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT500n_descr_ = { "@General_Types.OCT500n", &OCTETSTRING_ber_, &OCT500n_raw_, &OCTETSTRING_text_, &OCT500n_xer_, &OCTETSTRING_json_, &OCT500n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCTNn_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCTNn_xer_ = { {"OCTNn>\n", "OCTNn>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCTNn_oer_ext_arr_[0] = {}; |
| const int OCTNn_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCTNn_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCTNn_oer_ext_arr_, 0, OCTNn_oer_p_}; |
| const TTCN_Typedescriptor_t OCTNn_descr_ = { "@General_Types.OCTNn", &OCTETSTRING_ber_, &OCTNn_raw_, &OCTETSTRING_text_, &OCTNn_xer_, &OCTETSTRING_json_, &OCTNn_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1__3n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT1__3n_xer_ = { {"OCT1_3n>\n", "OCT1_3n>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1__3n_oer_ext_arr_[0] = {}; |
| const int OCT1__3n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1__3n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT1__3n_oer_ext_arr_, 0, OCT1__3n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1__3n_descr_ = { "@General_Types.OCT1_3n", &OCTETSTRING_ber_, &OCT1__3n_raw_, &OCTETSTRING_text_, &OCT1__3n_xer_, &OCTETSTRING_json_, &OCT1__3n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1__4n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT1__4n_xer_ = { {"OCT1_4n>\n", "OCT1_4n>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1__4n_oer_ext_arr_[0] = {}; |
| const int OCT1__4n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1__4n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT1__4n_oer_ext_arr_, 0, OCT1__4n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1__4n_descr_ = { "@General_Types.OCT1_4n", &OCTETSTRING_ber_, &OCT1__4n_raw_, &OCTETSTRING_text_, &OCT1__4n_xer_, &OCTETSTRING_json_, &OCT1__4n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1__5n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT1__5n_xer_ = { {"OCT1_5n>\n", "OCT1_5n>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1__5n_oer_ext_arr_[0] = {}; |
| const int OCT1__5n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1__5n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT1__5n_oer_ext_arr_, 0, OCT1__5n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1__5n_descr_ = { "@General_Types.OCT1_5n", &OCTETSTRING_ber_, &OCT1__5n_raw_, &OCTETSTRING_text_, &OCT1__5n_xer_, &OCTETSTRING_json_, &OCT1__5n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1__6n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT1__6n_xer_ = { {"OCT1_6n>\n", "OCT1_6n>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1__6n_oer_ext_arr_[0] = {}; |
| const int OCT1__6n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1__6n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT1__6n_oer_ext_arr_, 0, OCT1__6n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1__6n_descr_ = { "@General_Types.OCT1_6n", &OCTETSTRING_ber_, &OCT1__6n_raw_, &OCTETSTRING_text_, &OCT1__6n_xer_, &OCTETSTRING_json_, &OCT1__6n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1__7n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT1__7n_xer_ = { {"OCT1_7n>\n", "OCT1_7n>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1__7n_oer_ext_arr_[0] = {}; |
| const int OCT1__7n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1__7n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT1__7n_oer_ext_arr_, 0, OCT1__7n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1__7n_descr_ = { "@General_Types.OCT1_7n", &OCTETSTRING_ber_, &OCT1__7n_raw_, &OCTETSTRING_text_, &OCT1__7n_xer_, &OCTETSTRING_json_, &OCT1__7n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1__8n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT1__8n_xer_ = { {"OCT1_8n>\n", "OCT1_8n>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1__8n_oer_ext_arr_[0] = {}; |
| const int OCT1__8n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1__8n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT1__8n_oer_ext_arr_, 0, OCT1__8n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1__8n_descr_ = { "@General_Types.OCT1_8n", &OCTETSTRING_ber_, &OCT1__8n_raw_, &OCTETSTRING_text_, &OCT1__8n_xer_, &OCTETSTRING_json_, &OCT1__8n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1__12n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT1__12n_xer_ = { {"OCT1_12n>\n", "OCT1_12n>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1__12n_oer_ext_arr_[0] = {}; |
| const int OCT1__12n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1__12n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT1__12n_oer_ext_arr_, 0, OCT1__12n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1__12n_descr_ = { "@General_Types.OCT1_12n", &OCTETSTRING_ber_, &OCT1__12n_raw_, &OCTETSTRING_text_, &OCT1__12n_xer_, &OCTETSTRING_json_, &OCT1__12n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1__15n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT1__15n_xer_ = { {"OCT1_15n>\n", "OCT1_15n>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1__15n_oer_ext_arr_[0] = {}; |
| const int OCT1__15n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1__15n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT1__15n_oer_ext_arr_, 0, OCT1__15n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1__15n_descr_ = { "@General_Types.OCT1_15n", &OCTETSTRING_ber_, &OCT1__15n_raw_, &OCTETSTRING_text_, &OCT1__15n_xer_, &OCTETSTRING_json_, &OCT1__15n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1__16n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT1__16n_xer_ = { {"OCT1_16n>\n", "OCT1_16n>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1__16n_oer_ext_arr_[0] = {}; |
| const int OCT1__16n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1__16n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT1__16n_oer_ext_arr_, 0, OCT1__16n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1__16n_descr_ = { "@General_Types.OCT1_16n", &OCTETSTRING_ber_, &OCT1__16n_raw_, &OCTETSTRING_text_, &OCT1__16n_xer_, &OCTETSTRING_json_, &OCT1__16n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1__18n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT1__18n_xer_ = { {"OCT1_18n>\n", "OCT1_18n>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1__18n_oer_ext_arr_[0] = {}; |
| const int OCT1__18n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1__18n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT1__18n_oer_ext_arr_, 0, OCT1__18n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1__18n_descr_ = { "@General_Types.OCT1_18n", &OCTETSTRING_ber_, &OCT1__18n_raw_, &OCTETSTRING_text_, &OCT1__18n_xer_, &OCTETSTRING_json_, &OCT1__18n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1__20n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT1__20n_xer_ = { {"OCT1_20n>\n", "OCT1_20n>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1__20n_oer_ext_arr_[0] = {}; |
| const int OCT1__20n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1__20n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT1__20n_oer_ext_arr_, 0, OCT1__20n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1__20n_descr_ = { "@General_Types.OCT1_20n", &OCTETSTRING_ber_, &OCT1__20n_raw_, &OCTETSTRING_text_, &OCT1__20n_xer_, &OCTETSTRING_json_, &OCT1__20n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1__24n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT1__24n_xer_ = { {"OCT1_24n>\n", "OCT1_24n>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1__24n_oer_ext_arr_[0] = {}; |
| const int OCT1__24n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1__24n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT1__24n_oer_ext_arr_, 0, OCT1__24n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1__24n_descr_ = { "@General_Types.OCT1_24n", &OCTETSTRING_ber_, &OCT1__24n_raw_, &OCTETSTRING_text_, &OCT1__24n_xer_, &OCTETSTRING_json_, &OCT1__24n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1__32n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT1__32n_xer_ = { {"OCT1_32n>\n", "OCT1_32n>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1__32n_oer_ext_arr_[0] = {}; |
| const int OCT1__32n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1__32n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT1__32n_oer_ext_arr_, 0, OCT1__32n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1__32n_descr_ = { "@General_Types.OCT1_32n", &OCTETSTRING_ber_, &OCT1__32n_raw_, &OCTETSTRING_text_, &OCT1__32n_xer_, &OCTETSTRING_json_, &OCT1__32n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1__34n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT1__34n_xer_ = { {"OCT1_34n>\n", "OCT1_34n>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1__34n_oer_ext_arr_[0] = {}; |
| const int OCT1__34n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1__34n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT1__34n_oer_ext_arr_, 0, OCT1__34n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1__34n_descr_ = { "@General_Types.OCT1_34n", &OCTETSTRING_ber_, &OCT1__34n_raw_, &OCTETSTRING_text_, &OCT1__34n_xer_, &OCTETSTRING_json_, &OCT1__34n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1__46n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT1__46n_xer_ = { {"OCT1_46n>\n", "OCT1_46n>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1__46n_oer_ext_arr_[0] = {}; |
| const int OCT1__46n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1__46n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT1__46n_oer_ext_arr_, 0, OCT1__46n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1__46n_descr_ = { "@General_Types.OCT1_46n", &OCTETSTRING_ber_, &OCT1__46n_raw_, &OCTETSTRING_text_, &OCT1__46n_xer_, &OCTETSTRING_json_, &OCT1__46n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1__50n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT1__50n_xer_ = { {"OCT1_50n>\n", "OCT1_50n>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1__50n_oer_ext_arr_[0] = {}; |
| const int OCT1__50n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1__50n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT1__50n_oer_ext_arr_, 0, OCT1__50n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1__50n_descr_ = { "@General_Types.OCT1_50n", &OCTETSTRING_ber_, &OCT1__50n_raw_, &OCTETSTRING_text_, &OCT1__50n_xer_, &OCTETSTRING_json_, &OCT1__50n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1__112n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT1__112n_xer_ = { {"OCT1_112n>\n", "OCT1_112n>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1__112n_oer_ext_arr_[0] = {}; |
| const int OCT1__112n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1__112n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT1__112n_oer_ext_arr_, 0, OCT1__112n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1__112n_descr_ = { "@General_Types.OCT1_112n", &OCTETSTRING_ber_, &OCT1__112n_raw_, &OCTETSTRING_text_, &OCT1__112n_xer_, &OCTETSTRING_json_, &OCT1__112n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1__127n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT1__127n_xer_ = { {"OCT1_127n>\n", "OCT1_127n>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1__127n_oer_ext_arr_[0] = {}; |
| const int OCT1__127n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1__127n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT1__127n_oer_ext_arr_, 0, OCT1__127n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1__127n_descr_ = { "@General_Types.OCT1_127n", &OCTETSTRING_ber_, &OCT1__127n_raw_, &OCTETSTRING_text_, &OCT1__127n_xer_, &OCTETSTRING_json_, &OCT1__127n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1__128n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT1__128n_xer_ = { {"OCT1_128n>\n", "OCT1_128n>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1__128n_oer_ext_arr_[0] = {}; |
| const int OCT1__128n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1__128n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT1__128n_oer_ext_arr_, 0, OCT1__128n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1__128n_descr_ = { "@General_Types.OCT1_128n", &OCTETSTRING_ber_, &OCT1__128n_raw_, &OCTETSTRING_text_, &OCT1__128n_xer_, &OCTETSTRING_json_, &OCT1__128n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1__172n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT1__172n_xer_ = { {"OCT1_172n>\n", "OCT1_172n>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1__172n_oer_ext_arr_[0] = {}; |
| const int OCT1__172n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1__172n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT1__172n_oer_ext_arr_, 0, OCT1__172n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1__172n_descr_ = { "@General_Types.OCT1_172n", &OCTETSTRING_ber_, &OCT1__172n_raw_, &OCTETSTRING_text_, &OCT1__172n_xer_, &OCTETSTRING_json_, &OCT1__172n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT3__5n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT3__5n_xer_ = { {"OCT3_5n>\n", "OCT3_5n>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT3__5n_oer_ext_arr_[0] = {}; |
| const int OCT3__5n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT3__5n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT3__5n_oer_ext_arr_, 0, OCT3__5n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT3__5n_descr_ = { "@General_Types.OCT3_5n", &OCTETSTRING_ber_, &OCT3__5n_raw_, &OCTETSTRING_text_, &OCT3__5n_xer_, &OCTETSTRING_json_, &OCT3__5n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT3__7n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT3__7n_xer_ = { {"OCT3_7n>\n", "OCT3_7n>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT3__7n_oer_ext_arr_[0] = {}; |
| const int OCT3__7n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT3__7n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT3__7n_oer_ext_arr_, 0, OCT3__7n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT3__7n_descr_ = { "@General_Types.OCT3_7n", &OCTETSTRING_ber_, &OCT3__7n_raw_, &OCTETSTRING_text_, &OCT3__7n_xer_, &OCTETSTRING_json_, &OCT3__7n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT3__8n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT3__8n_xer_ = { {"OCT3_8n>\n", "OCT3_8n>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT3__8n_oer_ext_arr_[0] = {}; |
| const int OCT3__8n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT3__8n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT3__8n_oer_ext_arr_, 0, OCT3__8n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT3__8n_descr_ = { "@General_Types.OCT3_8n", &OCTETSTRING_ber_, &OCT3__8n_raw_, &OCTETSTRING_text_, &OCT3__8n_xer_, &OCTETSTRING_json_, &OCT3__8n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT3__14n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT3__14n_xer_ = { {"OCT3_14n>\n", "OCT3_14n>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT3__14n_oer_ext_arr_[0] = {}; |
| const int OCT3__14n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT3__14n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT3__14n_oer_ext_arr_, 0, OCT3__14n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT3__14n_descr_ = { "@General_Types.OCT3_14n", &OCTETSTRING_ber_, &OCT3__14n_raw_, &OCTETSTRING_text_, &OCT3__14n_xer_, &OCTETSTRING_json_, &OCT3__14n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT3__17n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT3__17n_xer_ = { {"OCT3_17n>\n", "OCT3_17n>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT3__17n_oer_ext_arr_[0] = {}; |
| const int OCT3__17n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT3__17n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT3__17n_oer_ext_arr_, 0, OCT3__17n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT3__17n_descr_ = { "@General_Types.OCT3_17n", &OCTETSTRING_ber_, &OCT3__17n_raw_, &OCTETSTRING_text_, &OCT3__17n_xer_, &OCTETSTRING_json_, &OCT3__17n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT4__8n_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT4__8n_xer_ = { {"OCT4_8n>\n", "OCT4_8n>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT4__8n_oer_ext_arr_[0] = {}; |
| const int OCT4__8n_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT4__8n_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT4__8n_oer_ext_arr_, 0, OCT4__8n_oer_p_}; |
| const TTCN_Typedescriptor_t OCT4__8n_descr_ = { "@General_Types.OCT4_8n", &OCTETSTRING_ber_, &OCT4__8n_raw_, &OCTETSTRING_text_, &OCT4__8n_xer_, &OCTETSTRING_json_, &OCT4__8n_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t Octetstrings_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,NULL,false}; |
| // No XER for Octetstrings |
| const TTCN_Typedescriptor_t Octetstrings_descr_ = { "@General_Types.Octetstrings", NULL, &Octetstrings_raw_, NULL, NULL, NULL, NULL, &OCTETSTRING_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t Octetstrings_0_xer_ = { {"OCTETSTRING>\n", "OCTETSTRING>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int Octetstrings_0_oer_ext_arr_[0] = {}; |
| const int Octetstrings_0_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t Octetstrings_0_oer_ = { -1, TRUE, -1, FALSE, 0, 0, Octetstrings_0_oer_ext_arr_, 0, Octetstrings_0_oer_p_}; |
| const TTCN_Typedescriptor_t Octetstrings_0_descr_ = { "@General_Types.Octetstrings.<oftype>", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &Octetstrings_0_xer_, &OCTETSTRING_json_, &Octetstrings_0_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_Typedescriptor_t& OctetstringList_descr_ = Octetstrings_descr_; |
| const TTCN_RAWdescriptor_t OctetstringSet_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,NULL,false}; |
| // No XER for OctetstringSet |
| const TTCN_Typedescriptor_t OctetstringSet_descr_ = { "@General_Types.OctetstringSet", NULL, &OctetstringSet_raw_, NULL, NULL, NULL, NULL, &OCTETSTRING_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t OctetstringSet_0_xer_ = { {"OCTETSTRING>\n", "OCTETSTRING>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OctetstringSet_0_oer_ext_arr_[0] = {}; |
| const int OctetstringSet_0_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OctetstringSet_0_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OctetstringSet_0_oer_ext_arr_, 0, OctetstringSet_0_oer_p_}; |
| const TTCN_Typedescriptor_t OctetstringSet_0_descr_ = { "@General_Types.OctetstringSet.<oftype>", &OCTETSTRING_ber_, &OCTETSTRING_raw_, &OCTETSTRING_text_, &OctetstringSet_0_xer_, &OCTETSTRING_json_, &OctetstringSet_0_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t CHAR4_raw_ = {32,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,NULL,false}; |
| const XERdescriptor_t CHAR4_xer_ = { {"CHAR4>\n", "CHAR4>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_Typedescriptor_t CHAR4_descr_ = { "@General_Types.CHAR4", NULL, &CHAR4_raw_, &CHARSTRING_text_, &CHAR4_xer_, &CHARSTRING_json_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t Charstrings_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,NULL,false}; |
| // No XER for Charstrings |
| const TTCN_Typedescriptor_t Charstrings_descr_ = { "@General_Types.Charstrings", NULL, &Charstrings_raw_, NULL, NULL, NULL, NULL, &CHARSTRING_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t Charstrings_0_xer_ = { {"CHARSTRING>\n", "CHARSTRING>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_Typedescriptor_t Charstrings_0_descr_ = { "@General_Types.Charstrings.<oftype>", NULL, &CHARSTRING_raw_, &CHARSTRING_text_, &Charstrings_0_xer_, &CHARSTRING_json_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_Typedescriptor_t& CharstringList_descr_ = Charstrings_descr_; |
| const TTCN_RAWdescriptor_t CharstringSet_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,NULL,false}; |
| // No XER for CharstringSet |
| const TTCN_Typedescriptor_t CharstringSet_descr_ = { "@General_Types.CharstringSet", NULL, &CharstringSet_raw_, NULL, NULL, NULL, NULL, &CHARSTRING_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t CharstringSet_0_xer_ = { {"CHARSTRING>\n", "CHARSTRING>\n"}, {12, 12}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_Typedescriptor_t CharstringSet_0_descr_ = { "@General_Types.CharstringSet.<oftype>", NULL, &CHARSTRING_raw_, &CHARSTRING_text_, &CharstringSet_0_xer_, &CHARSTRING_json_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t HEX4n_raw_ = {16,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,NULL,false}; |
| const XERdescriptor_t HEX4n_xer_ = { {"HEX4n>\n", "HEX4n>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_Typedescriptor_t HEX4n_descr_ = { "@General_Types.HEX4n", NULL, &HEX4n_raw_, NULL, &HEX4n_xer_, &HEXSTRING_json_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t HEX6n_raw_ = {24,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,NULL,false}; |
| const XERdescriptor_t HEX6n_xer_ = { {"HEX6n>\n", "HEX6n>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_Typedescriptor_t HEX6n_descr_ = { "@General_Types.HEX6n", NULL, &HEX6n_raw_, NULL, &HEX6n_xer_, &HEXSTRING_json_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t HEX8n_raw_ = {32,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,NULL,false}; |
| const XERdescriptor_t HEX8n_xer_ = { {"HEX8n>\n", "HEX8n>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_Typedescriptor_t HEX8n_descr_ = { "@General_Types.HEX8n", NULL, &HEX8n_raw_, NULL, &HEX8n_xer_, &HEXSTRING_json_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t HEX15n_raw_ = {60,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,NULL,false}; |
| const XERdescriptor_t HEX15n_xer_ = { {"HEX15n>\n", "HEX15n>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_Typedescriptor_t HEX15n_descr_ = { "@General_Types.HEX15n", NULL, &HEX15n_raw_, NULL, &HEX15n_xer_, &HEXSTRING_json_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t HEX16n_raw_ = {64,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,NULL,false}; |
| const XERdescriptor_t HEX16n_xer_ = { {"HEX16n>\n", "HEX16n>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_Typedescriptor_t HEX16n_descr_ = { "@General_Types.HEX16n", NULL, &HEX16n_raw_, NULL, &HEX16n_xer_, &HEXSTRING_json_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t HEX24n_raw_ = {96,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,NULL,false}; |
| const XERdescriptor_t HEX24n_xer_ = { {"HEX24n>\n", "HEX24n>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_Typedescriptor_t HEX24n_descr_ = { "@General_Types.HEX24n", NULL, &HEX24n_raw_, NULL, &HEX24n_xer_, &HEXSTRING_json_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t HEX0__18n_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,NULL,false}; |
| const XERdescriptor_t HEX0__18n_xer_ = { {"HEX0_18n>\n", "HEX0_18n>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_Typedescriptor_t HEX0__18n_descr_ = { "@General_Types.HEX0_18n", NULL, &HEX0__18n_raw_, NULL, &HEX0__18n_xer_, &HEXSTRING_json_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t HEX1__20n_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,NULL,false}; |
| const XERdescriptor_t HEX1__20n_xer_ = { {"HEX1_20n>\n", "HEX1_20n>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_Typedescriptor_t HEX1__20n_descr_ = { "@General_Types.HEX1_20n", NULL, &HEX1__20n_raw_, NULL, &HEX1__20n_xer_, &HEXSTRING_json_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t HEX1__34n_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,NULL,false}; |
| const XERdescriptor_t HEX1__34n_xer_ = { {"HEX1_34n>\n", "HEX1_34n>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_Typedescriptor_t HEX1__34n_descr_ = { "@General_Types.HEX1_34n", NULL, &HEX1__34n_raw_, NULL, &HEX1__34n_xer_, &HEXSTRING_json_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t Hexstrings_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,NULL,false}; |
| // No XER for Hexstrings |
| const TTCN_Typedescriptor_t Hexstrings_descr_ = { "@General_Types.Hexstrings", NULL, &Hexstrings_raw_, NULL, NULL, NULL, NULL, &HEXSTRING_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t Hexstrings_0_xer_ = { {"HEXSTRING>\n", "HEXSTRING>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_Typedescriptor_t Hexstrings_0_descr_ = { "@General_Types.Hexstrings.<oftype>", NULL, &HEXSTRING_raw_, NULL, &Hexstrings_0_xer_, &HEXSTRING_json_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_Typedescriptor_t& HexstringList_descr_ = Hexstrings_descr_; |
| const TTCN_RAWdescriptor_t HexstringSet_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,NULL,false}; |
| // No XER for HexstringSet |
| const TTCN_Typedescriptor_t HexstringSet_descr_ = { "@General_Types.HexstringSet", NULL, &HexstringSet_raw_, NULL, NULL, NULL, NULL, &HEXSTRING_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t HexstringSet_0_xer_ = { {"HEXSTRING>\n", "HEXSTRING>\n"}, {11, 11}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_Typedescriptor_t HexstringSet_0_descr_ = { "@General_Types.HexstringSet.<oftype>", NULL, &HEXSTRING_raw_, NULL, &HexstringSet_0_xer_, &HEXSTRING_json_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t INT3nb_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,NULL,false}; |
| const XERdescriptor_t INT3nb_xer_ = { {"INT3nb>\n", "INT3nb>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t INT3nb_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t INT3nb_descr_ = { "@General_Types.INT3nb", &INTEGER_ber_, &INT3nb_raw_, &INTEGER_text_, &INT3nb_xer_, &INTEGER_json_, &INT3nb_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t INT4nb_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,NULL,false}; |
| const XERdescriptor_t INT4nb_xer_ = { {"INT4nb>\n", "INT4nb>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t INT4nb_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t INT4nb_descr_ = { "@General_Types.INT4nb", &INTEGER_ber_, &INT4nb_raw_, &INTEGER_text_, &INT4nb_xer_, &INTEGER_json_, &INT4nb_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t INT5nb_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,NULL,false}; |
| const XERdescriptor_t INT5nb_xer_ = { {"INT5nb>\n", "INT5nb>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t INT5nb_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t INT5nb_descr_ = { "@General_Types.INT5nb", &INTEGER_ber_, &INT5nb_raw_, &INTEGER_text_, &INT5nb_xer_, &INTEGER_json_, &INT5nb_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t INT8nb_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,NULL,false}; |
| const XERdescriptor_t INT8nb_xer_ = { {"INT8nb>\n", "INT8nb>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t INT8nb_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t INT8nb_descr_ = { "@General_Types.INT8nb", &INTEGER_ber_, &INT8nb_raw_, &INTEGER_text_, &INT8nb_xer_, &INTEGER_json_, &INT8nb_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t INT2nbp_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,NULL,false}; |
| const XERdescriptor_t INT2nbp_xer_ = { {"INT2nbp>\n", "INT2nbp>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t INT2nbp_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t INT2nbp_descr_ = { "@General_Types.INT2nbp", &INTEGER_ber_, &INT2nbp_raw_, &INTEGER_text_, &INT2nbp_xer_, &INTEGER_json_, &INT2nbp_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t INT1nbp_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,NULL,false}; |
| const XERdescriptor_t INT1nbp_xer_ = { {"INT1nbp>\n", "INT1nbp>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t INT1nbp_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t INT1nbp_descr_ = { "@General_Types.INT1nbp", &INTEGER_ber_, &INT1nbp_raw_, &INTEGER_text_, &INT1nbp_xer_, &INTEGER_json_, &INT1nbp_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t INT3nbp_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,NULL,false}; |
| const XERdescriptor_t INT3nbp_xer_ = { {"INT3nbp>\n", "INT3nbp>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t INT3nbp_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t INT3nbp_descr_ = { "@General_Types.INT3nbp", &INTEGER_ber_, &INT3nbp_raw_, &INTEGER_text_, &INT3nbp_xer_, &INTEGER_json_, &INT3nbp_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t INT5nbp_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,NULL,false}; |
| const XERdescriptor_t INT5nbp_xer_ = { {"INT5nbp>\n", "INT5nbp>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t INT5nbp_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t INT5nbp_descr_ = { "@General_Types.INT5nbp", &INTEGER_ber_, &INT5nbp_raw_, &INTEGER_text_, &INT5nbp_xer_, &INTEGER_json_, &INT5nbp_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t INT9nbp_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,NULL,false}; |
| const XERdescriptor_t INT9nbp_xer_ = { {"INT9nbp>\n", "INT9nbp>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t INT9nbp_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t INT9nbp_descr_ = { "@General_Types.INT9nbp", &INTEGER_ber_, &INT9nbp_raw_, &INTEGER_text_, &INT9nbp_xer_, &INTEGER_json_, &INT9nbp_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t INT13nbp_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,NULL,false}; |
| const XERdescriptor_t INT13nbp_xer_ = { {"INT13nbp>\n", "INT13nbp>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t INT13nbp_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t INT13nbp_descr_ = { "@General_Types.INT13nbp", &INTEGER_ber_, &INT13nbp_raw_, &INTEGER_text_, &INT13nbp_xer_, &INTEGER_json_, &INT13nbp_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t INT15nbp_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,NULL,false}; |
| const XERdescriptor_t INT15nbp_xer_ = { {"INT15nbp>\n", "INT15nbp>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t INT15nbp_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t INT15nbp_descr_ = { "@General_Types.INT15nbp", &INTEGER_ber_, &INT15nbp_raw_, &INTEGER_text_, &INT15nbp_xer_, &INTEGER_json_, &INT15nbp_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t Integers_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,NULL,false}; |
| // No XER for Integers |
| const TTCN_Typedescriptor_t Integers_descr_ = { "@General_Types.Integers", NULL, &Integers_raw_, NULL, NULL, NULL, NULL, &INTEGER_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t Integers_0_xer_ = { {"INTEGER>\n", "INTEGER>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t Integers_0_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t Integers_0_descr_ = { "@General_Types.Integers.INTEGER", &INTEGER_ber_, &INTEGER_raw_, &INTEGER_text_, &Integers_0_xer_, &INTEGER_json_, &Integers_0_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_Typedescriptor_t& IntegerList_descr_ = Integers_descr_; |
| const TTCN_RAWdescriptor_t Integer__array_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,NULL,false}; |
| // No XER for Integer__array |
| const TTCN_Typedescriptor_t Integer__array_descr_ = { "@General_Types.Integer_array", NULL, &Integer__array_raw_, NULL, NULL, NULL, NULL, &Integers_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t IntegerSet_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,NULL,false}; |
| // No XER for IntegerSet |
| const TTCN_Typedescriptor_t IntegerSet_descr_ = { "@General_Types.IntegerSet", NULL, &IntegerSet_raw_, NULL, NULL, NULL, NULL, &INTEGER_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t IntegerSet_0_xer_ = { {"INTEGER>\n", "INTEGER>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t IntegerSet_0_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t IntegerSet_0_descr_ = { "@General_Types.IntegerSet.INTEGER", &INTEGER_ber_, &INTEGER_raw_, &INTEGER_text_, &IntegerSet_0_xer_, &INTEGER_json_, &IntegerSet_0_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t Floats_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,NULL,false}; |
| // No XER for Floats |
| const TTCN_Typedescriptor_t Floats_descr_ = { "@General_Types.Floats", NULL, &Floats_raw_, NULL, NULL, NULL, NULL, &FLOAT_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t Floats_0_xer_ = { {"FLOAT>\n", "FLOAT>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int Floats_0_oer_ext_arr_[0] = {}; |
| const int Floats_0_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t Floats_0_oer_ = { -1, TRUE, -1, FALSE, 0, 0, Floats_0_oer_ext_arr_, 0, Floats_0_oer_p_}; |
| const TTCN_Typedescriptor_t Floats_0_descr_ = { "@General_Types.Floats.<oftype>", &FLOAT_ber_, &FLOAT_raw_, NULL, &Floats_0_xer_, &FLOAT_json_, &Floats_0_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_Typedescriptor_t& FloatList_descr_ = Floats_descr_; |
| const TTCN_RAWdescriptor_t FloatSet_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,NULL,false}; |
| // No XER for FloatSet |
| const TTCN_Typedescriptor_t FloatSet_descr_ = { "@General_Types.FloatSet", NULL, &FloatSet_raw_, NULL, NULL, NULL, NULL, &FLOAT_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t FloatSet_0_xer_ = { {"FLOAT>\n", "FLOAT>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int FloatSet_0_oer_ext_arr_[0] = {}; |
| const int FloatSet_0_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t FloatSet_0_oer_ = { -1, TRUE, -1, FALSE, 0, 0, FloatSet_0_oer_ext_arr_, 0, FloatSet_0_oer_p_}; |
| const TTCN_Typedescriptor_t FloatSet_0_descr_ = { "@General_Types.FloatSet.<oftype>", &FLOAT_ber_, &FLOAT_raw_, NULL, &FloatSet_0_xer_, &FLOAT_json_, &FloatSet_0_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t UniversalCharstrings_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,NULL,false}; |
| // No XER for UniversalCharstrings |
| const TTCN_Typedescriptor_t UniversalCharstrings_descr_ = { "@General_Types.UniversalCharstrings", NULL, &UniversalCharstrings_raw_, NULL, NULL, NULL, NULL, &UNIVERSAL_CHARSTRING_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t UniversalCharstrings_0_xer_ = { {"UNIVERSAL_CHARSTRING>\n", "UNIVERSAL_CHARSTRING>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_Typedescriptor_t UniversalCharstrings_0_descr_ = { "@General_Types.UniversalCharstrings.<oftype>", NULL, &UNIVERSAL_CHARSTRING_raw_, &UNIVERSAL_CHARSTRING_text_, &UniversalCharstrings_0_xer_, &UNIVERSAL_CHARSTRING_json_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_Typedescriptor_t& UniversalCharstringList_descr_ = UniversalCharstrings_descr_; |
| const TTCN_RAWdescriptor_t UniversalCharstringSet_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,NULL,false}; |
| // No XER for UniversalCharstringSet |
| const TTCN_Typedescriptor_t UniversalCharstringSet_descr_ = { "@General_Types.UniversalCharstringSet", NULL, &UniversalCharstringSet_raw_, NULL, NULL, NULL, NULL, &UNIVERSAL_CHARSTRING_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t UniversalCharstringSet_0_xer_ = { {"UNIVERSAL_CHARSTRING>\n", "UNIVERSAL_CHARSTRING>\n"}, {22, 22}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_Typedescriptor_t UniversalCharstringSet_0_descr_ = { "@General_Types.UniversalCharstringSet.<oftype>", NULL, &UNIVERSAL_CHARSTRING_raw_, &UNIVERSAL_CHARSTRING_text_, &UniversalCharstringSet_0_xer_, &UNIVERSAL_CHARSTRING_json_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t Booleans_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,NULL,false}; |
| // No XER for Booleans |
| const TTCN_Typedescriptor_t Booleans_descr_ = { "@General_Types.Booleans", NULL, &Booleans_raw_, NULL, NULL, NULL, NULL, &BOOLEAN_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t Booleans_0_xer_ = { {"BOOLEAN>\n", "BOOLEAN>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int Booleans_0_oer_ext_arr_[0] = {}; |
| const int Booleans_0_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t Booleans_0_oer_ = { -1, TRUE, -1, FALSE, 0, 0, Booleans_0_oer_ext_arr_, 0, Booleans_0_oer_p_}; |
| const TTCN_Typedescriptor_t Booleans_0_descr_ = { "@General_Types.Booleans.BOOLEAN", &BOOLEAN_ber_, &BOOLEAN_raw_, &BOOLEAN_text_, &Booleans_0_xer_, &BOOLEAN_json_, &Booleans_0_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_Typedescriptor_t& BooleanList_descr_ = Booleans_descr_; |
| const TTCN_RAWdescriptor_t BooleanSet_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,NULL,false}; |
| // No XER for BooleanSet |
| const TTCN_Typedescriptor_t BooleanSet_descr_ = { "@General_Types.BooleanSet", NULL, &BooleanSet_raw_, NULL, NULL, NULL, NULL, &BOOLEAN_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t BooleanSet_0_xer_ = { {"BOOLEAN>\n", "BOOLEAN>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int BooleanSet_0_oer_ext_arr_[0] = {}; |
| const int BooleanSet_0_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t BooleanSet_0_oer_ = { -1, TRUE, -1, FALSE, 0, 0, BooleanSet_0_oer_ext_arr_, 0, BooleanSet_0_oer_p_}; |
| const TTCN_Typedescriptor_t BooleanSet_0_descr_ = { "@General_Types.BooleanSet.BOOLEAN", &BOOLEAN_ber_, &BOOLEAN_raw_, &BOOLEAN_text_, &BooleanSet_0_xer_, &BOOLEAN_json_, &BooleanSet_0_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t Verdicttypes_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,NULL,false}; |
| // No XER for Verdicttypes |
| const TTCN_Typedescriptor_t Verdicttypes_descr_ = { "@General_Types.Verdicttypes", NULL, &Verdicttypes_raw_, NULL, NULL, NULL, NULL, &VERDICTTYPE_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t Verdicttypes_0_xer_ = { {"VERDICTTYPE>\n", "VERDICTTYPE>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_Typedescriptor_t Verdicttypes_0_descr_ = { "@General_Types.Verdicttypes.<oftype>", NULL, NULL, NULL, &Verdicttypes_0_xer_, &VERDICTTYPE_json_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_Typedescriptor_t& VerdicttypeList_descr_ = Verdicttypes_descr_; |
| const TTCN_RAWdescriptor_t VerdicttypeSet_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,NULL,false}; |
| // No XER for VerdicttypeSet |
| const TTCN_Typedescriptor_t VerdicttypeSet_descr_ = { "@General_Types.VerdicttypeSet", NULL, &VerdicttypeSet_raw_, NULL, NULL, NULL, NULL, &VERDICTTYPE_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t VerdicttypeSet_0_xer_ = { {"VERDICTTYPE>\n", "VERDICTTYPE>\n"}, {13, 13}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_Typedescriptor_t VerdicttypeSet_0_descr_ = { "@General_Types.VerdicttypeSet.<oftype>", NULL, NULL, NULL, &VerdicttypeSet_0_xer_, &VERDICTTYPE_json_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t Anytypes_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,NULL,false}; |
| // No XER for Anytypes |
| const TTCN_Typedescriptor_t Anytypes_descr_ = { "@General_Types.Anytypes", NULL, &Anytypes_raw_, NULL, NULL, NULL, NULL, &Anytypes_0_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| // No XER for anytype |
| const TTCN_Typedescriptor_t anytype_descr_ = { "@General_Types.anytype", NULL, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| // No XER for Anytypes_0 |
| const TTCN_Typedescriptor_t Anytypes_0_descr_ = { "@General_Types.Anytypes.<oftype>", NULL, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_Typedescriptor_t& AnytypeList_descr_ = Anytypes_descr_; |
| const TTCN_RAWdescriptor_t AnytypeSet_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,NULL,false}; |
| // No XER for AnytypeSet |
| const TTCN_Typedescriptor_t AnytypeSet_descr_ = { "@General_Types.AnytypeSet", NULL, &AnytypeSet_raw_, NULL, NULL, NULL, NULL, &AnytypeSet_0_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| // No XER for AnytypeSet_0 |
| const TTCN_Typedescriptor_t AnytypeSet_0_descr_ = { "@General_Types.AnytypeSet.<oftype>", NULL, NULL, NULL, NULL, NULL, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT6__BO__LAST_raw_ = {6,SG_NO,ORDER_MSB,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,NULL,false}; |
| const XERdescriptor_t BIT6__BO__LAST_xer_ = { {"BIT6_BO_LAST>\n", "BIT6_BO_LAST>\n"}, {14, 14}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT6__BO__LAST_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT6__BO__LAST_descr_ = { "@General_Types.BIT6_BO_LAST", &BITSTRING_ber_, &BIT6__BO__LAST_raw_, NULL, &BIT6__BO__LAST_xer_, &BITSTRING_json_, &BIT6__BO__LAST_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT16__BO__LAST_raw_ = {16,SG_NO,ORDER_MSB,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,NULL,false}; |
| const XERdescriptor_t BIT16__BO__LAST_xer_ = { {"BIT16_BO_LAST>\n", "BIT16_BO_LAST>\n"}, {15, 15}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT16__BO__LAST_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT16__BO__LAST_descr_ = { "@General_Types.BIT16_BO_LAST", &BITSTRING_ber_, &BIT16__BO__LAST_raw_, NULL, &BIT16__BO__LAST_xer_, &BITSTRING_json_, &BIT16__BO__LAST_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t BIT32__BO__LAST_raw_ = {32,SG_NO,ORDER_MSB,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,NULL,false}; |
| const XERdescriptor_t BIT32__BO__LAST_xer_ = { {"BIT32_BO_LAST>\n", "BIT32_BO_LAST>\n"}, {15, 15}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t BIT32__BO__LAST_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t BIT32__BO__LAST_descr_ = { "@General_Types.BIT32_BO_LAST", &BITSTRING_ber_, &BIT32__BO__LAST_raw_, NULL, &BIT32__BO__LAST_xer_, &BITSTRING_json_, &BIT32__BO__LAST_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t Dummy_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t Dummy_xer_ = { {"Dummy>\n", "Dummy>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int Dummy_oer_ext_arr_[0] = {}; |
| const int Dummy_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t Dummy_oer_ = { -1, TRUE, 0, FALSE, 0, 0, Dummy_oer_ext_arr_, 0, Dummy_oer_p_}; |
| const TTCN_Typedescriptor_t Dummy_descr_ = { "@General_Types.Dummy", &OCTETSTRING_ber_, &Dummy_raw_, &OCTETSTRING_text_, &Dummy_xer_, &OCTETSTRING_json_, &Dummy_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT0_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT0_xer_ = { {"OCT0>\n", "OCT0>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT0_oer_ext_arr_[0] = {}; |
| const int OCT0_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT0_oer_ = { -1, TRUE, 0, FALSE, 0, 0, OCT0_oer_ext_arr_, 0, OCT0_oer_p_}; |
| const TTCN_Typedescriptor_t OCT0_descr_ = { "@General_Types.OCT0", &OCTETSTRING_ber_, &OCT0_raw_, &OCTETSTRING_text_, &OCT0_xer_, &OCTETSTRING_json_, &OCT0_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1_raw_ = {8,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,NULL,false}; |
| const XERdescriptor_t OCT1_xer_ = { {"OCT1>\n", "OCT1>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1_oer_ext_arr_[0] = {}; |
| const int OCT1_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1_oer_ = { -1, TRUE, 1, FALSE, 0, 0, OCT1_oer_ext_arr_, 0, OCT1_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1_descr_ = { "@General_Types.OCT1", &OCTETSTRING_ber_, &OCT1_raw_, &OCTETSTRING_text_, &OCT1_xer_, &OCTETSTRING_json_, &OCT1_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT2_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,NULL,false}; |
| const XERdescriptor_t OCT2_xer_ = { {"OCT2>\n", "OCT2>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT2_oer_ext_arr_[0] = {}; |
| const int OCT2_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT2_oer_ = { -1, TRUE, 2, FALSE, 0, 0, OCT2_oer_ext_arr_, 0, OCT2_oer_p_}; |
| const TTCN_Typedescriptor_t OCT2_descr_ = { "@General_Types.OCT2", &OCTETSTRING_ber_, &OCT2_raw_, &OCTETSTRING_text_, &OCT2_xer_, &OCTETSTRING_json_, &OCT2_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT3_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,NULL,false}; |
| const XERdescriptor_t OCT3_xer_ = { {"OCT3>\n", "OCT3>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT3_oer_ext_arr_[0] = {}; |
| const int OCT3_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT3_oer_ = { -1, TRUE, 3, FALSE, 0, 0, OCT3_oer_ext_arr_, 0, OCT3_oer_p_}; |
| const TTCN_Typedescriptor_t OCT3_descr_ = { "@General_Types.OCT3", &OCTETSTRING_ber_, &OCT3_raw_, &OCTETSTRING_text_, &OCT3_xer_, &OCTETSTRING_json_, &OCT3_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT4_raw_ = {32,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,4,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t OCT4_xer_ = { {"OCT4>\n", "OCT4>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT4_oer_ext_arr_[0] = {}; |
| const int OCT4_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT4_oer_ = { -1, TRUE, 4, FALSE, 0, 0, OCT4_oer_ext_arr_, 0, OCT4_oer_p_}; |
| const TTCN_Typedescriptor_t OCT4_descr_ = { "@General_Types.OCT4", &OCTETSTRING_ber_, &OCT4_raw_, &OCTETSTRING_text_, &OCT4_xer_, &OCTETSTRING_json_, &OCT4_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT5_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,NULL,false}; |
| const XERdescriptor_t OCT5_xer_ = { {"OCT5>\n", "OCT5>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT5_oer_ext_arr_[0] = {}; |
| const int OCT5_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT5_oer_ = { -1, TRUE, 5, FALSE, 0, 0, OCT5_oer_ext_arr_, 0, OCT5_oer_p_}; |
| const TTCN_Typedescriptor_t OCT5_descr_ = { "@General_Types.OCT5", &OCTETSTRING_ber_, &OCT5_raw_, &OCTETSTRING_text_, &OCT5_xer_, &OCTETSTRING_json_, &OCT5_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT6_raw_ = {48,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,6,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t OCT6_xer_ = { {"OCT6>\n", "OCT6>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT6_oer_ext_arr_[0] = {}; |
| const int OCT6_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT6_oer_ = { -1, TRUE, 6, FALSE, 0, 0, OCT6_oer_ext_arr_, 0, OCT6_oer_p_}; |
| const TTCN_Typedescriptor_t OCT6_descr_ = { "@General_Types.OCT6", &OCTETSTRING_ber_, &OCT6_raw_, &OCTETSTRING_text_, &OCT6_xer_, &OCTETSTRING_json_, &OCT6_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT7_raw_ = {56,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,7,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t OCT7_xer_ = { {"OCT7>\n", "OCT7>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT7_oer_ext_arr_[0] = {}; |
| const int OCT7_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT7_oer_ = { -1, TRUE, 7, FALSE, 0, 0, OCT7_oer_ext_arr_, 0, OCT7_oer_p_}; |
| const TTCN_Typedescriptor_t OCT7_descr_ = { "@General_Types.OCT7", &OCTETSTRING_ber_, &OCT7_raw_, &OCTETSTRING_text_, &OCT7_xer_, &OCTETSTRING_json_, &OCT7_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT8_raw_ = {64,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,8,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t OCT8_xer_ = { {"OCT8>\n", "OCT8>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT8_oer_ext_arr_[0] = {}; |
| const int OCT8_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT8_oer_ = { -1, TRUE, 8, FALSE, 0, 0, OCT8_oer_ext_arr_, 0, OCT8_oer_p_}; |
| const TTCN_Typedescriptor_t OCT8_descr_ = { "@General_Types.OCT8", &OCTETSTRING_ber_, &OCT8_raw_, &OCTETSTRING_text_, &OCT8_xer_, &OCTETSTRING_json_, &OCT8_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT9_raw_ = {72,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,9,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t OCT9_xer_ = { {"OCT9>\n", "OCT9>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT9_oer_ext_arr_[0] = {}; |
| const int OCT9_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT9_oer_ = { -1, TRUE, 9, FALSE, 0, 0, OCT9_oer_ext_arr_, 0, OCT9_oer_p_}; |
| const TTCN_Typedescriptor_t OCT9_descr_ = { "@General_Types.OCT9", &OCTETSTRING_ber_, &OCT9_raw_, &OCTETSTRING_text_, &OCT9_xer_, &OCTETSTRING_json_, &OCT9_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT10_raw_ = {80,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,10,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t OCT10_xer_ = { {"OCT10>\n", "OCT10>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT10_oer_ext_arr_[0] = {}; |
| const int OCT10_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT10_oer_ = { -1, TRUE, 10, FALSE, 0, 0, OCT10_oer_ext_arr_, 0, OCT10_oer_p_}; |
| const TTCN_Typedescriptor_t OCT10_descr_ = { "@General_Types.OCT10", &OCTETSTRING_ber_, &OCT10_raw_, &OCTETSTRING_text_, &OCT10_xer_, &OCTETSTRING_json_, &OCT10_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT11_raw_ = {88,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,11,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t OCT11_xer_ = { {"OCT11>\n", "OCT11>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT11_oer_ext_arr_[0] = {}; |
| const int OCT11_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT11_oer_ = { -1, TRUE, 11, FALSE, 0, 0, OCT11_oer_ext_arr_, 0, OCT11_oer_p_}; |
| const TTCN_Typedescriptor_t OCT11_descr_ = { "@General_Types.OCT11", &OCTETSTRING_ber_, &OCT11_raw_, &OCTETSTRING_text_, &OCT11_xer_, &OCTETSTRING_json_, &OCT11_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT12_raw_ = {96,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,12,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t OCT12_xer_ = { {"OCT12>\n", "OCT12>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT12_oer_ext_arr_[0] = {}; |
| const int OCT12_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT12_oer_ = { -1, TRUE, 12, FALSE, 0, 0, OCT12_oer_ext_arr_, 0, OCT12_oer_p_}; |
| const TTCN_Typedescriptor_t OCT12_descr_ = { "@General_Types.OCT12", &OCTETSTRING_ber_, &OCT12_raw_, &OCTETSTRING_text_, &OCT12_xer_, &OCTETSTRING_json_, &OCT12_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT13_raw_ = {104,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,13,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t OCT13_xer_ = { {"OCT13>\n", "OCT13>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT13_oer_ext_arr_[0] = {}; |
| const int OCT13_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT13_oer_ = { -1, TRUE, 13, FALSE, 0, 0, OCT13_oer_ext_arr_, 0, OCT13_oer_p_}; |
| const TTCN_Typedescriptor_t OCT13_descr_ = { "@General_Types.OCT13", &OCTETSTRING_ber_, &OCT13_raw_, &OCTETSTRING_text_, &OCT13_xer_, &OCTETSTRING_json_, &OCT13_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT14_raw_ = {112,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,14,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t OCT14_xer_ = { {"OCT14>\n", "OCT14>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT14_oer_ext_arr_[0] = {}; |
| const int OCT14_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT14_oer_ = { -1, TRUE, 14, FALSE, 0, 0, OCT14_oer_ext_arr_, 0, OCT14_oer_p_}; |
| const TTCN_Typedescriptor_t OCT14_descr_ = { "@General_Types.OCT14", &OCTETSTRING_ber_, &OCT14_raw_, &OCTETSTRING_text_, &OCT14_xer_, &OCTETSTRING_json_, &OCT14_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT15_raw_ = {120,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,15,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t OCT15_xer_ = { {"OCT15>\n", "OCT15>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT15_oer_ext_arr_[0] = {}; |
| const int OCT15_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT15_oer_ = { -1, TRUE, 15, FALSE, 0, 0, OCT15_oer_ext_arr_, 0, OCT15_oer_p_}; |
| const TTCN_Typedescriptor_t OCT15_descr_ = { "@General_Types.OCT15", &OCTETSTRING_ber_, &OCT15_raw_, &OCTETSTRING_text_, &OCT15_xer_, &OCTETSTRING_json_, &OCT15_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT16_raw_ = {128,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,16,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t OCT16_xer_ = { {"OCT16>\n", "OCT16>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT16_oer_ext_arr_[0] = {}; |
| const int OCT16_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT16_oer_ = { -1, TRUE, 16, FALSE, 0, 0, OCT16_oer_ext_arr_, 0, OCT16_oer_p_}; |
| const TTCN_Typedescriptor_t OCT16_descr_ = { "@General_Types.OCT16", &OCTETSTRING_ber_, &OCT16_raw_, &OCTETSTRING_text_, &OCT16_xer_, &OCTETSTRING_json_, &OCT16_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT17_raw_ = {136,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,17,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t OCT17_xer_ = { {"OCT17>\n", "OCT17>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT17_oer_ext_arr_[0] = {}; |
| const int OCT17_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT17_oer_ = { -1, TRUE, 17, FALSE, 0, 0, OCT17_oer_ext_arr_, 0, OCT17_oer_p_}; |
| const TTCN_Typedescriptor_t OCT17_descr_ = { "@General_Types.OCT17", &OCTETSTRING_ber_, &OCT17_raw_, &OCTETSTRING_text_, &OCT17_xer_, &OCTETSTRING_json_, &OCT17_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT18_raw_ = {144,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,18,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t OCT18_xer_ = { {"OCT18>\n", "OCT18>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT18_oer_ext_arr_[0] = {}; |
| const int OCT18_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT18_oer_ = { -1, TRUE, 18, FALSE, 0, 0, OCT18_oer_ext_arr_, 0, OCT18_oer_p_}; |
| const TTCN_Typedescriptor_t OCT18_descr_ = { "@General_Types.OCT18", &OCTETSTRING_ber_, &OCT18_raw_, &OCTETSTRING_text_, &OCT18_xer_, &OCTETSTRING_json_, &OCT18_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT19_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,19,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t OCT19_xer_ = { {"OCT19>\n", "OCT19>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT19_oer_ext_arr_[0] = {}; |
| const int OCT19_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT19_oer_ = { -1, TRUE, 19, FALSE, 0, 0, OCT19_oer_ext_arr_, 0, OCT19_oer_p_}; |
| const TTCN_Typedescriptor_t OCT19_descr_ = { "@General_Types.OCT19", &OCTETSTRING_ber_, &OCT19_raw_, &OCTETSTRING_text_, &OCT19_xer_, &OCTETSTRING_json_, &OCT19_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT20_raw_ = {160,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,20,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t OCT20_xer_ = { {"OCT20>\n", "OCT20>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT20_oer_ext_arr_[0] = {}; |
| const int OCT20_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT20_oer_ = { -1, TRUE, 20, FALSE, 0, 0, OCT20_oer_ext_arr_, 0, OCT20_oer_p_}; |
| const TTCN_Typedescriptor_t OCT20_descr_ = { "@General_Types.OCT20", &OCTETSTRING_ber_, &OCT20_raw_, &OCTETSTRING_text_, &OCT20_xer_, &OCTETSTRING_json_, &OCT20_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT32_raw_ = {256,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,32,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t OCT32_xer_ = { {"OCT32>\n", "OCT32>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT32_oer_ext_arr_[0] = {}; |
| const int OCT32_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT32_oer_ = { -1, TRUE, 32, FALSE, 0, 0, OCT32_oer_ext_arr_, 0, OCT32_oer_p_}; |
| const TTCN_Typedescriptor_t OCT32_descr_ = { "@General_Types.OCT32", &OCTETSTRING_ber_, &OCT32_raw_, &OCTETSTRING_text_, &OCT32_xer_, &OCTETSTRING_json_, &OCT32_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT34_raw_ = {272,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,34,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t OCT34_xer_ = { {"OCT34>\n", "OCT34>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT34_oer_ext_arr_[0] = {}; |
| const int OCT34_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT34_oer_ = { -1, TRUE, 34, FALSE, 0, 0, OCT34_oer_ext_arr_, 0, OCT34_oer_p_}; |
| const TTCN_Typedescriptor_t OCT34_descr_ = { "@General_Types.OCT34", &OCTETSTRING_ber_, &OCT34_raw_, &OCTETSTRING_text_, &OCT34_xer_, &OCTETSTRING_json_, &OCT34_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT46_raw_ = {368,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,46,CharCoding::UNKNOWN,NULL,false}; |
| const XERdescriptor_t OCT46_xer_ = { {"OCT46>\n", "OCT46>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT46_oer_ext_arr_[0] = {}; |
| const int OCT46_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT46_oer_ = { -1, TRUE, 46, FALSE, 0, 0, OCT46_oer_ext_arr_, 0, OCT46_oer_p_}; |
| const TTCN_Typedescriptor_t OCT46_descr_ = { "@General_Types.OCT46", &OCTETSTRING_ber_, &OCT46_raw_, &OCTETSTRING_text_, &OCT46_xer_, &OCTETSTRING_json_, &OCT46_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1__260_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT1__260_xer_ = { {"OCT1_260>\n", "OCT1_260>\n"}, {10, 10}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1__260_oer_ext_arr_[0] = {}; |
| const int OCT1__260_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1__260_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT1__260_oer_ext_arr_, 0, OCT1__260_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1__260_descr_ = { "@General_Types.OCT1_260", &OCTETSTRING_ber_, &OCT1__260_raw_, &OCTETSTRING_text_, &OCT1__260_xer_, &OCTETSTRING_json_, &OCT1__260_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1__8_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT1__8_xer_ = { {"OCT1_8>\n", "OCT1_8>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1__8_oer_ext_arr_[0] = {}; |
| const int OCT1__8_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1__8_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT1__8_oer_ext_arr_, 0, OCT1__8_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1__8_descr_ = { "@General_Types.OCT1_8", &OCTETSTRING_ber_, &OCT1__8_raw_, &OCTETSTRING_text_, &OCT1__8_xer_, &OCTETSTRING_json_, &OCT1__8_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1__12_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT1__12_xer_ = { {"OCT1_12>\n", "OCT1_12>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1__12_oer_ext_arr_[0] = {}; |
| const int OCT1__12_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1__12_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT1__12_oer_ext_arr_, 0, OCT1__12_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1__12_descr_ = { "@General_Types.OCT1_12", &OCTETSTRING_ber_, &OCT1__12_raw_, &OCTETSTRING_text_, &OCT1__12_xer_, &OCTETSTRING_json_, &OCT1__12_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1__32_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT1__32_xer_ = { {"OCT1_32>\n", "OCT1_32>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1__32_oer_ext_arr_[0] = {}; |
| const int OCT1__32_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1__32_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT1__32_oer_ext_arr_, 0, OCT1__32_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1__32_descr_ = { "@General_Types.OCT1_32", &OCTETSTRING_ber_, &OCT1__32_raw_, &OCTETSTRING_text_, &OCT1__32_xer_, &OCTETSTRING_json_, &OCT1__32_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1__50_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT1__50_xer_ = { {"OCT1_50>\n", "OCT1_50>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1__50_oer_ext_arr_[0] = {}; |
| const int OCT1__50_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1__50_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT1__50_oer_ext_arr_, 0, OCT1__50_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1__50_descr_ = { "@General_Types.OCT1_50", &OCTETSTRING_ber_, &OCT1__50_raw_, &OCTETSTRING_text_, &OCT1__50_xer_, &OCTETSTRING_json_, &OCT1__50_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT3__8_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCT3__8_xer_ = { {"OCT3_8>\n", "OCT3_8>\n"}, {8, 8}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT3__8_oer_ext_arr_[0] = {}; |
| const int OCT3__8_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT3__8_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCT3__8_oer_ext_arr_, 0, OCT3__8_oer_p_}; |
| const TTCN_Typedescriptor_t OCT3__8_descr_ = { "@General_Types.OCT3_8", &OCTETSTRING_ber_, &OCT3__8_raw_, &OCTETSTRING_text_, &OCT3__8_xer_, &OCTETSTRING_json_, &OCT3__8_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCTN_raw_ = {0,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,NULL,false}; |
| const XERdescriptor_t OCTN_xer_ = { {"OCTN>\n", "OCTN>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCTN_oer_ext_arr_[0] = {}; |
| const int OCTN_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCTN_oer_ = { -1, TRUE, -1, FALSE, 0, 0, OCTN_oer_ext_arr_, 0, OCTN_oer_p_}; |
| const TTCN_Typedescriptor_t OCTN_descr_ = { "@General_Types.OCTN", &OCTETSTRING_ber_, &OCTN_raw_, &OCTETSTRING_text_, &OCTN_xer_, &OCTETSTRING_json_, &OCTN_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t HEX1_raw_ = {4,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,NULL,false}; |
| const XERdescriptor_t HEX1_xer_ = { {"HEX1>\n", "HEX1>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_Typedescriptor_t HEX1_descr_ = { "@General_Types.HEX1", NULL, &HEX1_raw_, NULL, &HEX1_xer_, &HEXSTRING_json_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t HEX0__16_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,NULL,false}; |
| const XERdescriptor_t HEX0__16_xer_ = { {"HEX0_16>\n", "HEX0_16>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_Typedescriptor_t HEX0__16_descr_ = { "@General_Types.HEX0_16", NULL, &HEX0__16_raw_, NULL, &HEX0__16_xer_, &HEXSTRING_json_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t HEX5__16_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,NULL,false}; |
| const XERdescriptor_t HEX5__16_xer_ = { {"HEX5_16>\n", "HEX5_16>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_Typedescriptor_t HEX5__16_descr_ = { "@General_Types.HEX5_16", NULL, &HEX5__16_raw_, NULL, &HEX5__16_xer_, &HEXSTRING_json_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t HEX1__32_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,NULL,false}; |
| const XERdescriptor_t HEX1__32_xer_ = { {"HEX1_32>\n", "HEX1_32>\n"}, {9, 9}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_Typedescriptor_t HEX1__32_descr_ = { "@General_Types.HEX1_32", NULL, &HEX1__32_raw_, NULL, &HEX1__32_xer_, &HEXSTRING_json_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t INT1_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,NULL,false}; |
| const XERdescriptor_t INT1_xer_ = { {"INT1>\n", "INT1>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t INT1_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t INT1_descr_ = { "@General_Types.INT1", &INTEGER_ber_, &INT1_raw_, &INTEGER_text_, &INT1_xer_, &INTEGER_json_, &INT1_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t LIN1_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,NULL,false}; |
| const XERdescriptor_t LIN1_xer_ = { {"LIN1>\n", "LIN1>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t LIN1_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t LIN1_descr_ = { "@General_Types.LIN1", &INTEGER_ber_, &LIN1_raw_, &INTEGER_text_, &LIN1_xer_, &INTEGER_json_, &LIN1_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t LIN2_raw_ = {16,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,NULL,false}; |
| const XERdescriptor_t LIN2_xer_ = { {"LIN2>\n", "LIN2>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t LIN2_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t LIN2_descr_ = { "@General_Types.LIN2", &INTEGER_ber_, &LIN2_raw_, &INTEGER_text_, &LIN2_xer_, &INTEGER_json_, &LIN2_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t LIN2__BO__LAST_raw_ = {16,SG_NO,ORDER_MSB,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,NULL,false}; |
| const XERdescriptor_t LIN2__BO__LAST_xer_ = { {"LIN2_BO_LAST>\n", "LIN2_BO_LAST>\n"}, {14, 14}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t LIN2__BO__LAST_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t LIN2__BO__LAST_descr_ = { "@General_Types.LIN2_BO_LAST", &INTEGER_ber_, &LIN2__BO__LAST_raw_, &INTEGER_text_, &LIN2__BO__LAST_xer_, &INTEGER_json_, &LIN2__BO__LAST_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t LIN3__BO__LAST_raw_ = {24,SG_NO,ORDER_MSB,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,NULL,false}; |
| const XERdescriptor_t LIN3__BO__LAST_xer_ = { {"LIN3_BO_LAST>\n", "LIN3_BO_LAST>\n"}, {14, 14}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t LIN3__BO__LAST_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t LIN3__BO__LAST_descr_ = { "@General_Types.LIN3_BO_LAST", &INTEGER_ber_, &LIN3__BO__LAST_raw_, &INTEGER_text_, &LIN3__BO__LAST_xer_, &INTEGER_json_, &LIN3__BO__LAST_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t LIN4__BO__LAST_raw_ = {32,SG_NO,ORDER_MSB,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,NULL,false}; |
| const XERdescriptor_t LIN4__BO__LAST_xer_ = { {"LIN4_BO_LAST>\n", "LIN4_BO_LAST>\n"}, {14, 14}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t LIN4__BO__LAST_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t LIN4__BO__LAST_descr_ = { "@General_Types.LIN4_BO_LAST", &INTEGER_ber_, &LIN4__BO__LAST_raw_, &INTEGER_text_, &LIN4__BO__LAST_xer_, &INTEGER_json_, &LIN4__BO__LAST_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t INT1b_raw_ = {1,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,NULL,false}; |
| const XERdescriptor_t INT1b_xer_ = { {"INT1b>\n", "INT1b>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t INT1b_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t INT1b_descr_ = { "@General_Types.INT1b", &INTEGER_ber_, &INT1b_raw_, &INTEGER_text_, &INT1b_xer_, &INTEGER_json_, &INT1b_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t INT2b_raw_ = {2,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,NULL,false}; |
| const XERdescriptor_t INT2b_xer_ = { {"INT2b>\n", "INT2b>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t INT2b_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t INT2b_descr_ = { "@General_Types.INT2b", &INTEGER_ber_, &INT2b_raw_, &INTEGER_text_, &INT2b_xer_, &INTEGER_json_, &INT2b_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t INT3b_raw_ = {3,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,NULL,false}; |
| const XERdescriptor_t INT3b_xer_ = { {"INT3b>\n", "INT3b>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t INT3b_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t INT3b_descr_ = { "@General_Types.INT3b", &INTEGER_ber_, &INT3b_raw_, &INTEGER_text_, &INT3b_xer_, &INTEGER_json_, &INT3b_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t INT4b_raw_ = {4,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,NULL,false}; |
| const XERdescriptor_t INT4b_xer_ = { {"INT4b>\n", "INT4b>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t INT4b_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t INT4b_descr_ = { "@General_Types.INT4b", &INTEGER_ber_, &INT4b_raw_, &INTEGER_text_, &INT4b_xer_, &INTEGER_json_, &INT4b_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t INT5b_raw_ = {5,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,NULL,false}; |
| const XERdescriptor_t INT5b_xer_ = { {"INT5b>\n", "INT5b>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t INT5b_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t INT5b_descr_ = { "@General_Types.INT5b", &INTEGER_ber_, &INT5b_raw_, &INTEGER_text_, &INT5b_xer_, &INTEGER_json_, &INT5b_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t INT6b_raw_ = {6,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,NULL,false}; |
| const XERdescriptor_t INT6b_xer_ = { {"INT6b>\n", "INT6b>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t INT6b_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t INT6b_descr_ = { "@General_Types.INT6b", &INTEGER_ber_, &INT6b_raw_, &INTEGER_text_, &INT6b_xer_, &INTEGER_json_, &INT6b_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t INT7b_raw_ = {7,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,NULL,false}; |
| const XERdescriptor_t INT7b_xer_ = { {"INT7b>\n", "INT7b>\n"}, {7, 7}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t INT7b_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t INT7b_descr_ = { "@General_Types.INT7b", &INTEGER_ber_, &INT7b_raw_, &INTEGER_text_, &INT7b_xer_, &INTEGER_json_, &INT7b_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t INT11b__BO__LAST_raw_ = {11,SG_NO,ORDER_MSB,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,NULL,false}; |
| const XERdescriptor_t INT11b__BO__LAST_xer_ = { {"INT11b_BO_LAST>\n", "INT11b_BO_LAST>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t INT11b__BO__LAST_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t INT11b__BO__LAST_descr_ = { "@General_Types.INT11b_BO_LAST", &INTEGER_ber_, &INT11b__BO__LAST_raw_, &INTEGER_text_, &INT11b__BO__LAST_xer_, &INTEGER_json_, &INT11b__BO__LAST_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t INT12b__BO__LAST_raw_ = {12,SG_NO,ORDER_MSB,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,NULL,false}; |
| const XERdescriptor_t INT12b__BO__LAST_xer_ = { {"INT12b_BO_LAST>\n", "INT12b_BO_LAST>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t INT12b__BO__LAST_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t INT12b__BO__LAST_descr_ = { "@General_Types.INT12b_BO_LAST", &INTEGER_ber_, &INT12b__BO__LAST_raw_, &INTEGER_text_, &INT12b__BO__LAST_xer_, &INTEGER_json_, &INT12b__BO__LAST_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t INT13b__BO__LAST_raw_ = {13,SG_NO,ORDER_MSB,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,NULL,false}; |
| const XERdescriptor_t INT13b__BO__LAST_xer_ = { {"INT13b_BO_LAST>\n", "INT13b_BO_LAST>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t INT13b__BO__LAST_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t INT13b__BO__LAST_descr_ = { "@General_Types.INT13b_BO_LAST", &INTEGER_ber_, &INT13b__BO__LAST_raw_, &INTEGER_text_, &INT13b__BO__LAST_xer_, &INTEGER_json_, &INT13b__BO__LAST_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t INT14b__BO__LAST_raw_ = {14,SG_NO,ORDER_MSB,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,NULL,false}; |
| const XERdescriptor_t INT14b__BO__LAST_xer_ = { {"INT14b_BO_LAST>\n", "INT14b_BO_LAST>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t INT14b__BO__LAST_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t INT14b__BO__LAST_descr_ = { "@General_Types.INT14b_BO_LAST", &INTEGER_ber_, &INT14b__BO__LAST_raw_, &INTEGER_text_, &INT14b__BO__LAST_xer_, &INTEGER_json_, &INT14b__BO__LAST_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t INT20b__BO__LAST_raw_ = {20,SG_NO,ORDER_MSB,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,NULL,false}; |
| const XERdescriptor_t INT20b__BO__LAST_xer_ = { {"INT20b_BO_LAST>\n", "INT20b_BO_LAST>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t INT20b__BO__LAST_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t INT20b__BO__LAST_descr_ = { "@General_Types.INT20b_BO_LAST", &INTEGER_ber_, &INT20b__BO__LAST_raw_, &INTEGER_text_, &INT20b__BO__LAST_xer_, &INTEGER_json_, &INT20b__BO__LAST_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t INT31b__BO__LAST_raw_ = {31,SG_NO,ORDER_MSB,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,NULL,false}; |
| const XERdescriptor_t INT31b__BO__LAST_xer_ = { {"INT31b_BO_LAST>\n", "INT31b_BO_LAST>\n"}, {16, 16}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const TTCN_OERdescriptor_t INT31b__BO__LAST_oer_ = { -1, FALSE, -1, FALSE, 0, 0, NULL, 0, NULL }; |
| const TTCN_Typedescriptor_t INT31b__BO__LAST_descr_ = { "@General_Types.INT31b_BO_LAST", &INTEGER_ber_, &INT31b__BO__LAST_raw_, &INTEGER_text_, &INT31b__BO__LAST_xer_, &INTEGER_json_, &INT31b__BO__LAST_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_Typedescriptor_t& Dummy__comptype_descr_ = COMPONENT_descr_; |
| const TTCN_Typedescriptor_t& Dummy__CT_descr_ = COMPONENT_descr_; |
| const TTCN_RAWdescriptor_t Protocols_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,NULL,false}; |
| // No XER for Protocols |
| const TTCN_Typedescriptor_t Protocols_descr_ = { "@General_Types.Protocols", NULL, &Protocols_raw_, NULL, NULL, &ENUMERATED_json_, NULL, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT1List_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,NULL,false}; |
| // No XER for OCT1List |
| const TTCN_Typedescriptor_t OCT1List_descr_ = { "@General_Types.OCT1List", NULL, &OCT1List_raw_, NULL, NULL, NULL, NULL, &OCT1_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t OCT1List_0_xer_ = { {"OCT1>\n", "OCT1>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT1List_0_oer_ext_arr_[0] = {}; |
| const int OCT1List_0_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT1List_0_oer_ = { -1, TRUE, 1, FALSE, 0, 0, OCT1List_0_oer_ext_arr_, 0, OCT1List_0_oer_p_}; |
| const TTCN_Typedescriptor_t OCT1List_0_descr_ = { "@General_Types.OCT1List.<oftype>", &OCTETSTRING_ber_, &OCT1_raw_, &OCTETSTRING_text_, &OCT1List_0_xer_, &OCTETSTRING_json_, &OCT1List_0_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT2List_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,NULL,false}; |
| // No XER for OCT2List |
| const TTCN_Typedescriptor_t OCT2List_descr_ = { "@General_Types.OCT2List", NULL, &OCT2List_raw_, NULL, NULL, NULL, NULL, &OCT2_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t OCT2List_0_xer_ = { {"OCT2>\n", "OCT2>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT2List_0_oer_ext_arr_[0] = {}; |
| const int OCT2List_0_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT2List_0_oer_ = { -1, TRUE, 2, FALSE, 0, 0, OCT2List_0_oer_ext_arr_, 0, OCT2List_0_oer_p_}; |
| const TTCN_Typedescriptor_t OCT2List_0_descr_ = { "@General_Types.OCT2List.<oftype>", &OCTETSTRING_ber_, &OCT2_raw_, &OCTETSTRING_text_, &OCT2List_0_xer_, &OCTETSTRING_json_, &OCT2List_0_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT3List_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,NULL,false}; |
| // No XER for OCT3List |
| const TTCN_Typedescriptor_t OCT3List_descr_ = { "@General_Types.OCT3List", NULL, &OCT3List_raw_, NULL, NULL, NULL, NULL, &OCT3_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t OCT3List_0_xer_ = { {"OCT3>\n", "OCT3>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT3List_0_oer_ext_arr_[0] = {}; |
| const int OCT3List_0_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT3List_0_oer_ = { -1, TRUE, 3, FALSE, 0, 0, OCT3List_0_oer_ext_arr_, 0, OCT3List_0_oer_p_}; |
| const TTCN_Typedescriptor_t OCT3List_0_descr_ = { "@General_Types.OCT3List.<oftype>", &OCTETSTRING_ber_, &OCT3_raw_, &OCTETSTRING_text_, &OCT3List_0_xer_, &OCTETSTRING_json_, &OCT3List_0_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT4List_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,NULL,false}; |
| // No XER for OCT4List |
| const TTCN_Typedescriptor_t OCT4List_descr_ = { "@General_Types.OCT4List", NULL, &OCT4List_raw_, NULL, NULL, NULL, NULL, &OCT4_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t OCT4List_0_xer_ = { {"OCT4>\n", "OCT4>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT4List_0_oer_ext_arr_[0] = {}; |
| const int OCT4List_0_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT4List_0_oer_ = { -1, TRUE, 4, FALSE, 0, 0, OCT4List_0_oer_ext_arr_, 0, OCT4List_0_oer_p_}; |
| const TTCN_Typedescriptor_t OCT4List_0_descr_ = { "@General_Types.OCT4List.<oftype>", &OCTETSTRING_ber_, &OCT4_raw_, &OCTETSTRING_text_, &OCT4List_0_xer_, &OCTETSTRING_json_, &OCT4List_0_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT5List_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,NULL,false}; |
| // No XER for OCT5List |
| const TTCN_Typedescriptor_t OCT5List_descr_ = { "@General_Types.OCT5List", NULL, &OCT5List_raw_, NULL, NULL, NULL, NULL, &OCT5_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t OCT5List_0_xer_ = { {"OCT5>\n", "OCT5>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT5List_0_oer_ext_arr_[0] = {}; |
| const int OCT5List_0_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT5List_0_oer_ = { -1, TRUE, 5, FALSE, 0, 0, OCT5List_0_oer_ext_arr_, 0, OCT5List_0_oer_p_}; |
| const TTCN_Typedescriptor_t OCT5List_0_descr_ = { "@General_Types.OCT5List.<oftype>", &OCTETSTRING_ber_, &OCT5_raw_, &OCTETSTRING_text_, &OCT5List_0_xer_, &OCTETSTRING_json_, &OCT5List_0_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT6List_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,NULL,false}; |
| // No XER for OCT6List |
| const TTCN_Typedescriptor_t OCT6List_descr_ = { "@General_Types.OCT6List", NULL, &OCT6List_raw_, NULL, NULL, NULL, NULL, &OCT6_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t OCT6List_0_xer_ = { {"OCT6>\n", "OCT6>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT6List_0_oer_ext_arr_[0] = {}; |
| const int OCT6List_0_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT6List_0_oer_ = { -1, TRUE, 6, FALSE, 0, 0, OCT6List_0_oer_ext_arr_, 0, OCT6List_0_oer_p_}; |
| const TTCN_Typedescriptor_t OCT6List_0_descr_ = { "@General_Types.OCT6List.<oftype>", &OCTETSTRING_ber_, &OCT6_raw_, &OCTETSTRING_text_, &OCT6List_0_xer_, &OCTETSTRING_json_, &OCT6List_0_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t OCT7List_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,NULL,false}; |
| // No XER for OCT7List |
| const TTCN_Typedescriptor_t OCT7List_descr_ = { "@General_Types.OCT7List", NULL, &OCT7List_raw_, NULL, NULL, NULL, NULL, &OCT7_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const XERdescriptor_t OCT7List_0_xer_ = { {"OCT7>\n", "OCT7>\n"}, {6, 6}, 0 |FORM_UNQUALIFIED, WHITESPACE_PRESERVE, NULL, &module_object, -1, 0, NULL, NULL, -1, XSD_NONE }; |
| const int OCT7List_0_oer_ext_arr_[0] = {}; |
| const int OCT7List_0_oer_p_[0] = {}; |
| const TTCN_OERdescriptor_t OCT7List_0_oer_ = { -1, TRUE, 7, FALSE, 0, 0, OCT7List_0_oer_ext_arr_, 0, OCT7List_0_oer_p_}; |
| const TTCN_Typedescriptor_t OCT7List_0_descr_ = { "@General_Types.OCT7List.<oftype>", &OCTETSTRING_ber_, &OCT7_raw_, &OCTETSTRING_text_, &OCT7List_0_xer_, &OCTETSTRING_json_, &OCT7List_0_oer_, NULL, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ListOfDummy__comptype_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,NULL,false}; |
| // No XER for ListOfDummy__comptype |
| const TTCN_Typedescriptor_t ListOfDummy__comptype_descr_ = { "@General_Types.ListOfDummy_comptype", NULL, &ListOfDummy__comptype_raw_, NULL, NULL, NULL, NULL, &COMPONENT_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ListOfDummy__CT_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,NULL,false}; |
| // No XER for ListOfDummy__CT |
| const TTCN_Typedescriptor_t ListOfDummy__CT_descr_ = { "@General_Types.ListOfDummy_CT", NULL, &ListOfDummy__CT_raw_, NULL, NULL, NULL, NULL, &COMPONENT_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| const TTCN_RAWdescriptor_t ProtocolList_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,NULL,false}; |
| // No XER for ProtocolList |
| const TTCN_Typedescriptor_t ProtocolList_descr_ = { "@General_Types.ProtocolList", NULL, &ProtocolList_raw_, NULL, NULL, NULL, NULL, &Protocols_descr_, TTCN_Typedescriptor_t::DONTCARE }; |
| TTCN_Module module_object("General_Types", __DATE__, __TIME__, module_checksum, NULL, NULL, 0U, 4294967295U, 4294967295U, 4294967295U, NULL, 0LU, 0, NULL, NULL, NULL, NULL, init_comp_type, NULL, NULL, NULL); |
| |
| static const RuntimeVersionChecker ver_checker( current_runtime_version.requires_major_version_6, |
| current_runtime_version.requires_minor_version_6, |
| current_runtime_version.requires_patch_level_0, current_runtime_version.requires_runtime_1); |
| |
| /* Member functions of C++ classes */ |
| |
| |
| const Integers Integer__array::UNBOUND_ELEM; |
| Integer__array::Integer__array() |
| { |
| val_ptr = NULL; |
| } |
| |
| Integer__array::Integer__array(null_type) |
| { |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| } |
| |
| Integer__array::Integer__array(const Integer__array& other_value) |
| { |
| if (!other_value.is_bound()) TTCN_error("Copying an unbound value of type @General_Types.Integer_array."); |
| val_ptr = other_value.val_ptr; |
| val_ptr->ref_count++; |
| } |
| |
| Integer__array::~Integer__array() |
| { |
| clean_up(); |
| if (val_ptr != NULL) val_ptr = NULL; |
| } |
| |
| void Integer__array::clean_up() |
| { |
| if (val_ptr != NULL) { |
| if (val_ptr->ref_count > 1) { |
| val_ptr->ref_count--; |
| val_ptr = NULL; |
| } |
| else if (val_ptr->ref_count == 1) { |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; |
| elem_count++) |
| if (val_ptr->value_elements[elem_count] != NULL) |
| delete val_ptr->value_elements[elem_count]; |
| free_pointers((void**)val_ptr->value_elements); |
| delete val_ptr; |
| val_ptr = NULL; |
| } |
| else |
| TTCN_error("Internal error: Invalid reference counter in a record of/set of value."); |
| } |
| } |
| |
| Integer__array& Integer__array::operator=(null_type) |
| { |
| clean_up(); |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| return *this; |
| } |
| |
| Integer__array& Integer__array::operator=(const Integer__array& other_value) |
| { |
| if (other_value.val_ptr == NULL) TTCN_error("Assigning an unbound value of type @General_Types.Integer_array."); |
| if (this != &other_value) { |
| clean_up(); |
| val_ptr = other_value.val_ptr; |
| val_ptr->ref_count++; |
| } |
| return *this; |
| } |
| |
| boolean Integer__array::operator==(null_type) const |
| { |
| if (val_ptr == NULL) |
| TTCN_error("The left operand of comparison is an unbound value of type @General_Types.Integer_array."); |
| return val_ptr->n_elements == 0 ; |
| } |
| |
| boolean Integer__array::operator==(const Integer__array& other_value) const |
| { |
| if (val_ptr == NULL) TTCN_error("The left operand of comparison is an unbound value of type @General_Types.Integer_array."); |
| if (other_value.val_ptr == NULL) TTCN_error("The right operand of comparison is an unbound value of type @General_Types.Integer_array."); |
| if (val_ptr == other_value.val_ptr) return TRUE; |
| if (val_ptr->n_elements != (other_value.val_ptr)->n_elements) |
| return FALSE; |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++){ |
| if (val_ptr->value_elements[elem_count] != NULL){ |
| if ((other_value.val_ptr)->value_elements[elem_count] != NULL){ |
| if (*val_ptr->value_elements[elem_count] != *(other_value.val_ptr)->value_elements[elem_count]) return FALSE; |
| } else return FALSE; |
| } else { |
| if ((other_value.val_ptr)->value_elements[elem_count] != NULL) return FALSE; |
| } |
| } |
| return TRUE; |
| } |
| |
| Integers& Integer__array::operator[](int index_value) |
| { |
| if (index_value < 0) TTCN_error("Accessing an element of type @General_Types.Integer_array using a negative index: %d.", index_value); |
| if (val_ptr == NULL) { |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| } else if (val_ptr->ref_count > 1) { |
| struct recordof_setof_struct *new_val_ptr = new recordof_setof_struct; |
| new_val_ptr->ref_count = 1; |
| new_val_ptr->n_elements = (index_value >= val_ptr->n_elements) ? index_value + 1 : val_ptr->n_elements; |
| new_val_ptr->value_elements = (Integers**)allocate_pointers(new_val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++){ |
| if (val_ptr->value_elements[elem_count] != NULL){ |
| new_val_ptr->value_elements[elem_count] = new Integers(*(val_ptr->value_elements[elem_count])); |
| } |
| } |
| clean_up(); |
| val_ptr = new_val_ptr; |
| } |
| if (index_value >= val_ptr->n_elements) set_size(index_value + 1); |
| if (val_ptr->value_elements[index_value] == NULL) { |
| val_ptr->value_elements[index_value] = new Integers; |
| } |
| return *val_ptr->value_elements[index_value]; |
| } |
| |
| Integers& Integer__array::operator[](const INTEGER& index_value) |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a value of type @General_Types.Integer_array."); |
| return (*this)[(int)index_value]; |
| } |
| |
| const Integers& Integer__array::operator[](int index_value) const |
| { |
| if (val_ptr == NULL) |
| TTCN_error("Accessing an element in an unbound value of type @General_Types.Integer_array."); |
| if (index_value < 0) TTCN_error("Accessing an element of type @General_Types.Integer_array using a negative index: %d.", index_value); |
| if (index_value >= val_ptr->n_elements) TTCN_error("Index overflow in a value of type @General_Types.Integer_array: The index is %d, but the value has only %d elements.", index_value, val_ptr->n_elements); |
| return (val_ptr->value_elements[index_value] == NULL) ? |
| UNBOUND_ELEM : *val_ptr->value_elements[index_value]; |
| } |
| |
| const Integers& Integer__array::operator[](const INTEGER& index_value) const |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a value of type @General_Types.Integer_array."); |
| return (*this)[(int)index_value]; |
| } |
| |
| Integer__array Integer__array::operator<<=(int rotate_count) const |
| { |
| return *this >>= (-rotate_count); |
| } |
| |
| Integer__array Integer__array::operator<<=(const INTEGER& rotate_count) const |
| { |
| rotate_count.must_bound("Unbound integer operand of rotate left operator."); |
| return *this >>= (int)(-rotate_count); |
| } |
| |
| Integer__array Integer__array::operator>>=(const INTEGER& rotate_count) const |
| { |
| rotate_count.must_bound("Unbound integer operand of rotate right operator."); |
| return *this >>= (int)rotate_count; |
| } |
| |
| Integer__array Integer__array::operator>>=(int rotate_count) const |
| { |
| if (val_ptr == NULL) TTCN_error("Performing rotation operation on an unbound value of type @General_Types.Integer_array."); |
| if (val_ptr->n_elements == 0) return *this; |
| int rc; |
| if (rotate_count>=0) rc = rotate_count % val_ptr->n_elements; |
| else rc = val_ptr->n_elements - ((-rotate_count) % val_ptr->n_elements); |
| if (rc == 0) return *this; |
| Integer__array ret_val; |
| ret_val.set_size(val_ptr->n_elements); |
| for (int i=0; i<val_ptr->n_elements; i++) { |
| if (val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[(i+rc)%val_ptr->n_elements] =new Integers(*val_ptr->value_elements[i]); |
| } |
| } |
| return ret_val; |
| } |
| |
| Integer__array Integer__array::operator+(const Integer__array& other_value) const |
| { |
| if (val_ptr == NULL || other_value.val_ptr == NULL) TTCN_error("Unbound operand of @General_Types.Integer_array concatenation."); |
| if (val_ptr->n_elements == 0) return other_value; |
| if (other_value.val_ptr->n_elements == 0) return *this; |
| Integer__array ret_val; |
| ret_val.set_size(val_ptr->n_elements+other_value.val_ptr->n_elements); |
| for (int i=0; i<val_ptr->n_elements; i++) { |
| if (val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i] = new Integers(*val_ptr->value_elements[i]); |
| } |
| } |
| for (int i=0; i<other_value.val_ptr->n_elements; i++) { |
| if (other_value.val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i+val_ptr->n_elements] = new Integers(*other_value.val_ptr->value_elements[i]); |
| } |
| } |
| return ret_val; |
| } |
| |
| Integer__array Integer__array::substr(int index, int returncount) const |
| { |
| if (val_ptr == NULL) TTCN_error("The first argument of substr() is an unbound value of type @General_Types.Integer_array."); |
| check_substr_arguments(val_ptr->n_elements, index, returncount, "@General_Types.Integer_array","element"); |
| Integer__array ret_val; |
| ret_val.set_size(returncount); |
| for (int i=0; i<returncount; i++) { |
| if (val_ptr->value_elements[i+index] != NULL) { |
| ret_val.val_ptr->value_elements[i] = new Integers(*val_ptr->value_elements[i+index]); |
| } |
| } |
| return ret_val; |
| } |
| |
| Integer__array Integer__array::replace(int index, int len, const Integer__array& repl) const |
| { |
| if (val_ptr == NULL) TTCN_error("The first argument of replace() is an unbound value of type @General_Types.Integer_array."); |
| if (repl.val_ptr == NULL) TTCN_error("The fourth argument of replace() is an unbound value of type @General_Types.Integer_array."); |
| check_replace_arguments(val_ptr->n_elements, index, len, "@General_Types.Integer_array","element"); |
| Integer__array ret_val; |
| ret_val.set_size(val_ptr->n_elements + repl.val_ptr->n_elements - len); |
| for (int i = 0; i < index; i++) { |
| if (val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i] = new Integers(*val_ptr->value_elements[i]); |
| } |
| } |
| for (int i = 0; i < repl.val_ptr->n_elements; i++) { |
| if (repl.val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i+index] = new Integers(*repl.val_ptr->value_elements[i]); |
| } |
| } |
| for (int i = 0; i < val_ptr->n_elements - index - len; i++) { |
| if (val_ptr->value_elements[index+i+len] != NULL) { |
| ret_val.val_ptr->value_elements[index+i+repl.val_ptr->n_elements] = new Integers(*val_ptr->value_elements[index+i+len]); |
| } |
| } |
| return ret_val; |
| } |
| |
| Integer__array Integer__array::replace(int index, int len, const Integer__array_template& repl) const |
| { |
| if (!repl.is_value()) TTCN_error("The fourth argument of function replace() is a template with non-specific value."); |
| return replace(index, len, repl.valueof()); |
| } |
| |
| void Integer__array::set_size(int new_size) |
| { |
| if (new_size < 0) TTCN_error("Internal error: Setting a negative size for a value of type @General_Types.Integer_array."); |
| if (val_ptr == NULL) { |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| } else if (val_ptr->ref_count > 1) { |
| struct recordof_setof_struct *new_val_ptr = new recordof_setof_struct; |
| new_val_ptr->ref_count = 1; |
| new_val_ptr->n_elements = (new_size < val_ptr->n_elements) ? new_size : val_ptr->n_elements; |
| new_val_ptr->value_elements = (Integers**)allocate_pointers(new_val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < new_val_ptr->n_elements; elem_count++) { |
| if (val_ptr->value_elements[elem_count] != NULL){ |
| new_val_ptr->value_elements[elem_count] = new Integers(*(val_ptr->value_elements[elem_count])); |
| } |
| } |
| clean_up(); |
| val_ptr = new_val_ptr; |
| } |
| if (new_size > val_ptr->n_elements) { |
| val_ptr->value_elements = (Integers**)reallocate_pointers((void**)val_ptr->value_elements, val_ptr->n_elements, new_size); |
| #ifdef TITAN_MEMORY_DEBUG_SET_RECORD_OF |
| if((val_ptr->n_elements/1000)!=(new_size/1000)) TTCN_warning("New size of type @General_Types.Integer_array: %d",new_size); |
| #endif |
| val_ptr->n_elements = new_size; |
| } else if (new_size < val_ptr->n_elements) { |
| for (int elem_count = new_size; elem_count < val_ptr->n_elements; elem_count++) |
| if (val_ptr->value_elements[elem_count] != NULL)delete val_ptr->value_elements[elem_count]; |
| val_ptr->value_elements = (Integers**)reallocate_pointers((void**)val_ptr->value_elements, val_ptr->n_elements, new_size); |
| val_ptr->n_elements = new_size; |
| } |
| } |
| |
| boolean Integer__array::is_value() const |
| { |
| if (val_ptr == NULL) return FALSE; |
| for(int i = 0; i < val_ptr->n_elements; ++i) { |
| if (val_ptr->value_elements[i] == NULL || !val_ptr->value_elements[i]->is_value()) return FALSE; |
| } |
| return TRUE; |
| } |
| |
| int Integer__array::size_of() const |
| { |
| if (val_ptr == NULL) TTCN_error("Performing sizeof operation on an unbound value of type @General_Types.Integer_array."); |
| return val_ptr->n_elements; |
| } |
| |
| int Integer__array::lengthof() const |
| { |
| if (val_ptr == NULL) TTCN_error("Performing lengthof operation on an unbound value of type @General_Types.Integer_array."); |
| for (int my_length=val_ptr->n_elements; my_length>0; my_length--) if (val_ptr->value_elements[my_length-1] != NULL) return my_length; |
| return 0; |
| } |
| |
| void Integer__array::log() const |
| { |
| if (val_ptr == NULL) {; |
| TTCN_Logger::log_event_unbound(); |
| return; |
| } |
| switch (val_ptr->n_elements) { |
| case 0: |
| TTCN_Logger::log_event_str("{ }"); |
| break; |
| default: |
| TTCN_Logger::log_event_str("{ "); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) { |
| if (elem_count > 0) TTCN_Logger::log_event_str(", "); |
| (*this)[elem_count].log(); |
| } |
| TTCN_Logger::log_event_str(" }"); |
| } |
| } |
| |
| void Integer__array::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE|Module_Param::BC_LIST, "record of value"); |
| switch (param.get_operation_type()) { |
| case Module_Param::OT_ASSIGN: |
| if (param.get_type()==Module_Param::MP_Value_List && param.get_size()==0) { |
| *this = NULL_VALUE; |
| return; |
| } |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: |
| set_size(param.get_size()); |
| for (size_t i=0; i<param.get_size(); ++i) { |
| Module_Param* const curr = param.get_elem(i); |
| if (curr->get_type()!=Module_Param::MP_NotUsed) { |
| (*this)[i].set_param(*curr); |
| if (!(*this)[i].is_bound()) { |
| delete val_ptr->value_elements[i]; |
| val_ptr->value_elements[i] = NULL; |
| } |
| } |
| } |
| break; |
| case Module_Param::MP_Indexed_List: |
| for (size_t i=0; i<param.get_size(); ++i) { |
| Module_Param* const curr = param.get_elem(i); |
| (*this)[curr->get_id()->get_index()].set_param(*curr); |
| if (!(*this)[curr->get_id()->get_index()].is_bound()) { |
| delete val_ptr->value_elements[curr->get_id()->get_index()]; |
| val_ptr->value_elements[curr->get_id()->get_index()] = NULL; |
| } |
| } |
| break; |
| default: |
| param.type_error("record of value", "@General_Types.Integer_array"); |
| } |
| break; |
| case Module_Param::OT_CONCAT: |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: { |
| if (!is_bound()) *this = NULL_VALUE; |
| int start_idx = lengthof(); |
| for (size_t i=0; i<param.get_size(); ++i) { |
| Module_Param* const curr = param.get_elem(i); |
| if ((curr->get_type()!=Module_Param::MP_NotUsed)) { |
| (*this)[start_idx+(int)i].set_param(*curr); |
| } |
| } |
| } break; |
| case Module_Param::MP_Indexed_List: |
| param.error("Cannot concatenate an indexed value list"); |
| break; |
| default: |
| param.type_error("record of value", "@General_Types.Integer_array"); |
| } |
| break; |
| default: |
| TTCN_error("Internal error: Unknown operation type."); |
| } |
| } |
| |
| void Integer__array::set_implicit_omit() |
| { |
| if (val_ptr == NULL) return; |
| for (int i = 0; i < val_ptr->n_elements; i++) { |
| if (val_ptr->value_elements[i] != NULL) val_ptr->value_elements[i]->set_implicit_omit(); |
| } |
| } |
| |
| void Integer__array::encode_text(Text_Buf& text_buf) const |
| { |
| if (val_ptr == NULL) TTCN_error("Text encoder: Encoding an unbound value of type @General_Types.Integer_array."); |
| text_buf.push_int(val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) |
| (*this)[elem_count].encode_text(text_buf); |
| } |
| |
| void Integer__array::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = text_buf.pull_int().get_val(); |
| if (val_ptr->n_elements < 0) TTCN_error("Text decoder: Negative size was received for a value of type @General_Types.Integer_array."); |
| val_ptr->value_elements = (Integers**)allocate_pointers(val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) { |
| val_ptr->value_elements[elem_count] = new Integers; |
| val_ptr->value_elements[elem_count]->decode_text(text_buf); |
| } |
| } |
| |
| void Integer__array::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t 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); |
| 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;} |
| default: |
| TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| void Integer__array::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t 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(); |
| if(b_data[p_buf.get_len()-1]!='\0'){ |
| 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); |
| 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)<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;} |
| default: |
| TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| int Integer__array::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean /*no_err*/, int sel_field, boolean first_call, const RAW_Force_Omit*){ |
| int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding); |
| limit-=prepaddlength; |
| int decoded_length=0; |
| int decoded_field_length=0; |
| size_t start_of_field=0; |
| if(first_call) { |
| clean_up(); |
| val_ptr=new recordof_setof_struct; |
| val_ptr->ref_count=1; |
| val_ptr->n_elements=0; |
| val_ptr->value_elements=NULL; |
| } |
| int start_field=val_ptr->n_elements; |
| if(p_td.raw->fieldlength || sel_field!=-1){ |
| int a=0; |
| if(sel_field==-1) sel_field=p_td.raw->fieldlength; |
| for(a=0;a<sel_field;a++){ |
| decoded_field_length=(*this)[a+start_field].RAW_decode(*p_td.oftype_descr,p_buf,limit,top_bit_ord,TRUE); |
| if(decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| } |
| if(a==0) val_ptr->n_elements=0; |
| } else { |
| if(limit==0){ |
| if(!first_call) return -1; |
| val_ptr->n_elements=0; |
| return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength; |
| } |
| int a=start_field; |
| while(limit>0){ |
| start_of_field=p_buf.get_pos_bit(); |
| decoded_field_length=(*this)[a].RAW_decode(*p_td.oftype_descr,p_buf,limit,top_bit_ord,TRUE); |
| if(decoded_field_length < 0){ |
| delete &(*this)[a]; |
| val_ptr->n_elements--; |
| p_buf.set_pos_bit(start_of_field); |
| if(a>start_field){ |
| return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength; |
| } else return -1; |
| } |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| a++; |
| } |
| } |
| return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength; |
| } |
| |
| int Integer__array::RAW_encode(const TTCN_Typedescriptor_t& p_td,RAW_enc_tree& myleaf) const{ |
| int encoded_length=0; |
| int encoded_num_of_records=p_td.raw->fieldlength?smaller(val_ptr->n_elements, p_td.raw->fieldlength):val_ptr->n_elements; |
| myleaf.isleaf=FALSE; |
| myleaf.rec_of=TRUE; |
| myleaf.body.node.num_of_nodes=encoded_num_of_records; |
| myleaf.body.node.nodes=init_nodes_of_enc_tree(encoded_num_of_records); |
| for(int a=0;a<encoded_num_of_records;a++){ |
| myleaf.body.node.nodes[a]=new RAW_enc_tree(TRUE,&myleaf,&(myleaf.curr_pos),a,p_td.oftype_descr->raw); |
| encoded_length+=(*this)[a].RAW_encode(*p_td.oftype_descr,*myleaf.body.node.nodes[a]); |
| } |
| return myleaf.length=encoded_length; |
| } |
| |
| void Integer__array_template::copy_value(const Integer__array& other_value) |
| { |
| if (!other_value.is_bound()) TTCN_error("Initialization of a template of type @General_Types.Integer_array with an unbound value."); |
| single_value.n_elements = other_value.size_of(); |
| single_value.value_elements = (Integers_template**)allocate_pointers(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (other_value[elem_count].is_bound()) { |
| single_value.value_elements[elem_count] = new Integers_template(other_value[elem_count]); |
| } else { |
| single_value.value_elements[elem_count] = new Integers_template; |
| } |
| } |
| set_selection(SPECIFIC_VALUE); |
| } |
| |
| void Integer__array_template::copy_template(const Integer__array_template& other_value) |
| { |
| switch (other_value.template_selection) { |
| case SPECIFIC_VALUE: |
| single_value.n_elements = other_value.single_value.n_elements; |
| single_value.value_elements = (Integers_template**)allocate_pointers(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (UNINITIALIZED_TEMPLATE != other_value.single_value.value_elements[elem_count]->get_selection()) { |
| single_value.value_elements[elem_count] = new Integers_template(*other_value.single_value.value_elements[elem_count]); |
| } else { |
| single_value.value_elements[elem_count] = new Integers_template; |
| } |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new Integer__array_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; |
| default: |
| TTCN_error("Copying an uninitialized/unsupported template of type @General_Types.Integer_array."); |
| break; |
| } |
| set_selection(other_value); |
| } |
| |
| boolean Integer__array_template::match_function_specific(const Base_Type *value_ptr, int value_index, const Restricted_Length_Template *template_ptr, int template_index, boolean legacy) |
| { |
| if (value_index >= 0) return ((const Integer__array_template*)template_ptr)->single_value.value_elements[template_index]->match((*(const Integer__array*)value_ptr)[value_index], legacy); |
| else return ((const Integer__array_template*)template_ptr)->single_value.value_elements[template_index]->is_any_or_omit(); |
| } |
| |
| Integer__array_template::Integer__array_template() |
| { |
| } |
| |
| Integer__array_template::Integer__array_template(template_sel other_value) |
| : Record_Of_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| Integer__array_template::Integer__array_template(null_type) |
| : Record_Of_Template(SPECIFIC_VALUE) |
| { |
| single_value.n_elements = 0; |
| single_value.value_elements = NULL; |
| } |
| |
| Integer__array_template::Integer__array_template(const Integer__array& other_value) |
| { |
| copy_value(other_value); |
| } |
| |
| Integer__array_template::Integer__array_template(const OPTIONAL<Integer__array>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const Integer__array&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of type @General_Types.Integer_array from an unbound optional field."); |
| } |
| } |
| |
| Integer__array_template::Integer__array_template(const Integer__array_template& other_value) |
| : Record_Of_Template() |
| { |
| copy_template(other_value); |
| } |
| |
| Integer__array_template::~Integer__array_template() |
| { |
| clean_up(); |
| } |
| |
| void Integer__array_template::clean_up() |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| delete single_value.value_elements[elem_count]; |
| free_pointers((void**)single_value.value_elements); |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| delete [] value_list.list_value; |
| default: |
| break; |
| } |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| Integer__array_template& Integer__array_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| Integer__array_template& Integer__array_template::operator=(null_type) |
| { |
| clean_up(); |
| set_selection(SPECIFIC_VALUE); |
| single_value.n_elements = 0; |
| single_value.value_elements = NULL; |
| return *this; |
| } |
| |
| Integer__array_template& Integer__array_template::operator=(const Integer__array& other_value) |
| { |
| clean_up(); |
| copy_value(other_value); |
| return *this; |
| } |
| |
| Integer__array_template& Integer__array_template::operator=(const OPTIONAL<Integer__array>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const Integer__array&)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 @General_Types.Integer_array."); |
| } |
| return *this; |
| } |
| |
| Integer__array_template& Integer__array_template::operator=(const Integer__array_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| Integers_template& Integer__array_template::operator[](int index_value) |
| { |
| if (index_value < 0) TTCN_error("Accessing an element of a template for type @General_Types.Integer_array using a negative index: %d.", index_value); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: |
| if(index_value < single_value.n_elements) break; |
| // no break |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| case UNINITIALIZED_TEMPLATE: |
| set_size(index_value + 1); |
| break; |
| default: |
| TTCN_error("Accessing an element of a non-specific template for type @General_Types.Integer_array."); |
| break; |
| } |
| return *single_value.value_elements[index_value]; |
| } |
| |
| Integers_template& Integer__array_template::operator[](const INTEGER& index_value) |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a template of type @General_Types.Integer_array."); |
| return (*this)[(int)index_value]; |
| } |
| |
| const Integers_template& Integer__array_template::operator[](int index_value) const |
| { |
| if (index_value < 0) TTCN_error("Accessing an element of a template for type @General_Types.Integer_array using a negative index: %d.", index_value); |
| if (template_selection != SPECIFIC_VALUE) TTCN_error("Accessing an element of a non-specific template for type @General_Types.Integer_array."); |
| if (index_value >= single_value.n_elements) TTCN_error("Index overflow in a template of type @General_Types.Integer_array: The index is %d, but the template has only %d elements.", index_value, single_value.n_elements); |
| return *single_value.value_elements[index_value]; |
| } |
| |
| const Integers_template& Integer__array_template::operator[](const INTEGER& index_value) const |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a template of type @General_Types.Integer_array."); |
| return (*this)[(int)index_value]; |
| } |
| |
| void Integer__array_template::set_size(int new_size) |
| { |
| if (new_size < 0) TTCN_error("Internal error: Setting a negative size for a template of type @General_Types.Integer_array."); |
| template_sel old_selection = template_selection; |
| if (old_selection != SPECIFIC_VALUE) { |
| clean_up(); |
| set_selection(SPECIFIC_VALUE); |
| single_value.n_elements = 0; |
| single_value.value_elements = NULL; |
| } |
| if (new_size > single_value.n_elements) { |
| single_value.value_elements = (Integers_template**)reallocate_pointers((void**)single_value.value_elements, single_value.n_elements, new_size); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) { |
| for (int elem_count = single_value.n_elements; elem_count < new_size; elem_count++) |
| single_value.value_elements[elem_count] = new Integers_template(ANY_VALUE); |
| } else { |
| for (int elem_count = single_value.n_elements; elem_count < new_size; elem_count++) |
| single_value.value_elements[elem_count] = new Integers_template; |
| } |
| single_value.n_elements = new_size; |
| } else if (new_size < single_value.n_elements) { |
| for (int elem_count = new_size; elem_count < single_value.n_elements; elem_count++) |
| delete single_value.value_elements[elem_count]; |
| single_value.value_elements = (Integers_template**)reallocate_pointers((void**)single_value.value_elements, single_value.n_elements, new_size); |
| single_value.n_elements = new_size; |
| } |
| } |
| |
| int Integer__array_template::n_elem() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| return single_value.n_elements; |
| break; |
| case VALUE_LIST: |
| return value_list.n_values; |
| break; |
| default: |
| TTCN_error("Performing n_elem"); |
| } |
| } |
| |
| int Integer__array_template::size_of(boolean is_size) const |
| { |
| const char* op_name = is_size ? "size" : "length"; |
| int min_size; |
| boolean has_any_or_none; |
| if (is_ifpresent) TTCN_error("Performing %sof() operation on a template of type @General_Types.Integer_array which has an ifpresent attribute.", op_name); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: { |
| min_size = 0; |
| has_any_or_none = FALSE; |
| int elem_count = single_value.n_elements; |
| if (!is_size) { while (elem_count>0 && !single_value.value_elements[elem_count-1]->is_bound()) elem_count--; } |
| for (int i=0; i<elem_count; i++) { |
| switch (single_value.value_elements[i]->get_selection()) { |
| case OMIT_VALUE: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.Integer_array containing omit element.", op_name); |
| case ANY_OR_OMIT: |
| has_any_or_none = TRUE; |
| break; |
| default: |
| min_size++; |
| break; |
| } |
| } |
| } break; |
| case OMIT_VALUE: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.Integer_array containing omit value.", op_name); |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| min_size = 0; |
| has_any_or_none = TRUE; |
| break; |
| case VALUE_LIST: |
| { |
| if (value_list.n_values<1) |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.Integer_array containing an empty list.", op_name); |
| int item_size = value_list.list_value[0].size_of(is_size); |
| for (unsigned int i = 1; i < value_list.n_values; i++) { |
| if (value_list.list_value[i].size_of(is_size)!=item_size) |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.Integer_array containing a value list with different sizes.", op_name); |
| } |
| min_size = item_size; |
| has_any_or_none = FALSE; |
| break; |
| } |
| case COMPLEMENTED_LIST: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.Integer_array containing complemented list.", op_name); |
| default: |
| TTCN_error("Performing %sof() operation on an uninitialized/unsupported template of type @General_Types.Integer_array.", op_name); |
| } |
| return check_section_is_single(min_size, has_any_or_none, op_name, "a", "template of type @General_Types.Integer_array"); |
| } |
| |
| boolean Integer__array_template::match(const Integer__array& other_value, boolean legacy) const |
| { |
| if (!other_value.is_bound()) return FALSE; |
| int value_length = other_value.size_of(); |
| if (!match_length(value_length)) return FALSE; |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| return match_record_of(&other_value, value_length, this, single_value.n_elements, match_function_specific, legacy); |
| case OMIT_VALUE: |
| return FALSE; |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| 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; |
| default: |
| TTCN_error("Matching with an uninitialized/unsupported template of type @General_Types.Integer_array."); |
| } |
| return FALSE; |
| } |
| |
| boolean Integer__array_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| if (!single_value.value_elements[elem_count]->is_value()) return FALSE; |
| return TRUE; |
| } |
| |
| Integer__array Integer__array_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 @General_Types.Integer_array."); |
| Integer__array ret_val; |
| ret_val.set_size(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| if (single_value.value_elements[elem_count]->is_bound()) { |
| ret_val[elem_count] = single_value.value_elements[elem_count]->valueof(); |
| } |
| return ret_val; |
| } |
| |
| Integer__array Integer__array_template::substr(int index, int returncount) const |
| { |
| if (!is_value()) TTCN_error("The first argument of function substr() is a template with non-specific value."); |
| return valueof().substr(index, returncount); |
| } |
| |
| Integer__array Integer__array_template::replace(int index, int len, const Integer__array_template& repl) const |
| { |
| if (!is_value()) TTCN_error("The first argument of function replace() is a template with non-specific value."); |
| if (!repl.is_value()) TTCN_error("The fourth argument of function replace() is a template with non-specific value."); |
| return valueof().replace(index, len, repl.valueof()); |
| } |
| |
| Integer__array Integer__array_template::replace(int index, int len, const Integer__array& repl) const |
| { |
| if (!is_value()) TTCN_error("The first argument of function replace() is a template with non-specific value."); |
| return valueof().replace(index, len, repl); |
| } |
| |
| void Integer__array_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| clean_up(); |
| switch (template_type) { |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = list_length; |
| value_list.list_value = new Integer__array_template[list_length]; |
| break; |
| default: |
| TTCN_error("Internal error: Setting an invalid type for a template of type @General_Types.Integer_array."); |
| } |
| set_selection(template_type); |
| } |
| |
| Integer__array_template& Integer__array_template::list_item(unsigned int list_index) |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) TTCN_error("Internal error: Accessing a list element of a non-list template of type @General_Types.Integer_array."); |
| if (list_index >= value_list.n_values) TTCN_error("Internal error: Index overflow in a value list template of type @General_Types.Integer_array."); |
| return value_list.list_value[list_index]; |
| } |
| |
| void Integer__array_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| if (single_value.n_elements > 0) { |
| TTCN_Logger::log_event_str("{ "); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (elem_count > 0) TTCN_Logger::log_event_str(", "); |
| if (permutation_starts_at(elem_count)) TTCN_Logger::log_event_str("permutation("); |
| single_value.value_elements[elem_count]->log(); |
| if (permutation_ends_at(elem_count)) TTCN_Logger::log_char(')'); |
| } |
| TTCN_Logger::log_event_str(" }"); |
| } else TTCN_Logger::log_event_str("{ }"); |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| 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; |
| default: |
| log_generic(); |
| } |
| log_restricted(); |
| log_ifpresent(); |
| } |
| |
| void Integer__array_template::log_match(const Integer__array& 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 && single_value.n_elements > 0 && get_number_of_permutations() == 0 && single_value.n_elements == match_value.size_of()) { |
| size_t previous_size = TTCN_Logger::get_logmatch_buffer_len(); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if(!single_value.value_elements[elem_count]->match(match_value[elem_count], legacy)){ |
| TTCN_Logger::log_logmatch_info("[%d]", elem_count); |
| single_value.value_elements[elem_count]->log_match(match_value[elem_count], legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| } |
| log_match_length(single_value.n_elements); |
| } 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 && single_value.n_elements > 0 && get_number_of_permutations() == 0 && single_value.n_elements == match_value.size_of()) { |
| TTCN_Logger::log_event_str("{ "); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (elem_count > 0) TTCN_Logger::log_event_str(", "); |
| single_value.value_elements[elem_count]->log_match(match_value[elem_count], legacy); |
| } |
| TTCN_Logger::log_event_str(" }"); |
| log_match_length(single_value.n_elements); |
| } 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 Integer__array_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_permutation(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| text_buf.push_int(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| single_value.value_elements[elem_count]->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 @General_Types.Integer_array."); |
| } |
| } |
| |
| void Integer__array_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_permutation(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value.n_elements = text_buf.pull_int().get_val(); |
| if (single_value.n_elements < 0) TTCN_error("Text decoder: Negative size was received for a template of type @General_Types.Integer_array."); |
| single_value.value_elements = (Integers_template**)allocate_pointers(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| single_value.value_elements[elem_count] = new Integers_template; |
| single_value.value_elements[elem_count]->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 Integer__array_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 for a template of type @General_Types.Integer_array."); |
| } |
| } |
| |
| boolean Integer__array_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean Integer__array_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int i=0; i<value_list.n_values; i++) |
| if (value_list.list_value[i].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| void Integer__array_template::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_TEMPLATE|Module_Param::BC_LIST, "record of 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: { |
| Integer__array_template temp; |
| temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); |
| for (size_t p_i=0; p_i<param.get_size(); p_i++) { |
| temp.list_item(p_i).set_param(*param.get_elem(p_i)); |
| } |
| *this = temp; |
| break; } |
| case Module_Param::MP_Indexed_List: |
| if (template_selection!=SPECIFIC_VALUE) set_size(0); |
| for (size_t p_i=0; p_i<param.get_size(); ++p_i) { |
| (*this)[(int)(param.get_elem(p_i)->get_id()->get_index())].set_param(*param.get_elem(p_i)); |
| } |
| break; |
| case Module_Param::MP_Value_List: { |
| set_size(param.get_size()); |
| int curr_idx = 0; |
| for (size_t p_i=0; p_i<param.get_size(); ++p_i) { |
| switch (param.get_elem(p_i)->get_type()) { |
| case Module_Param::MP_NotUsed: |
| curr_idx++; |
| break; |
| case Module_Param::MP_Permutation_Template: { |
| int perm_start_idx = curr_idx; |
| Module_Param* param_i = param.get_elem(p_i); |
| for (size_t perm_i=0; perm_i<param_i->get_size(); perm_i++) { |
| (*this)[curr_idx].set_param(*(param_i->get_elem(perm_i))); |
| curr_idx++; |
| } |
| int perm_end_idx = curr_idx - 1; |
| add_permutation(perm_start_idx, perm_end_idx); |
| } break; |
| default: |
| (*this)[curr_idx].set_param(*param.get_elem(p_i)); |
| curr_idx++; |
| } |
| } |
| } break; |
| default: |
| param.type_error("record of template", "@General_Types.Integer_array"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| set_length_range(param); |
| } |
| |
| void Integer__array_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; |
| for (int i=0; i<single_value.n_elements; i++) single_value.value_elements[i]->check_restriction(t_res, t_name ? t_name : "@General_Types.Integer_array"); |
| 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 : "@General_Types.Integer_array"); |
| } |
| |
| boolean Integer__array_template::get_istemplate_kind(const char* type) const { |
| if (!strcmp(type, "AnyElement")) { |
| if (template_selection != SPECIFIC_VALUE) { |
| return FALSE; |
| } |
| for (int i = 0; i < single_value.n_elements; i++) { |
| if (single_value.value_elements[i]->get_selection() == ANY_VALUE) { |
| return TRUE; |
| } |
| } |
| return FALSE; |
| } else if (!strcmp(type, "AnyElementsOrNone")) { |
| if (template_selection != SPECIFIC_VALUE) { |
| return FALSE; |
| } |
| for (int i = 0; i < single_value.n_elements; i++) { |
| if (single_value.value_elements[i]->get_selection() == ANY_OR_OMIT) { |
| return TRUE; |
| } |
| } |
| return FALSE; |
| } else if (!strcmp(type, "permutation")) { |
| return number_of_permutations; |
| } else if (!strcmp(type, "length")) { |
| return length_restriction_type != NO_LENGTH_RESTRICTION; |
| } else { |
| return Base_Template::get_istemplate_kind(type); |
| } |
| } |
| |
| const VERDICTTYPE Verdicttypes::UNBOUND_ELEM; |
| Verdicttypes::Verdicttypes() |
| { |
| val_ptr = NULL; |
| } |
| |
| Verdicttypes::Verdicttypes(null_type) |
| { |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| } |
| |
| Verdicttypes::Verdicttypes(const Verdicttypes& other_value) |
| { |
| if (!other_value.is_bound()) TTCN_error("Copying an unbound value of type @General_Types.Verdicttypes."); |
| val_ptr = other_value.val_ptr; |
| val_ptr->ref_count++; |
| } |
| |
| Verdicttypes::~Verdicttypes() |
| { |
| clean_up(); |
| if (val_ptr != NULL) val_ptr = NULL; |
| } |
| |
| void Verdicttypes::clean_up() |
| { |
| if (val_ptr != NULL) { |
| if (val_ptr->ref_count > 1) { |
| val_ptr->ref_count--; |
| val_ptr = NULL; |
| } |
| else if (val_ptr->ref_count == 1) { |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; |
| elem_count++) |
| if (val_ptr->value_elements[elem_count] != NULL) |
| delete val_ptr->value_elements[elem_count]; |
| free_pointers((void**)val_ptr->value_elements); |
| delete val_ptr; |
| val_ptr = NULL; |
| } |
| else |
| TTCN_error("Internal error: Invalid reference counter in a record of/set of value."); |
| } |
| } |
| |
| Verdicttypes& Verdicttypes::operator=(null_type) |
| { |
| clean_up(); |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| return *this; |
| } |
| |
| Verdicttypes& Verdicttypes::operator=(const Verdicttypes& other_value) |
| { |
| if (other_value.val_ptr == NULL) TTCN_error("Assigning an unbound value of type @General_Types.Verdicttypes."); |
| if (this != &other_value) { |
| clean_up(); |
| val_ptr = other_value.val_ptr; |
| val_ptr->ref_count++; |
| } |
| return *this; |
| } |
| |
| boolean Verdicttypes::operator==(null_type) const |
| { |
| if (val_ptr == NULL) |
| TTCN_error("The left operand of comparison is an unbound value of type @General_Types.Verdicttypes."); |
| return val_ptr->n_elements == 0 ; |
| } |
| |
| boolean Verdicttypes::operator==(const Verdicttypes& other_value) const |
| { |
| if (val_ptr == NULL) TTCN_error("The left operand of comparison is an unbound value of type @General_Types.Verdicttypes."); |
| if (other_value.val_ptr == NULL) TTCN_error("The right operand of comparison is an unbound value of type @General_Types.Verdicttypes."); |
| if (val_ptr == other_value.val_ptr) return TRUE; |
| if (val_ptr->n_elements != (other_value.val_ptr)->n_elements) |
| return FALSE; |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++){ |
| if (val_ptr->value_elements[elem_count] != NULL){ |
| if ((other_value.val_ptr)->value_elements[elem_count] != NULL){ |
| if (*val_ptr->value_elements[elem_count] != *(other_value.val_ptr)->value_elements[elem_count]) return FALSE; |
| } else return FALSE; |
| } else { |
| if ((other_value.val_ptr)->value_elements[elem_count] != NULL) return FALSE; |
| } |
| } |
| return TRUE; |
| } |
| |
| VERDICTTYPE& Verdicttypes::operator[](int index_value) |
| { |
| if (index_value < 0) TTCN_error("Accessing an element of type @General_Types.Verdicttypes using a negative index: %d.", index_value); |
| if (val_ptr == NULL) { |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| } else if (val_ptr->ref_count > 1) { |
| struct recordof_setof_struct *new_val_ptr = new recordof_setof_struct; |
| new_val_ptr->ref_count = 1; |
| new_val_ptr->n_elements = (index_value >= val_ptr->n_elements) ? index_value + 1 : val_ptr->n_elements; |
| new_val_ptr->value_elements = (VERDICTTYPE**)allocate_pointers(new_val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++){ |
| if (val_ptr->value_elements[elem_count] != NULL){ |
| new_val_ptr->value_elements[elem_count] = new VERDICTTYPE(*(val_ptr->value_elements[elem_count])); |
| } |
| } |
| clean_up(); |
| val_ptr = new_val_ptr; |
| } |
| if (index_value >= val_ptr->n_elements) set_size(index_value + 1); |
| if (val_ptr->value_elements[index_value] == NULL) { |
| val_ptr->value_elements[index_value] = new VERDICTTYPE; |
| } |
| return *val_ptr->value_elements[index_value]; |
| } |
| |
| VERDICTTYPE& Verdicttypes::operator[](const INTEGER& index_value) |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a value of type @General_Types.Verdicttypes."); |
| return (*this)[(int)index_value]; |
| } |
| |
| const VERDICTTYPE& Verdicttypes::operator[](int index_value) const |
| { |
| if (val_ptr == NULL) |
| TTCN_error("Accessing an element in an unbound value of type @General_Types.Verdicttypes."); |
| if (index_value < 0) TTCN_error("Accessing an element of type @General_Types.Verdicttypes using a negative index: %d.", index_value); |
| if (index_value >= val_ptr->n_elements) TTCN_error("Index overflow in a value of type @General_Types.Verdicttypes: The index is %d, but the value has only %d elements.", index_value, val_ptr->n_elements); |
| return (val_ptr->value_elements[index_value] == NULL) ? |
| UNBOUND_ELEM : *val_ptr->value_elements[index_value]; |
| } |
| |
| const VERDICTTYPE& Verdicttypes::operator[](const INTEGER& index_value) const |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a value of type @General_Types.Verdicttypes."); |
| return (*this)[(int)index_value]; |
| } |
| |
| Verdicttypes Verdicttypes::operator<<=(int rotate_count) const |
| { |
| return *this >>= (-rotate_count); |
| } |
| |
| Verdicttypes Verdicttypes::operator<<=(const INTEGER& rotate_count) const |
| { |
| rotate_count.must_bound("Unbound integer operand of rotate left operator."); |
| return *this >>= (int)(-rotate_count); |
| } |
| |
| Verdicttypes Verdicttypes::operator>>=(const INTEGER& rotate_count) const |
| { |
| rotate_count.must_bound("Unbound integer operand of rotate right operator."); |
| return *this >>= (int)rotate_count; |
| } |
| |
| Verdicttypes Verdicttypes::operator>>=(int rotate_count) const |
| { |
| if (val_ptr == NULL) TTCN_error("Performing rotation operation on an unbound value of type @General_Types.Verdicttypes."); |
| if (val_ptr->n_elements == 0) return *this; |
| int rc; |
| if (rotate_count>=0) rc = rotate_count % val_ptr->n_elements; |
| else rc = val_ptr->n_elements - ((-rotate_count) % val_ptr->n_elements); |
| if (rc == 0) return *this; |
| Verdicttypes ret_val; |
| ret_val.set_size(val_ptr->n_elements); |
| for (int i=0; i<val_ptr->n_elements; i++) { |
| if (val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[(i+rc)%val_ptr->n_elements] =new VERDICTTYPE(*val_ptr->value_elements[i]); |
| } |
| } |
| return ret_val; |
| } |
| |
| Verdicttypes Verdicttypes::operator+(const Verdicttypes& other_value) const |
| { |
| if (val_ptr == NULL || other_value.val_ptr == NULL) TTCN_error("Unbound operand of @General_Types.Verdicttypes concatenation."); |
| if (val_ptr->n_elements == 0) return other_value; |
| if (other_value.val_ptr->n_elements == 0) return *this; |
| Verdicttypes ret_val; |
| ret_val.set_size(val_ptr->n_elements+other_value.val_ptr->n_elements); |
| for (int i=0; i<val_ptr->n_elements; i++) { |
| if (val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i] = new VERDICTTYPE(*val_ptr->value_elements[i]); |
| } |
| } |
| for (int i=0; i<other_value.val_ptr->n_elements; i++) { |
| if (other_value.val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i+val_ptr->n_elements] = new VERDICTTYPE(*other_value.val_ptr->value_elements[i]); |
| } |
| } |
| return ret_val; |
| } |
| |
| Verdicttypes Verdicttypes::substr(int index, int returncount) const |
| { |
| if (val_ptr == NULL) TTCN_error("The first argument of substr() is an unbound value of type @General_Types.Verdicttypes."); |
| check_substr_arguments(val_ptr->n_elements, index, returncount, "@General_Types.Verdicttypes","element"); |
| Verdicttypes ret_val; |
| ret_val.set_size(returncount); |
| for (int i=0; i<returncount; i++) { |
| if (val_ptr->value_elements[i+index] != NULL) { |
| ret_val.val_ptr->value_elements[i] = new VERDICTTYPE(*val_ptr->value_elements[i+index]); |
| } |
| } |
| return ret_val; |
| } |
| |
| Verdicttypes Verdicttypes::replace(int index, int len, const Verdicttypes& repl) const |
| { |
| if (val_ptr == NULL) TTCN_error("The first argument of replace() is an unbound value of type @General_Types.Verdicttypes."); |
| if (repl.val_ptr == NULL) TTCN_error("The fourth argument of replace() is an unbound value of type @General_Types.Verdicttypes."); |
| check_replace_arguments(val_ptr->n_elements, index, len, "@General_Types.Verdicttypes","element"); |
| Verdicttypes ret_val; |
| ret_val.set_size(val_ptr->n_elements + repl.val_ptr->n_elements - len); |
| for (int i = 0; i < index; i++) { |
| if (val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i] = new VERDICTTYPE(*val_ptr->value_elements[i]); |
| } |
| } |
| for (int i = 0; i < repl.val_ptr->n_elements; i++) { |
| if (repl.val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i+index] = new VERDICTTYPE(*repl.val_ptr->value_elements[i]); |
| } |
| } |
| for (int i = 0; i < val_ptr->n_elements - index - len; i++) { |
| if (val_ptr->value_elements[index+i+len] != NULL) { |
| ret_val.val_ptr->value_elements[index+i+repl.val_ptr->n_elements] = new VERDICTTYPE(*val_ptr->value_elements[index+i+len]); |
| } |
| } |
| return ret_val; |
| } |
| |
| Verdicttypes Verdicttypes::replace(int index, int len, const Verdicttypes_template& repl) const |
| { |
| if (!repl.is_value()) TTCN_error("The fourth argument of function replace() is a template with non-specific value."); |
| return replace(index, len, repl.valueof()); |
| } |
| |
| void Verdicttypes::set_size(int new_size) |
| { |
| if (new_size < 0) TTCN_error("Internal error: Setting a negative size for a value of type @General_Types.Verdicttypes."); |
| if (val_ptr == NULL) { |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| } else if (val_ptr->ref_count > 1) { |
| struct recordof_setof_struct *new_val_ptr = new recordof_setof_struct; |
| new_val_ptr->ref_count = 1; |
| new_val_ptr->n_elements = (new_size < val_ptr->n_elements) ? new_size : val_ptr->n_elements; |
| new_val_ptr->value_elements = (VERDICTTYPE**)allocate_pointers(new_val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < new_val_ptr->n_elements; elem_count++) { |
| if (val_ptr->value_elements[elem_count] != NULL){ |
| new_val_ptr->value_elements[elem_count] = new VERDICTTYPE(*(val_ptr->value_elements[elem_count])); |
| } |
| } |
| clean_up(); |
| val_ptr = new_val_ptr; |
| } |
| if (new_size > val_ptr->n_elements) { |
| val_ptr->value_elements = (VERDICTTYPE**)reallocate_pointers((void**)val_ptr->value_elements, val_ptr->n_elements, new_size); |
| #ifdef TITAN_MEMORY_DEBUG_SET_RECORD_OF |
| if((val_ptr->n_elements/1000)!=(new_size/1000)) TTCN_warning("New size of type @General_Types.Verdicttypes: %d",new_size); |
| #endif |
| val_ptr->n_elements = new_size; |
| } else if (new_size < val_ptr->n_elements) { |
| for (int elem_count = new_size; elem_count < val_ptr->n_elements; elem_count++) |
| if (val_ptr->value_elements[elem_count] != NULL)delete val_ptr->value_elements[elem_count]; |
| val_ptr->value_elements = (VERDICTTYPE**)reallocate_pointers((void**)val_ptr->value_elements, val_ptr->n_elements, new_size); |
| val_ptr->n_elements = new_size; |
| } |
| } |
| |
| boolean Verdicttypes::is_value() const |
| { |
| if (val_ptr == NULL) return FALSE; |
| for(int i = 0; i < val_ptr->n_elements; ++i) { |
| if (val_ptr->value_elements[i] == NULL || !val_ptr->value_elements[i]->is_value()) return FALSE; |
| } |
| return TRUE; |
| } |
| |
| int Verdicttypes::size_of() const |
| { |
| if (val_ptr == NULL) TTCN_error("Performing sizeof operation on an unbound value of type @General_Types.Verdicttypes."); |
| return val_ptr->n_elements; |
| } |
| |
| int Verdicttypes::lengthof() const |
| { |
| if (val_ptr == NULL) TTCN_error("Performing lengthof operation on an unbound value of type @General_Types.Verdicttypes."); |
| for (int my_length=val_ptr->n_elements; my_length>0; my_length--) if (val_ptr->value_elements[my_length-1] != NULL) return my_length; |
| return 0; |
| } |
| |
| void Verdicttypes::log() const |
| { |
| if (val_ptr == NULL) {; |
| TTCN_Logger::log_event_unbound(); |
| return; |
| } |
| switch (val_ptr->n_elements) { |
| case 0: |
| TTCN_Logger::log_event_str("{ }"); |
| break; |
| default: |
| TTCN_Logger::log_event_str("{ "); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) { |
| if (elem_count > 0) TTCN_Logger::log_event_str(", "); |
| (*this)[elem_count].log(); |
| } |
| TTCN_Logger::log_event_str(" }"); |
| } |
| } |
| |
| void Verdicttypes::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE|Module_Param::BC_LIST, "record of value"); |
| switch (param.get_operation_type()) { |
| case Module_Param::OT_ASSIGN: |
| if (param.get_type()==Module_Param::MP_Value_List && param.get_size()==0) { |
| *this = NULL_VALUE; |
| return; |
| } |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: |
| set_size(param.get_size()); |
| for (size_t i=0; i<param.get_size(); ++i) { |
| Module_Param* const curr = param.get_elem(i); |
| if (curr->get_type()!=Module_Param::MP_NotUsed) { |
| (*this)[i].set_param(*curr); |
| if (!(*this)[i].is_bound()) { |
| delete val_ptr->value_elements[i]; |
| val_ptr->value_elements[i] = NULL; |
| } |
| } |
| } |
| break; |
| case Module_Param::MP_Indexed_List: |
| for (size_t i=0; i<param.get_size(); ++i) { |
| Module_Param* const curr = param.get_elem(i); |
| (*this)[curr->get_id()->get_index()].set_param(*curr); |
| if (!(*this)[curr->get_id()->get_index()].is_bound()) { |
| delete val_ptr->value_elements[curr->get_id()->get_index()]; |
| val_ptr->value_elements[curr->get_id()->get_index()] = NULL; |
| } |
| } |
| break; |
| default: |
| param.type_error("record of value", "@General_Types.Verdicttypes"); |
| } |
| break; |
| case Module_Param::OT_CONCAT: |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: { |
| if (!is_bound()) *this = NULL_VALUE; |
| int start_idx = lengthof(); |
| for (size_t i=0; i<param.get_size(); ++i) { |
| Module_Param* const curr = param.get_elem(i); |
| if ((curr->get_type()!=Module_Param::MP_NotUsed)) { |
| (*this)[start_idx+(int)i].set_param(*curr); |
| } |
| } |
| } break; |
| case Module_Param::MP_Indexed_List: |
| param.error("Cannot concatenate an indexed value list"); |
| break; |
| default: |
| param.type_error("record of value", "@General_Types.Verdicttypes"); |
| } |
| break; |
| default: |
| TTCN_error("Internal error: Unknown operation type."); |
| } |
| } |
| |
| void Verdicttypes::set_implicit_omit() |
| { |
| if (val_ptr == NULL) return; |
| for (int i = 0; i < val_ptr->n_elements; i++) { |
| if (val_ptr->value_elements[i] != NULL) val_ptr->value_elements[i]->set_implicit_omit(); |
| } |
| } |
| |
| void Verdicttypes::encode_text(Text_Buf& text_buf) const |
| { |
| if (val_ptr == NULL) TTCN_error("Text encoder: Encoding an unbound value of type @General_Types.Verdicttypes."); |
| text_buf.push_int(val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) |
| (*this)[elem_count].encode_text(text_buf); |
| } |
| |
| void Verdicttypes::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = text_buf.pull_int().get_val(); |
| if (val_ptr->n_elements < 0) TTCN_error("Text decoder: Negative size was received for a value of type @General_Types.Verdicttypes."); |
| val_ptr->value_elements = (VERDICTTYPE**)allocate_pointers(val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) { |
| val_ptr->value_elements[elem_count] = new VERDICTTYPE; |
| val_ptr->value_elements[elem_count]->decode_text(text_buf); |
| } |
| } |
| |
| void Verdicttypes::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t 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); |
| 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;} |
| default: |
| TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| void Verdicttypes::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t 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(); |
| if(b_data[p_buf.get_len()-1]!='\0'){ |
| 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); |
| 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)<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;} |
| default: |
| TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| int Verdicttypes::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean /*no_err*/, int sel_field, boolean first_call, const RAW_Force_Omit*){ |
| int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding); |
| limit-=prepaddlength; |
| int decoded_length=0; |
| int decoded_field_length=0; |
| size_t start_of_field=0; |
| if(first_call) { |
| clean_up(); |
| val_ptr=new recordof_setof_struct; |
| val_ptr->ref_count=1; |
| val_ptr->n_elements=0; |
| val_ptr->value_elements=NULL; |
| } |
| int start_field=val_ptr->n_elements; |
| if(p_td.raw->fieldlength || sel_field!=-1){ |
| int a=0; |
| if(sel_field==-1) sel_field=p_td.raw->fieldlength; |
| for(a=0;a<sel_field;a++){ |
| decoded_field_length=(*this)[a+start_field].RAW_decode(*p_td.oftype_descr,p_buf,limit,top_bit_ord,TRUE); |
| if(decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| } |
| if(a==0) val_ptr->n_elements=0; |
| } else { |
| if(limit==0){ |
| if(!first_call) return -1; |
| val_ptr->n_elements=0; |
| return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength; |
| } |
| int a=start_field; |
| while(limit>0){ |
| start_of_field=p_buf.get_pos_bit(); |
| decoded_field_length=(*this)[a].RAW_decode(*p_td.oftype_descr,p_buf,limit,top_bit_ord,TRUE); |
| if(decoded_field_length < 0){ |
| delete &(*this)[a]; |
| val_ptr->n_elements--; |
| p_buf.set_pos_bit(start_of_field); |
| if(a>start_field){ |
| return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength; |
| } else return -1; |
| } |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| a++; |
| } |
| } |
| return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength; |
| } |
| |
| int Verdicttypes::RAW_encode(const TTCN_Typedescriptor_t& p_td,RAW_enc_tree& myleaf) const{ |
| int encoded_length=0; |
| int encoded_num_of_records=p_td.raw->fieldlength?smaller(val_ptr->n_elements, p_td.raw->fieldlength):val_ptr->n_elements; |
| myleaf.isleaf=FALSE; |
| myleaf.rec_of=TRUE; |
| myleaf.body.node.num_of_nodes=encoded_num_of_records; |
| myleaf.body.node.nodes=init_nodes_of_enc_tree(encoded_num_of_records); |
| for(int a=0;a<encoded_num_of_records;a++){ |
| myleaf.body.node.nodes[a]=new RAW_enc_tree(TRUE,&myleaf,&(myleaf.curr_pos),a,p_td.oftype_descr->raw); |
| encoded_length+=(*this)[a].RAW_encode(*p_td.oftype_descr,*myleaf.body.node.nodes[a]); |
| } |
| return myleaf.length=encoded_length; |
| } |
| |
| void Verdicttypes_template::copy_value(const Verdicttypes& other_value) |
| { |
| if (!other_value.is_bound()) TTCN_error("Initialization of a template of type @General_Types.Verdicttypes with an unbound value."); |
| single_value.n_elements = other_value.size_of(); |
| single_value.value_elements = (VERDICTTYPE_template**)allocate_pointers(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (other_value[elem_count].is_bound()) { |
| single_value.value_elements[elem_count] = new VERDICTTYPE_template(other_value[elem_count]); |
| } else { |
| single_value.value_elements[elem_count] = new VERDICTTYPE_template; |
| } |
| } |
| set_selection(SPECIFIC_VALUE); |
| } |
| |
| void Verdicttypes_template::copy_template(const Verdicttypes_template& other_value) |
| { |
| switch (other_value.template_selection) { |
| case SPECIFIC_VALUE: |
| single_value.n_elements = other_value.single_value.n_elements; |
| single_value.value_elements = (VERDICTTYPE_template**)allocate_pointers(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (UNINITIALIZED_TEMPLATE != other_value.single_value.value_elements[elem_count]->get_selection()) { |
| single_value.value_elements[elem_count] = new VERDICTTYPE_template(*other_value.single_value.value_elements[elem_count]); |
| } else { |
| single_value.value_elements[elem_count] = new VERDICTTYPE_template; |
| } |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new Verdicttypes_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; |
| default: |
| TTCN_error("Copying an uninitialized/unsupported template of type @General_Types.Verdicttypes."); |
| break; |
| } |
| set_selection(other_value); |
| } |
| |
| boolean Verdicttypes_template::match_function_specific(const Base_Type *value_ptr, int value_index, const Restricted_Length_Template *template_ptr, int template_index, boolean legacy) |
| { |
| if (value_index >= 0) return ((const Verdicttypes_template*)template_ptr)->single_value.value_elements[template_index]->match((*(const Verdicttypes*)value_ptr)[value_index], legacy); |
| else return ((const Verdicttypes_template*)template_ptr)->single_value.value_elements[template_index]->is_any_or_omit(); |
| } |
| |
| Verdicttypes_template::Verdicttypes_template() |
| { |
| } |
| |
| Verdicttypes_template::Verdicttypes_template(template_sel other_value) |
| : Record_Of_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| Verdicttypes_template::Verdicttypes_template(null_type) |
| : Record_Of_Template(SPECIFIC_VALUE) |
| { |
| single_value.n_elements = 0; |
| single_value.value_elements = NULL; |
| } |
| |
| Verdicttypes_template::Verdicttypes_template(const Verdicttypes& other_value) |
| { |
| copy_value(other_value); |
| } |
| |
| Verdicttypes_template::Verdicttypes_template(const OPTIONAL<Verdicttypes>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const Verdicttypes&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of type @General_Types.Verdicttypes from an unbound optional field."); |
| } |
| } |
| |
| Verdicttypes_template::Verdicttypes_template(const Verdicttypes_template& other_value) |
| : Record_Of_Template() |
| { |
| copy_template(other_value); |
| } |
| |
| Verdicttypes_template::~Verdicttypes_template() |
| { |
| clean_up(); |
| } |
| |
| void Verdicttypes_template::clean_up() |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| delete single_value.value_elements[elem_count]; |
| free_pointers((void**)single_value.value_elements); |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| delete [] value_list.list_value; |
| default: |
| break; |
| } |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| Verdicttypes_template& Verdicttypes_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| Verdicttypes_template& Verdicttypes_template::operator=(null_type) |
| { |
| clean_up(); |
| set_selection(SPECIFIC_VALUE); |
| single_value.n_elements = 0; |
| single_value.value_elements = NULL; |
| return *this; |
| } |
| |
| Verdicttypes_template& Verdicttypes_template::operator=(const Verdicttypes& other_value) |
| { |
| clean_up(); |
| copy_value(other_value); |
| return *this; |
| } |
| |
| Verdicttypes_template& Verdicttypes_template::operator=(const OPTIONAL<Verdicttypes>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const Verdicttypes&)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 @General_Types.Verdicttypes."); |
| } |
| return *this; |
| } |
| |
| Verdicttypes_template& Verdicttypes_template::operator=(const Verdicttypes_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| VERDICTTYPE_template& Verdicttypes_template::operator[](int index_value) |
| { |
| if (index_value < 0) TTCN_error("Accessing an element of a template for type @General_Types.Verdicttypes using a negative index: %d.", index_value); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: |
| if(index_value < single_value.n_elements) break; |
| // no break |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| case UNINITIALIZED_TEMPLATE: |
| set_size(index_value + 1); |
| break; |
| default: |
| TTCN_error("Accessing an element of a non-specific template for type @General_Types.Verdicttypes."); |
| break; |
| } |
| return *single_value.value_elements[index_value]; |
| } |
| |
| VERDICTTYPE_template& Verdicttypes_template::operator[](const INTEGER& index_value) |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a template of type @General_Types.Verdicttypes."); |
| return (*this)[(int)index_value]; |
| } |
| |
| const VERDICTTYPE_template& Verdicttypes_template::operator[](int index_value) const |
| { |
| if (index_value < 0) TTCN_error("Accessing an element of a template for type @General_Types.Verdicttypes using a negative index: %d.", index_value); |
| if (template_selection != SPECIFIC_VALUE) TTCN_error("Accessing an element of a non-specific template for type @General_Types.Verdicttypes."); |
| if (index_value >= single_value.n_elements) TTCN_error("Index overflow in a template of type @General_Types.Verdicttypes: The index is %d, but the template has only %d elements.", index_value, single_value.n_elements); |
| return *single_value.value_elements[index_value]; |
| } |
| |
| const VERDICTTYPE_template& Verdicttypes_template::operator[](const INTEGER& index_value) const |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a template of type @General_Types.Verdicttypes."); |
| return (*this)[(int)index_value]; |
| } |
| |
| void Verdicttypes_template::set_size(int new_size) |
| { |
| if (new_size < 0) TTCN_error("Internal error: Setting a negative size for a template of type @General_Types.Verdicttypes."); |
| template_sel old_selection = template_selection; |
| if (old_selection != SPECIFIC_VALUE) { |
| clean_up(); |
| set_selection(SPECIFIC_VALUE); |
| single_value.n_elements = 0; |
| single_value.value_elements = NULL; |
| } |
| if (new_size > single_value.n_elements) { |
| single_value.value_elements = (VERDICTTYPE_template**)reallocate_pointers((void**)single_value.value_elements, single_value.n_elements, new_size); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) { |
| for (int elem_count = single_value.n_elements; elem_count < new_size; elem_count++) |
| single_value.value_elements[elem_count] = new VERDICTTYPE_template(ANY_VALUE); |
| } else { |
| for (int elem_count = single_value.n_elements; elem_count < new_size; elem_count++) |
| single_value.value_elements[elem_count] = new VERDICTTYPE_template; |
| } |
| single_value.n_elements = new_size; |
| } else if (new_size < single_value.n_elements) { |
| for (int elem_count = new_size; elem_count < single_value.n_elements; elem_count++) |
| delete single_value.value_elements[elem_count]; |
| single_value.value_elements = (VERDICTTYPE_template**)reallocate_pointers((void**)single_value.value_elements, single_value.n_elements, new_size); |
| single_value.n_elements = new_size; |
| } |
| } |
| |
| int Verdicttypes_template::n_elem() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| return single_value.n_elements; |
| break; |
| case VALUE_LIST: |
| return value_list.n_values; |
| break; |
| default: |
| TTCN_error("Performing n_elem"); |
| } |
| } |
| |
| int Verdicttypes_template::size_of(boolean is_size) const |
| { |
| const char* op_name = is_size ? "size" : "length"; |
| int min_size; |
| boolean has_any_or_none; |
| if (is_ifpresent) TTCN_error("Performing %sof() operation on a template of type @General_Types.Verdicttypes which has an ifpresent attribute.", op_name); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: { |
| min_size = 0; |
| has_any_or_none = FALSE; |
| int elem_count = single_value.n_elements; |
| if (!is_size) { while (elem_count>0 && !single_value.value_elements[elem_count-1]->is_bound()) elem_count--; } |
| for (int i=0; i<elem_count; i++) { |
| switch (single_value.value_elements[i]->get_selection()) { |
| case OMIT_VALUE: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.Verdicttypes containing omit element.", op_name); |
| case ANY_OR_OMIT: |
| has_any_or_none = TRUE; |
| break; |
| default: |
| min_size++; |
| break; |
| } |
| } |
| } break; |
| case OMIT_VALUE: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.Verdicttypes containing omit value.", op_name); |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| min_size = 0; |
| has_any_or_none = TRUE; |
| break; |
| case VALUE_LIST: |
| { |
| if (value_list.n_values<1) |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.Verdicttypes containing an empty list.", op_name); |
| int item_size = value_list.list_value[0].size_of(is_size); |
| for (unsigned int i = 1; i < value_list.n_values; i++) { |
| if (value_list.list_value[i].size_of(is_size)!=item_size) |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.Verdicttypes containing a value list with different sizes.", op_name); |
| } |
| min_size = item_size; |
| has_any_or_none = FALSE; |
| break; |
| } |
| case COMPLEMENTED_LIST: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.Verdicttypes containing complemented list.", op_name); |
| default: |
| TTCN_error("Performing %sof() operation on an uninitialized/unsupported template of type @General_Types.Verdicttypes.", op_name); |
| } |
| return check_section_is_single(min_size, has_any_or_none, op_name, "a", "template of type @General_Types.Verdicttypes"); |
| } |
| |
| boolean Verdicttypes_template::match(const Verdicttypes& other_value, boolean legacy) const |
| { |
| if (!other_value.is_bound()) return FALSE; |
| int value_length = other_value.size_of(); |
| if (!match_length(value_length)) return FALSE; |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| return match_record_of(&other_value, value_length, this, single_value.n_elements, match_function_specific, legacy); |
| case OMIT_VALUE: |
| return FALSE; |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| 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; |
| default: |
| TTCN_error("Matching with an uninitialized/unsupported template of type @General_Types.Verdicttypes."); |
| } |
| return FALSE; |
| } |
| |
| boolean Verdicttypes_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| if (!single_value.value_elements[elem_count]->is_value()) return FALSE; |
| return TRUE; |
| } |
| |
| Verdicttypes Verdicttypes_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 @General_Types.Verdicttypes."); |
| Verdicttypes ret_val; |
| ret_val.set_size(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| if (single_value.value_elements[elem_count]->is_bound()) { |
| ret_val[elem_count] = single_value.value_elements[elem_count]->valueof(); |
| } |
| return ret_val; |
| } |
| |
| Verdicttypes Verdicttypes_template::substr(int index, int returncount) const |
| { |
| if (!is_value()) TTCN_error("The first argument of function substr() is a template with non-specific value."); |
| return valueof().substr(index, returncount); |
| } |
| |
| Verdicttypes Verdicttypes_template::replace(int index, int len, const Verdicttypes_template& repl) const |
| { |
| if (!is_value()) TTCN_error("The first argument of function replace() is a template with non-specific value."); |
| if (!repl.is_value()) TTCN_error("The fourth argument of function replace() is a template with non-specific value."); |
| return valueof().replace(index, len, repl.valueof()); |
| } |
| |
| Verdicttypes Verdicttypes_template::replace(int index, int len, const Verdicttypes& repl) const |
| { |
| if (!is_value()) TTCN_error("The first argument of function replace() is a template with non-specific value."); |
| return valueof().replace(index, len, repl); |
| } |
| |
| void Verdicttypes_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| clean_up(); |
| switch (template_type) { |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = list_length; |
| value_list.list_value = new Verdicttypes_template[list_length]; |
| break; |
| default: |
| TTCN_error("Internal error: Setting an invalid type for a template of type @General_Types.Verdicttypes."); |
| } |
| set_selection(template_type); |
| } |
| |
| Verdicttypes_template& Verdicttypes_template::list_item(unsigned int list_index) |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) TTCN_error("Internal error: Accessing a list element of a non-list template of type @General_Types.Verdicttypes."); |
| if (list_index >= value_list.n_values) TTCN_error("Internal error: Index overflow in a value list template of type @General_Types.Verdicttypes."); |
| return value_list.list_value[list_index]; |
| } |
| |
| void Verdicttypes_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| if (single_value.n_elements > 0) { |
| TTCN_Logger::log_event_str("{ "); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (elem_count > 0) TTCN_Logger::log_event_str(", "); |
| if (permutation_starts_at(elem_count)) TTCN_Logger::log_event_str("permutation("); |
| single_value.value_elements[elem_count]->log(); |
| if (permutation_ends_at(elem_count)) TTCN_Logger::log_char(')'); |
| } |
| TTCN_Logger::log_event_str(" }"); |
| } else TTCN_Logger::log_event_str("{ }"); |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| 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; |
| default: |
| log_generic(); |
| } |
| log_restricted(); |
| log_ifpresent(); |
| } |
| |
| void Verdicttypes_template::log_match(const Verdicttypes& 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 && single_value.n_elements > 0 && get_number_of_permutations() == 0 && single_value.n_elements == match_value.size_of()) { |
| size_t previous_size = TTCN_Logger::get_logmatch_buffer_len(); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if(!single_value.value_elements[elem_count]->match(match_value[elem_count], legacy)){ |
| TTCN_Logger::log_logmatch_info("[%d]", elem_count); |
| single_value.value_elements[elem_count]->log_match(match_value[elem_count], legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| } |
| log_match_length(single_value.n_elements); |
| } 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 && single_value.n_elements > 0 && get_number_of_permutations() == 0 && single_value.n_elements == match_value.size_of()) { |
| TTCN_Logger::log_event_str("{ "); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (elem_count > 0) TTCN_Logger::log_event_str(", "); |
| single_value.value_elements[elem_count]->log_match(match_value[elem_count], legacy); |
| } |
| TTCN_Logger::log_event_str(" }"); |
| log_match_length(single_value.n_elements); |
| } 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 Verdicttypes_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_permutation(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| text_buf.push_int(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| single_value.value_elements[elem_count]->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 @General_Types.Verdicttypes."); |
| } |
| } |
| |
| void Verdicttypes_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_permutation(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value.n_elements = text_buf.pull_int().get_val(); |
| if (single_value.n_elements < 0) TTCN_error("Text decoder: Negative size was received for a template of type @General_Types.Verdicttypes."); |
| single_value.value_elements = (VERDICTTYPE_template**)allocate_pointers(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| single_value.value_elements[elem_count] = new VERDICTTYPE_template; |
| single_value.value_elements[elem_count]->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 Verdicttypes_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 for a template of type @General_Types.Verdicttypes."); |
| } |
| } |
| |
| boolean Verdicttypes_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean Verdicttypes_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int i=0; i<value_list.n_values; i++) |
| if (value_list.list_value[i].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| void Verdicttypes_template::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_TEMPLATE|Module_Param::BC_LIST, "record of 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: { |
| Verdicttypes_template temp; |
| temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); |
| for (size_t p_i=0; p_i<param.get_size(); p_i++) { |
| temp.list_item(p_i).set_param(*param.get_elem(p_i)); |
| } |
| *this = temp; |
| break; } |
| case Module_Param::MP_Indexed_List: |
| if (template_selection!=SPECIFIC_VALUE) set_size(0); |
| for (size_t p_i=0; p_i<param.get_size(); ++p_i) { |
| (*this)[(int)(param.get_elem(p_i)->get_id()->get_index())].set_param(*param.get_elem(p_i)); |
| } |
| break; |
| case Module_Param::MP_Value_List: { |
| set_size(param.get_size()); |
| int curr_idx = 0; |
| for (size_t p_i=0; p_i<param.get_size(); ++p_i) { |
| switch (param.get_elem(p_i)->get_type()) { |
| case Module_Param::MP_NotUsed: |
| curr_idx++; |
| break; |
| case Module_Param::MP_Permutation_Template: { |
| int perm_start_idx = curr_idx; |
| Module_Param* param_i = param.get_elem(p_i); |
| for (size_t perm_i=0; perm_i<param_i->get_size(); perm_i++) { |
| (*this)[curr_idx].set_param(*(param_i->get_elem(perm_i))); |
| curr_idx++; |
| } |
| int perm_end_idx = curr_idx - 1; |
| add_permutation(perm_start_idx, perm_end_idx); |
| } break; |
| default: |
| (*this)[curr_idx].set_param(*param.get_elem(p_i)); |
| curr_idx++; |
| } |
| } |
| } break; |
| default: |
| param.type_error("record of template", "@General_Types.Verdicttypes"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| set_length_range(param); |
| } |
| |
| void Verdicttypes_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; |
| for (int i=0; i<single_value.n_elements; i++) single_value.value_elements[i]->check_restriction(t_res, t_name ? t_name : "@General_Types.Verdicttypes"); |
| 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 : "@General_Types.Verdicttypes"); |
| } |
| |
| boolean Verdicttypes_template::get_istemplate_kind(const char* type) const { |
| if (!strcmp(type, "AnyElement")) { |
| if (template_selection != SPECIFIC_VALUE) { |
| return FALSE; |
| } |
| for (int i = 0; i < single_value.n_elements; i++) { |
| if (single_value.value_elements[i]->get_selection() == ANY_VALUE) { |
| return TRUE; |
| } |
| } |
| return FALSE; |
| } else if (!strcmp(type, "AnyElementsOrNone")) { |
| if (template_selection != SPECIFIC_VALUE) { |
| return FALSE; |
| } |
| for (int i = 0; i < single_value.n_elements; i++) { |
| if (single_value.value_elements[i]->get_selection() == ANY_OR_OMIT) { |
| return TRUE; |
| } |
| } |
| return FALSE; |
| } else if (!strcmp(type, "permutation")) { |
| return number_of_permutations; |
| } else if (!strcmp(type, "length")) { |
| return length_restriction_type != NO_LENGTH_RESTRICTION; |
| } else { |
| return Base_Template::get_istemplate_kind(type); |
| } |
| } |
| |
| const VERDICTTYPE VerdicttypeSet::UNBOUND_ELEM; |
| boolean VerdicttypeSet::compare_function(const Base_Type *left_ptr, int left_index, const Base_Type *right_ptr, int right_index) |
| { |
| if (((const VerdicttypeSet*)left_ptr)->val_ptr == NULL) TTCN_error("The left operand of comparison is an unbound value of type @General_Types.VerdicttypeSet."); |
| if (((const VerdicttypeSet*)right_ptr)->val_ptr == NULL) TTCN_error("The right operand of comparison is an unbound value of type @General_Types.VerdicttypeSet."); |
| if (((const VerdicttypeSet*)left_ptr)->val_ptr->value_elements[left_index] != NULL){ |
| if (((const VerdicttypeSet*)right_ptr)->val_ptr->value_elements[right_index] != NULL){ |
| return *((const VerdicttypeSet*)left_ptr)->val_ptr->value_elements[left_index] == *((const VerdicttypeSet*)right_ptr)->val_ptr->value_elements[right_index]; |
| } else return FALSE; |
| } else { |
| return ((const VerdicttypeSet*)right_ptr)->val_ptr->value_elements[right_index] == NULL; |
| } |
| } |
| |
| VerdicttypeSet::VerdicttypeSet() |
| { |
| val_ptr = NULL; |
| } |
| |
| VerdicttypeSet::VerdicttypeSet(null_type) |
| { |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| } |
| |
| VerdicttypeSet::VerdicttypeSet(const VerdicttypeSet& other_value) |
| { |
| if (!other_value.is_bound()) TTCN_error("Copying an unbound value of type @General_Types.VerdicttypeSet."); |
| val_ptr = other_value.val_ptr; |
| val_ptr->ref_count++; |
| } |
| |
| VerdicttypeSet::~VerdicttypeSet() |
| { |
| clean_up(); |
| if (val_ptr != NULL) val_ptr = NULL; |
| } |
| |
| void VerdicttypeSet::clean_up() |
| { |
| if (val_ptr != NULL) { |
| if (val_ptr->ref_count > 1) { |
| val_ptr->ref_count--; |
| val_ptr = NULL; |
| } |
| else if (val_ptr->ref_count == 1) { |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; |
| elem_count++) |
| if (val_ptr->value_elements[elem_count] != NULL) |
| delete val_ptr->value_elements[elem_count]; |
| free_pointers((void**)val_ptr->value_elements); |
| delete val_ptr; |
| val_ptr = NULL; |
| } |
| else |
| TTCN_error("Internal error: Invalid reference counter in a record of/set of value."); |
| } |
| } |
| |
| VerdicttypeSet& VerdicttypeSet::operator=(null_type) |
| { |
| clean_up(); |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| return *this; |
| } |
| |
| VerdicttypeSet& VerdicttypeSet::operator=(const VerdicttypeSet& other_value) |
| { |
| if (other_value.val_ptr == NULL) TTCN_error("Assigning an unbound value of type @General_Types.VerdicttypeSet."); |
| if (this != &other_value) { |
| clean_up(); |
| val_ptr = other_value.val_ptr; |
| val_ptr->ref_count++; |
| } |
| return *this; |
| } |
| |
| boolean VerdicttypeSet::operator==(null_type) const |
| { |
| if (val_ptr == NULL) |
| TTCN_error("The left operand of comparison is an unbound value of type @General_Types.VerdicttypeSet."); |
| return val_ptr->n_elements == 0 ; |
| } |
| |
| boolean VerdicttypeSet::operator==(const VerdicttypeSet& other_value) const |
| { |
| if (val_ptr == NULL) TTCN_error("The left operand of comparison is an unbound value of type @General_Types.VerdicttypeSet."); |
| if (other_value.val_ptr == NULL) TTCN_error("The right operand of comparison is an unbound value of type @General_Types.VerdicttypeSet."); |
| if (val_ptr == other_value.val_ptr) return TRUE; |
| return compare_set_of(this, val_ptr->n_elements, &other_value, (other_value.val_ptr)->n_elements, compare_function); |
| } |
| |
| VERDICTTYPE& VerdicttypeSet::operator[](int index_value) |
| { |
| if (index_value < 0) TTCN_error("Accessing an element of type @General_Types.VerdicttypeSet using a negative index: %d.", index_value); |
| if (val_ptr == NULL) { |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| } else if (val_ptr->ref_count > 1) { |
| struct recordof_setof_struct *new_val_ptr = new recordof_setof_struct; |
| new_val_ptr->ref_count = 1; |
| new_val_ptr->n_elements = (index_value >= val_ptr->n_elements) ? index_value + 1 : val_ptr->n_elements; |
| new_val_ptr->value_elements = (VERDICTTYPE**)allocate_pointers(new_val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++){ |
| if (val_ptr->value_elements[elem_count] != NULL){ |
| new_val_ptr->value_elements[elem_count] = new VERDICTTYPE(*(val_ptr->value_elements[elem_count])); |
| } |
| } |
| clean_up(); |
| val_ptr = new_val_ptr; |
| } |
| if (index_value >= val_ptr->n_elements) set_size(index_value + 1); |
| if (val_ptr->value_elements[index_value] == NULL) { |
| val_ptr->value_elements[index_value] = new VERDICTTYPE; |
| } |
| return *val_ptr->value_elements[index_value]; |
| } |
| |
| VERDICTTYPE& VerdicttypeSet::operator[](const INTEGER& index_value) |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a value of type @General_Types.VerdicttypeSet."); |
| return (*this)[(int)index_value]; |
| } |
| |
| const VERDICTTYPE& VerdicttypeSet::operator[](int index_value) const |
| { |
| if (val_ptr == NULL) |
| TTCN_error("Accessing an element in an unbound value of type @General_Types.VerdicttypeSet."); |
| if (index_value < 0) TTCN_error("Accessing an element of type @General_Types.VerdicttypeSet using a negative index: %d.", index_value); |
| if (index_value >= val_ptr->n_elements) TTCN_error("Index overflow in a value of type @General_Types.VerdicttypeSet: The index is %d, but the value has only %d elements.", index_value, val_ptr->n_elements); |
| return (val_ptr->value_elements[index_value] == NULL) ? |
| UNBOUND_ELEM : *val_ptr->value_elements[index_value]; |
| } |
| |
| const VERDICTTYPE& VerdicttypeSet::operator[](const INTEGER& index_value) const |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a value of type @General_Types.VerdicttypeSet."); |
| return (*this)[(int)index_value]; |
| } |
| |
| VerdicttypeSet VerdicttypeSet::operator<<=(int rotate_count) const |
| { |
| return *this >>= (-rotate_count); |
| } |
| |
| VerdicttypeSet VerdicttypeSet::operator<<=(const INTEGER& rotate_count) const |
| { |
| rotate_count.must_bound("Unbound integer operand of rotate left operator."); |
| return *this >>= (int)(-rotate_count); |
| } |
| |
| VerdicttypeSet VerdicttypeSet::operator>>=(const INTEGER& rotate_count) const |
| { |
| rotate_count.must_bound("Unbound integer operand of rotate right operator."); |
| return *this >>= (int)rotate_count; |
| } |
| |
| VerdicttypeSet VerdicttypeSet::operator>>=(int rotate_count) const |
| { |
| if (val_ptr == NULL) TTCN_error("Performing rotation operation on an unbound value of type @General_Types.VerdicttypeSet."); |
| if (val_ptr->n_elements == 0) return *this; |
| int rc; |
| if (rotate_count>=0) rc = rotate_count % val_ptr->n_elements; |
| else rc = val_ptr->n_elements - ((-rotate_count) % val_ptr->n_elements); |
| if (rc == 0) return *this; |
| VerdicttypeSet ret_val; |
| ret_val.set_size(val_ptr->n_elements); |
| for (int i=0; i<val_ptr->n_elements; i++) { |
| if (val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[(i+rc)%val_ptr->n_elements] =new VERDICTTYPE(*val_ptr->value_elements[i]); |
| } |
| } |
| return ret_val; |
| } |
| |
| VerdicttypeSet VerdicttypeSet::operator+(const VerdicttypeSet& other_value) const |
| { |
| if (val_ptr == NULL || other_value.val_ptr == NULL) TTCN_error("Unbound operand of @General_Types.VerdicttypeSet concatenation."); |
| if (val_ptr->n_elements == 0) return other_value; |
| if (other_value.val_ptr->n_elements == 0) return *this; |
| VerdicttypeSet ret_val; |
| ret_val.set_size(val_ptr->n_elements+other_value.val_ptr->n_elements); |
| for (int i=0; i<val_ptr->n_elements; i++) { |
| if (val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i] = new VERDICTTYPE(*val_ptr->value_elements[i]); |
| } |
| } |
| for (int i=0; i<other_value.val_ptr->n_elements; i++) { |
| if (other_value.val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i+val_ptr->n_elements] = new VERDICTTYPE(*other_value.val_ptr->value_elements[i]); |
| } |
| } |
| return ret_val; |
| } |
| |
| VerdicttypeSet VerdicttypeSet::substr(int index, int returncount) const |
| { |
| if (val_ptr == NULL) TTCN_error("The first argument of substr() is an unbound value of type @General_Types.VerdicttypeSet."); |
| check_substr_arguments(val_ptr->n_elements, index, returncount, "@General_Types.VerdicttypeSet","element"); |
| VerdicttypeSet ret_val; |
| ret_val.set_size(returncount); |
| for (int i=0; i<returncount; i++) { |
| if (val_ptr->value_elements[i+index] != NULL) { |
| ret_val.val_ptr->value_elements[i] = new VERDICTTYPE(*val_ptr->value_elements[i+index]); |
| } |
| } |
| return ret_val; |
| } |
| |
| VerdicttypeSet VerdicttypeSet::replace(int index, int len, const VerdicttypeSet& repl) const |
| { |
| if (val_ptr == NULL) TTCN_error("The first argument of replace() is an unbound value of type @General_Types.VerdicttypeSet."); |
| if (repl.val_ptr == NULL) TTCN_error("The fourth argument of replace() is an unbound value of type @General_Types.VerdicttypeSet."); |
| check_replace_arguments(val_ptr->n_elements, index, len, "@General_Types.VerdicttypeSet","element"); |
| VerdicttypeSet ret_val; |
| ret_val.set_size(val_ptr->n_elements + repl.val_ptr->n_elements - len); |
| for (int i = 0; i < index; i++) { |
| if (val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i] = new VERDICTTYPE(*val_ptr->value_elements[i]); |
| } |
| } |
| for (int i = 0; i < repl.val_ptr->n_elements; i++) { |
| if (repl.val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i+index] = new VERDICTTYPE(*repl.val_ptr->value_elements[i]); |
| } |
| } |
| for (int i = 0; i < val_ptr->n_elements - index - len; i++) { |
| if (val_ptr->value_elements[index+i+len] != NULL) { |
| ret_val.val_ptr->value_elements[index+i+repl.val_ptr->n_elements] = new VERDICTTYPE(*val_ptr->value_elements[index+i+len]); |
| } |
| } |
| return ret_val; |
| } |
| |
| VerdicttypeSet VerdicttypeSet::replace(int index, int len, const VerdicttypeSet_template& repl) const |
| { |
| if (!repl.is_value()) TTCN_error("The fourth argument of function replace() is a template with non-specific value."); |
| return replace(index, len, repl.valueof()); |
| } |
| |
| void VerdicttypeSet::set_size(int new_size) |
| { |
| if (new_size < 0) TTCN_error("Internal error: Setting a negative size for a value of type @General_Types.VerdicttypeSet."); |
| if (val_ptr == NULL) { |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| } else if (val_ptr->ref_count > 1) { |
| struct recordof_setof_struct *new_val_ptr = new recordof_setof_struct; |
| new_val_ptr->ref_count = 1; |
| new_val_ptr->n_elements = (new_size < val_ptr->n_elements) ? new_size : val_ptr->n_elements; |
| new_val_ptr->value_elements = (VERDICTTYPE**)allocate_pointers(new_val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < new_val_ptr->n_elements; elem_count++) { |
| if (val_ptr->value_elements[elem_count] != NULL){ |
| new_val_ptr->value_elements[elem_count] = new VERDICTTYPE(*(val_ptr->value_elements[elem_count])); |
| } |
| } |
| clean_up(); |
| val_ptr = new_val_ptr; |
| } |
| if (new_size > val_ptr->n_elements) { |
| val_ptr->value_elements = (VERDICTTYPE**)reallocate_pointers((void**)val_ptr->value_elements, val_ptr->n_elements, new_size); |
| #ifdef TITAN_MEMORY_DEBUG_SET_RECORD_OF |
| if((val_ptr->n_elements/1000)!=(new_size/1000)) TTCN_warning("New size of type @General_Types.VerdicttypeSet: %d",new_size); |
| #endif |
| val_ptr->n_elements = new_size; |
| } else if (new_size < val_ptr->n_elements) { |
| for (int elem_count = new_size; elem_count < val_ptr->n_elements; elem_count++) |
| if (val_ptr->value_elements[elem_count] != NULL)delete val_ptr->value_elements[elem_count]; |
| val_ptr->value_elements = (VERDICTTYPE**)reallocate_pointers((void**)val_ptr->value_elements, val_ptr->n_elements, new_size); |
| val_ptr->n_elements = new_size; |
| } |
| } |
| |
| boolean VerdicttypeSet::is_value() const |
| { |
| if (val_ptr == NULL) return FALSE; |
| for(int i = 0; i < val_ptr->n_elements; ++i) { |
| if (val_ptr->value_elements[i] == NULL || !val_ptr->value_elements[i]->is_value()) return FALSE; |
| } |
| return TRUE; |
| } |
| |
| int VerdicttypeSet::size_of() const |
| { |
| if (val_ptr == NULL) TTCN_error("Performing sizeof operation on an unbound value of type @General_Types.VerdicttypeSet."); |
| return val_ptr->n_elements; |
| } |
| |
| int VerdicttypeSet::lengthof() const |
| { |
| if (val_ptr == NULL) TTCN_error("Performing lengthof operation on an unbound value of type @General_Types.VerdicttypeSet."); |
| for (int my_length=val_ptr->n_elements; my_length>0; my_length--) if (val_ptr->value_elements[my_length-1] != NULL) return my_length; |
| return 0; |
| } |
| |
| void VerdicttypeSet::log() const |
| { |
| if (val_ptr == NULL) {; |
| TTCN_Logger::log_event_unbound(); |
| return; |
| } |
| switch (val_ptr->n_elements) { |
| case 0: |
| TTCN_Logger::log_event_str("{ }"); |
| break; |
| default: |
| TTCN_Logger::log_event_str("{ "); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) { |
| if (elem_count > 0) TTCN_Logger::log_event_str(", "); |
| (*this)[elem_count].log(); |
| } |
| TTCN_Logger::log_event_str(" }"); |
| } |
| } |
| |
| void VerdicttypeSet::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE|Module_Param::BC_LIST, "set of value"); |
| switch (param.get_operation_type()) { |
| case Module_Param::OT_ASSIGN: |
| if (param.get_type()==Module_Param::MP_Value_List && param.get_size()==0) { |
| *this = NULL_VALUE; |
| return; |
| } |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: |
| set_size(param.get_size()); |
| for (size_t i=0; i<param.get_size(); ++i) { |
| Module_Param* const curr = param.get_elem(i); |
| if (curr->get_type()!=Module_Param::MP_NotUsed) { |
| (*this)[i].set_param(*curr); |
| if (!(*this)[i].is_bound()) { |
| delete val_ptr->value_elements[i]; |
| val_ptr->value_elements[i] = NULL; |
| } |
| } |
| } |
| break; |
| case Module_Param::MP_Indexed_List: |
| for (size_t i=0; i<param.get_size(); ++i) { |
| Module_Param* const curr = param.get_elem(i); |
| (*this)[curr->get_id()->get_index()].set_param(*curr); |
| if (!(*this)[curr->get_id()->get_index()].is_bound()) { |
| delete val_ptr->value_elements[curr->get_id()->get_index()]; |
| val_ptr->value_elements[curr->get_id()->get_index()] = NULL; |
| } |
| } |
| break; |
| default: |
| param.type_error("set of value", "@General_Types.VerdicttypeSet"); |
| } |
| break; |
| case Module_Param::OT_CONCAT: |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: { |
| if (!is_bound()) *this = NULL_VALUE; |
| int start_idx = lengthof(); |
| for (size_t i=0; i<param.get_size(); ++i) { |
| Module_Param* const curr = param.get_elem(i); |
| if ((curr->get_type()!=Module_Param::MP_NotUsed)) { |
| (*this)[start_idx+(int)i].set_param(*curr); |
| } |
| } |
| } break; |
| case Module_Param::MP_Indexed_List: |
| param.error("Cannot concatenate an indexed value list"); |
| break; |
| default: |
| param.type_error("set of value", "@General_Types.VerdicttypeSet"); |
| } |
| break; |
| default: |
| TTCN_error("Internal error: Unknown operation type."); |
| } |
| } |
| |
| void VerdicttypeSet::set_implicit_omit() |
| { |
| if (val_ptr == NULL) return; |
| for (int i = 0; i < val_ptr->n_elements; i++) { |
| if (val_ptr->value_elements[i] != NULL) val_ptr->value_elements[i]->set_implicit_omit(); |
| } |
| } |
| |
| void VerdicttypeSet::encode_text(Text_Buf& text_buf) const |
| { |
| if (val_ptr == NULL) TTCN_error("Text encoder: Encoding an unbound value of type @General_Types.VerdicttypeSet."); |
| text_buf.push_int(val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) |
| (*this)[elem_count].encode_text(text_buf); |
| } |
| |
| void VerdicttypeSet::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = text_buf.pull_int().get_val(); |
| if (val_ptr->n_elements < 0) TTCN_error("Text decoder: Negative size was received for a value of type @General_Types.VerdicttypeSet."); |
| val_ptr->value_elements = (VERDICTTYPE**)allocate_pointers(val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) { |
| val_ptr->value_elements[elem_count] = new VERDICTTYPE; |
| val_ptr->value_elements[elem_count]->decode_text(text_buf); |
| } |
| } |
| |
| void VerdicttypeSet::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t 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); |
| 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;} |
| default: |
| TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| void VerdicttypeSet::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t 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(); |
| if(b_data[p_buf.get_len()-1]!='\0'){ |
| 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); |
| 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)<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;} |
| default: |
| TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| int VerdicttypeSet::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean /*no_err*/, int sel_field, boolean first_call, const RAW_Force_Omit*){ |
| int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding); |
| limit-=prepaddlength; |
| int decoded_length=0; |
| int decoded_field_length=0; |
| size_t start_of_field=0; |
| if(first_call) { |
| clean_up(); |
| val_ptr=new recordof_setof_struct; |
| val_ptr->ref_count=1; |
| val_ptr->n_elements=0; |
| val_ptr->value_elements=NULL; |
| } |
| int start_field=val_ptr->n_elements; |
| if(p_td.raw->fieldlength || sel_field!=-1){ |
| int a=0; |
| if(sel_field==-1) sel_field=p_td.raw->fieldlength; |
| for(a=0;a<sel_field;a++){ |
| decoded_field_length=(*this)[a+start_field].RAW_decode(*p_td.oftype_descr,p_buf,limit,top_bit_ord,TRUE); |
| if(decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| } |
| if(a==0) val_ptr->n_elements=0; |
| } else { |
| if(limit==0){ |
| if(!first_call) return -1; |
| val_ptr->n_elements=0; |
| return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength; |
| } |
| int a=start_field; |
| while(limit>0){ |
| start_of_field=p_buf.get_pos_bit(); |
| decoded_field_length=(*this)[a].RAW_decode(*p_td.oftype_descr,p_buf,limit,top_bit_ord,TRUE); |
| if(decoded_field_length < 0){ |
| delete &(*this)[a]; |
| val_ptr->n_elements--; |
| p_buf.set_pos_bit(start_of_field); |
| if(a>start_field){ |
| return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength; |
| } else return -1; |
| } |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| a++; |
| } |
| } |
| return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength; |
| } |
| |
| int VerdicttypeSet::RAW_encode(const TTCN_Typedescriptor_t& p_td,RAW_enc_tree& myleaf) const{ |
| int encoded_length=0; |
| int encoded_num_of_records=p_td.raw->fieldlength?smaller(val_ptr->n_elements, p_td.raw->fieldlength):val_ptr->n_elements; |
| myleaf.isleaf=FALSE; |
| myleaf.rec_of=TRUE; |
| myleaf.body.node.num_of_nodes=encoded_num_of_records; |
| myleaf.body.node.nodes=init_nodes_of_enc_tree(encoded_num_of_records); |
| for(int a=0;a<encoded_num_of_records;a++){ |
| myleaf.body.node.nodes[a]=new RAW_enc_tree(TRUE,&myleaf,&(myleaf.curr_pos),a,p_td.oftype_descr->raw); |
| encoded_length+=(*this)[a].RAW_encode(*p_td.oftype_descr,*myleaf.body.node.nodes[a]); |
| } |
| return myleaf.length=encoded_length; |
| } |
| |
| void VerdicttypeSet_template::copy_value(const VerdicttypeSet& other_value) |
| { |
| if (!other_value.is_bound()) TTCN_error("Initialization of a template of type @General_Types.VerdicttypeSet with an unbound value."); |
| single_value.n_elements = other_value.size_of(); |
| single_value.value_elements = (VERDICTTYPE_template**)allocate_pointers(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (other_value[elem_count].is_bound()) { |
| single_value.value_elements[elem_count] = new VERDICTTYPE_template(other_value[elem_count]); |
| } else { |
| single_value.value_elements[elem_count] = new VERDICTTYPE_template; |
| } |
| } |
| set_selection(SPECIFIC_VALUE); |
| } |
| |
| void VerdicttypeSet_template::copy_template(const VerdicttypeSet_template& other_value) |
| { |
| switch (other_value.template_selection) { |
| case SPECIFIC_VALUE: |
| single_value.n_elements = other_value.single_value.n_elements; |
| single_value.value_elements = (VERDICTTYPE_template**)allocate_pointers(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (UNINITIALIZED_TEMPLATE != other_value.single_value.value_elements[elem_count]->get_selection()) { |
| single_value.value_elements[elem_count] = new VERDICTTYPE_template(*other_value.single_value.value_elements[elem_count]); |
| } else { |
| single_value.value_elements[elem_count] = new VERDICTTYPE_template; |
| } |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new VerdicttypeSet_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 SUPERSET_MATCH: |
| case SUBSET_MATCH: |
| value_set.n_items = other_value.value_set.n_items; |
| value_set.set_items = new VERDICTTYPE_template[value_set.n_items]; |
| for (unsigned int set_count = 0; set_count < value_set.n_items; set_count++) |
| value_set.set_items[set_count] = other_value.value_set.set_items[set_count]; |
| break; |
| default: |
| TTCN_error("Copying an uninitialized/unsupported template of type @General_Types.VerdicttypeSet."); |
| break; |
| } |
| set_selection(other_value); |
| } |
| |
| boolean VerdicttypeSet_template::match_function_specific(const Base_Type *value_ptr, int value_index, const Restricted_Length_Template *template_ptr, int template_index, boolean legacy) |
| { |
| if (value_index >= 0) return ((const VerdicttypeSet_template*)template_ptr)->single_value.value_elements[template_index]->match((*(const VerdicttypeSet*)value_ptr)[value_index], legacy); |
| else return ((const VerdicttypeSet_template*)template_ptr)->single_value.value_elements[template_index]->is_any_or_omit(); |
| } |
| |
| boolean VerdicttypeSet_template::match_function_set(const Base_Type *value_ptr, int value_index, const Restricted_Length_Template *template_ptr, int template_index, boolean legacy) |
| { |
| if (value_index >= 0) return ((const VerdicttypeSet_template*)template_ptr)->value_set.set_items[template_index].match((*(const VerdicttypeSet*)value_ptr)[value_index], legacy); |
| else return ((const VerdicttypeSet_template*)template_ptr)->value_set.set_items[template_index].is_any_or_omit(); |
| } |
| |
| void VerdicttypeSet_template::log_function(const Base_Type *value_ptr, const Restricted_Length_Template *template_ptr, int index_value, int index_template, boolean legacy) |
| { |
| if (value_ptr == NULL) { |
| if (template_ptr != NULL) { |
| ((const VerdicttypeSet_template*)template_ptr)->single_value.value_elements[index_template]->log(); |
| } |
| } else if (template_ptr == NULL) { |
| (*(const VerdicttypeSet*)value_ptr)[index_value].log(); |
| } else { |
| ((const VerdicttypeSet_template*)template_ptr)->single_value.value_elements[index_template]->log_match((*(const VerdicttypeSet*)value_ptr)[index_value], legacy); |
| } |
| } |
| |
| VerdicttypeSet_template::VerdicttypeSet_template() |
| { |
| } |
| |
| VerdicttypeSet_template::VerdicttypeSet_template(template_sel other_value) |
| : Restricted_Length_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| VerdicttypeSet_template::VerdicttypeSet_template(null_type) |
| : Restricted_Length_Template(SPECIFIC_VALUE) |
| { |
| single_value.n_elements = 0; |
| single_value.value_elements = NULL; |
| } |
| |
| VerdicttypeSet_template::VerdicttypeSet_template(const VerdicttypeSet& other_value) |
| { |
| copy_value(other_value); |
| } |
| |
| VerdicttypeSet_template::VerdicttypeSet_template(const OPTIONAL<VerdicttypeSet>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const VerdicttypeSet&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of type @General_Types.VerdicttypeSet from an unbound optional field."); |
| } |
| } |
| |
| VerdicttypeSet_template::VerdicttypeSet_template(const VerdicttypeSet_template& other_value) |
| : Restricted_Length_Template() |
| { |
| copy_template(other_value); |
| } |
| |
| VerdicttypeSet_template::~VerdicttypeSet_template() |
| { |
| clean_up(); |
| } |
| |
| void VerdicttypeSet_template::clean_up() |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| delete single_value.value_elements[elem_count]; |
| free_pointers((void**)single_value.value_elements); |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| delete [] value_list.list_value; |
| break; |
| case SUPERSET_MATCH: |
| case SUBSET_MATCH: |
| delete [] value_set.set_items; |
| default: |
| break; |
| } |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| VerdicttypeSet_template& VerdicttypeSet_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| VerdicttypeSet_template& VerdicttypeSet_template::operator=(null_type) |
| { |
| clean_up(); |
| set_selection(SPECIFIC_VALUE); |
| single_value.n_elements = 0; |
| single_value.value_elements = NULL; |
| return *this; |
| } |
| |
| VerdicttypeSet_template& VerdicttypeSet_template::operator=(const VerdicttypeSet& other_value) |
| { |
| clean_up(); |
| copy_value(other_value); |
| return *this; |
| } |
| |
| VerdicttypeSet_template& VerdicttypeSet_template::operator=(const OPTIONAL<VerdicttypeSet>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const VerdicttypeSet&)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 @General_Types.VerdicttypeSet."); |
| } |
| return *this; |
| } |
| |
| VerdicttypeSet_template& VerdicttypeSet_template::operator=(const VerdicttypeSet_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| VERDICTTYPE_template& VerdicttypeSet_template::operator[](int index_value) |
| { |
| if (index_value < 0) TTCN_error("Accessing an element of a template for type @General_Types.VerdicttypeSet using a negative index: %d.", index_value); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: |
| if(index_value < single_value.n_elements) break; |
| // no break |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| case UNINITIALIZED_TEMPLATE: |
| set_size(index_value + 1); |
| break; |
| default: |
| TTCN_error("Accessing an element of a non-specific template for type @General_Types.VerdicttypeSet."); |
| break; |
| } |
| return *single_value.value_elements[index_value]; |
| } |
| |
| VERDICTTYPE_template& VerdicttypeSet_template::operator[](const INTEGER& index_value) |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a template of type @General_Types.VerdicttypeSet."); |
| return (*this)[(int)index_value]; |
| } |
| |
| const VERDICTTYPE_template& VerdicttypeSet_template::operator[](int index_value) const |
| { |
| if (index_value < 0) TTCN_error("Accessing an element of a template for type @General_Types.VerdicttypeSet using a negative index: %d.", index_value); |
| if (template_selection != SPECIFIC_VALUE) TTCN_error("Accessing an element of a non-specific template for type @General_Types.VerdicttypeSet."); |
| if (index_value >= single_value.n_elements) TTCN_error("Index overflow in a template of type @General_Types.VerdicttypeSet: The index is %d, but the template has only %d elements.", index_value, single_value.n_elements); |
| return *single_value.value_elements[index_value]; |
| } |
| |
| const VERDICTTYPE_template& VerdicttypeSet_template::operator[](const INTEGER& index_value) const |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a template of type @General_Types.VerdicttypeSet."); |
| return (*this)[(int)index_value]; |
| } |
| |
| void VerdicttypeSet_template::set_size(int new_size) |
| { |
| if (new_size < 0) TTCN_error("Internal error: Setting a negative size for a template of type @General_Types.VerdicttypeSet."); |
| template_sel old_selection = template_selection; |
| if (old_selection != SPECIFIC_VALUE) { |
| clean_up(); |
| set_selection(SPECIFIC_VALUE); |
| single_value.n_elements = 0; |
| single_value.value_elements = NULL; |
| } |
| if (new_size > single_value.n_elements) { |
| single_value.value_elements = (VERDICTTYPE_template**)reallocate_pointers((void**)single_value.value_elements, single_value.n_elements, new_size); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) { |
| for (int elem_count = single_value.n_elements; elem_count < new_size; elem_count++) |
| single_value.value_elements[elem_count] = new VERDICTTYPE_template(ANY_VALUE); |
| } else { |
| for (int elem_count = single_value.n_elements; elem_count < new_size; elem_count++) |
| single_value.value_elements[elem_count] = new VERDICTTYPE_template; |
| } |
| single_value.n_elements = new_size; |
| } else if (new_size < single_value.n_elements) { |
| for (int elem_count = new_size; elem_count < single_value.n_elements; elem_count++) |
| delete single_value.value_elements[elem_count]; |
| single_value.value_elements = (VERDICTTYPE_template**)reallocate_pointers((void**)single_value.value_elements, single_value.n_elements, new_size); |
| single_value.n_elements = new_size; |
| } |
| } |
| |
| int VerdicttypeSet_template::n_elem() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| return single_value.n_elements; |
| break; |
| case VALUE_LIST: |
| return value_list.n_values; |
| break; |
| default: |
| TTCN_error("Performing n_elem"); |
| } |
| } |
| |
| int VerdicttypeSet_template::size_of(boolean is_size) const |
| { |
| const char* op_name = is_size ? "size" : "length"; |
| int min_size; |
| boolean has_any_or_none; |
| if (is_ifpresent) TTCN_error("Performing %sof() operation on a template of type @General_Types.VerdicttypeSet which has an ifpresent attribute.", op_name); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: { |
| min_size = 0; |
| has_any_or_none = FALSE; |
| int elem_count = single_value.n_elements; |
| if (!is_size) { while (elem_count>0 && !single_value.value_elements[elem_count-1]->is_bound()) elem_count--; } |
| for (int i=0; i<elem_count; i++) { |
| switch (single_value.value_elements[i]->get_selection()) { |
| case OMIT_VALUE: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.VerdicttypeSet containing omit element.", op_name); |
| case ANY_OR_OMIT: |
| has_any_or_none = TRUE; |
| break; |
| default: |
| min_size++; |
| break; |
| } |
| } |
| } break; |
| case SUPERSET_MATCH: |
| case SUBSET_MATCH: { |
| min_size = 0; |
| has_any_or_none = FALSE; |
| int elem_count = value_set.n_items; |
| if (!is_size) { while (elem_count>0 && !value_set.set_items[elem_count-1].is_bound()) elem_count--; } |
| for (int i=0; i<elem_count; i++) { |
| switch (value_set.set_items[i].get_selection()) |
| { |
| case OMIT_VALUE: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.VerdicttypeSet containing omit element.", op_name); |
| case ANY_OR_OMIT: |
| has_any_or_none = TRUE; |
| break; |
| default: |
| min_size++; |
| break; |
| } |
| } |
| if (template_selection==SUPERSET_MATCH) { |
| has_any_or_none = TRUE; |
| } else { |
| int max_size = min_size; |
| min_size = 0; |
| if (!has_any_or_none) { // [0,max_size] |
| switch (length_restriction_type) { |
| case NO_LENGTH_RESTRICTION: |
| if (max_size==0) return 0; |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.VerdicttypeSet with no exact size.", op_name); |
| case SINGLE_LENGTH_RESTRICTION: |
| if (length_restriction.single_length<=max_size) |
| return length_restriction.single_length; |
| TTCN_error("Performing %sof() operation on an invalid template of type @General_Types.VerdicttypeSet. The maximum size (%d) contradicts the length restriction (%d).", op_name, max_size, length_restriction.single_length); |
| case RANGE_LENGTH_RESTRICTION: |
| if (max_size==length_restriction.range_length.min_length) { |
| return max_size; |
| } else if (max_size>length_restriction.range_length.min_length){ |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.VerdicttypeSet with no exact size.", op_name); |
| } else |
| TTCN_error("Performing %sof() operation on an invalid template of type @General_Types.VerdicttypeSet. Maximum size (%d) contradicts the length restriction (%d..%d).", op_name, max_size, length_restriction.range_length.min_length, length_restriction.range_length.max_length); |
| default: |
| TTCN_error("Internal error: Template has invalid length restriction type."); |
| } |
| } |
| } |
| } break; |
| case OMIT_VALUE: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.VerdicttypeSet containing omit value.", op_name); |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| min_size = 0; |
| has_any_or_none = TRUE; |
| break; |
| case VALUE_LIST: |
| { |
| if (value_list.n_values<1) |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.VerdicttypeSet containing an empty list.", op_name); |
| int item_size = value_list.list_value[0].size_of(is_size); |
| for (unsigned int i = 1; i < value_list.n_values; i++) { |
| if (value_list.list_value[i].size_of(is_size)!=item_size) |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.VerdicttypeSet containing a value list with different sizes.", op_name); |
| } |
| min_size = item_size; |
| has_any_or_none = FALSE; |
| break; |
| } |
| case COMPLEMENTED_LIST: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.VerdicttypeSet containing complemented list.", op_name); |
| default: |
| TTCN_error("Performing %sof() operation on an uninitialized/unsupported template of type @General_Types.VerdicttypeSet.", op_name); |
| } |
| return check_section_is_single(min_size, has_any_or_none, op_name, "a", "template of type @General_Types.VerdicttypeSet"); |
| } |
| |
| boolean VerdicttypeSet_template::match(const VerdicttypeSet& other_value, boolean legacy) const |
| { |
| if (!other_value.is_bound()) return FALSE; |
| int value_length = other_value.size_of(); |
| if (!match_length(value_length)) return FALSE; |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| return match_set_of(&other_value, value_length, this, single_value.n_elements, match_function_specific, legacy); |
| case OMIT_VALUE: |
| return FALSE; |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| 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 SUPERSET_MATCH: |
| case SUBSET_MATCH: |
| return match_set_of(&other_value, value_length, this, value_set.n_items, match_function_set, legacy); |
| default: |
| TTCN_error("Matching with an uninitialized/unsupported template of type @General_Types.VerdicttypeSet."); |
| } |
| return FALSE; |
| } |
| |
| boolean VerdicttypeSet_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| if (!single_value.value_elements[elem_count]->is_value()) return FALSE; |
| return TRUE; |
| } |
| |
| VerdicttypeSet VerdicttypeSet_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 @General_Types.VerdicttypeSet."); |
| VerdicttypeSet ret_val; |
| ret_val.set_size(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| if (single_value.value_elements[elem_count]->is_bound()) { |
| ret_val[elem_count] = single_value.value_elements[elem_count]->valueof(); |
| } |
| return ret_val; |
| } |
| |
| VerdicttypeSet VerdicttypeSet_template::substr(int index, int returncount) const |
| { |
| if (!is_value()) TTCN_error("The first argument of function substr() is a template with non-specific value."); |
| return valueof().substr(index, returncount); |
| } |
| |
| VerdicttypeSet VerdicttypeSet_template::replace(int index, int len, const VerdicttypeSet_template& repl) const |
| { |
| if (!is_value()) TTCN_error("The first argument of function replace() is a template with non-specific value."); |
| if (!repl.is_value()) TTCN_error("The fourth argument of function replace() is a template with non-specific value."); |
| return valueof().replace(index, len, repl.valueof()); |
| } |
| |
| VerdicttypeSet VerdicttypeSet_template::replace(int index, int len, const VerdicttypeSet& repl) const |
| { |
| if (!is_value()) TTCN_error("The first argument of function replace() is a template with non-specific value."); |
| return valueof().replace(index, len, repl); |
| } |
| |
| void VerdicttypeSet_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| clean_up(); |
| switch (template_type) { |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = list_length; |
| value_list.list_value = new VerdicttypeSet_template[list_length]; |
| break; |
| case SUPERSET_MATCH: |
| case SUBSET_MATCH: |
| value_set.n_items = list_length; |
| value_set.set_items = new VERDICTTYPE_template[list_length]; |
| break; |
| default: |
| TTCN_error("Internal error: Setting an invalid type for a template of type @General_Types.VerdicttypeSet."); |
| } |
| set_selection(template_type); |
| } |
| |
| VerdicttypeSet_template& VerdicttypeSet_template::list_item(unsigned int list_index) |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) TTCN_error("Internal error: Accessing a list element of a non-list template of type @General_Types.VerdicttypeSet."); |
| if (list_index >= value_list.n_values) TTCN_error("Internal error: Index overflow in a value list template of type @General_Types.VerdicttypeSet."); |
| return value_list.list_value[list_index]; |
| } |
| |
| VERDICTTYPE_template& VerdicttypeSet_template::set_item(unsigned int set_index) |
| { |
| if (template_selection != SUPERSET_MATCH && template_selection != SUBSET_MATCH) TTCN_error("Internal error: Accessing a set element of a non-set template of type @General_Types.VerdicttypeSet."); |
| if (set_index >= value_set.n_items) TTCN_error("Internal error: Index overflow in a set template of type @General_Types.VerdicttypeSet."); |
| return value_set.set_items[set_index]; |
| } |
| |
| void VerdicttypeSet_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| if (single_value.n_elements > 0) { |
| TTCN_Logger::log_event_str("{ "); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (elem_count > 0) TTCN_Logger::log_event_str(", "); |
| single_value.value_elements[elem_count]->log(); |
| } |
| TTCN_Logger::log_event_str(" }"); |
| } else TTCN_Logger::log_event_str("{ }"); |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| 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 SUPERSET_MATCH: |
| case SUBSET_MATCH: |
| TTCN_Logger::log_event("%s(", template_selection == SUPERSET_MATCH ? "superset" : "subset"); |
| for (unsigned int set_count = 0; set_count < value_set.n_items; set_count++) { |
| if (set_count > 0) TTCN_Logger::log_event_str(", "); |
| value_set.set_items[set_count].log(); |
| } |
| TTCN_Logger::log_char(')'); |
| break; |
| default: |
| log_generic(); |
| } |
| log_restricted(); |
| log_ifpresent(); |
| } |
| |
| void VerdicttypeSet_template::log_match(const VerdicttypeSet& 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{ |
| size_t previous_size = TTCN_Logger::get_logmatch_buffer_len(); |
| if (template_selection == SPECIFIC_VALUE) |
| log_match_heuristics(&match_value, match_value.size_of(), this, single_value.n_elements, match_function_specific, log_function, legacy); |
| else{ |
| if(previous_size != 0){ |
| TTCN_Logger::print_logmatch_buffer(); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| TTCN_Logger::log_event_str(":="); |
| } |
| } |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| TTCN_Logger::log_event_str(" unmatched"); |
| } |
| return; |
| } |
| 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"); |
| if (template_selection == SPECIFIC_VALUE) log_match_heuristics(&match_value, match_value.size_of(), this, single_value.n_elements, match_function_specific, log_function, legacy); |
| } |
| } |
| |
| void VerdicttypeSet_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_restricted(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| text_buf.push_int(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| single_value.value_elements[elem_count]->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; |
| case SUPERSET_MATCH: |
| case SUBSET_MATCH: |
| text_buf.push_int(value_set.n_items); |
| for (unsigned int set_count = 0; set_count < value_set.n_items; set_count++) |
| value_set.set_items[set_count].encode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @General_Types.VerdicttypeSet."); |
| } |
| } |
| |
| void VerdicttypeSet_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_restricted(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value.n_elements = text_buf.pull_int().get_val(); |
| if (single_value.n_elements < 0) TTCN_error("Text decoder: Negative size was received for a template of type @General_Types.VerdicttypeSet."); |
| single_value.value_elements = (VERDICTTYPE_template**)allocate_pointers(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| single_value.value_elements[elem_count] = new VERDICTTYPE_template; |
| single_value.value_elements[elem_count]->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 VerdicttypeSet_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; |
| case SUPERSET_MATCH: |
| case SUBSET_MATCH: |
| value_set.n_items = text_buf.pull_int().get_val(); |
| value_set.set_items = new VERDICTTYPE_template[value_set.n_items]; |
| for (unsigned int set_count = 0; set_count < value_set.n_items; set_count++) |
| value_set.set_items[set_count].decode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text decoder: An unknown/unsupported selection was received for a template of type @General_Types.VerdicttypeSet."); |
| } |
| } |
| |
| boolean VerdicttypeSet_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean VerdicttypeSet_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int i=0; i<value_list.n_values; i++) |
| if (value_list.list_value[i].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| void VerdicttypeSet_template::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_TEMPLATE|Module_Param::BC_LIST, "set of 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: { |
| VerdicttypeSet_template temp; |
| temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); |
| for (size_t p_i=0; p_i<param.get_size(); p_i++) { |
| temp.list_item(p_i).set_param(*param.get_elem(p_i)); |
| } |
| *this = temp; |
| break; } |
| case Module_Param::MP_Indexed_List: |
| if (template_selection!=SPECIFIC_VALUE) set_size(0); |
| for (size_t p_i=0; p_i<param.get_size(); ++p_i) { |
| (*this)[(int)(param.get_elem(p_i)->get_id()->get_index())].set_param(*param.get_elem(p_i)); |
| } |
| break; |
| case Module_Param::MP_Value_List: |
| set_size(param.get_size()); |
| for (size_t p_i=0; p_i<param.get_size(); ++p_i) { |
| if (param.get_elem(p_i)->get_type()!=Module_Param::MP_NotUsed) { |
| (*this)[p_i].set_param(*param.get_elem(p_i)); |
| } |
| } |
| break; |
| case Module_Param::MP_Superset_Template: |
| case Module_Param::MP_Subset_Template: |
| set_type(param.get_type()==Module_Param::MP_Superset_Template ? SUPERSET_MATCH : SUBSET_MATCH, param.get_size()); |
| for (size_t p_i=0; p_i<param.get_size(); p_i++) { |
| set_item(p_i).set_param(*param.get_elem(p_i)); |
| } |
| break; |
| default: |
| param.type_error("set of template", "@General_Types.VerdicttypeSet"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| set_length_range(param); |
| } |
| |
| void VerdicttypeSet_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; |
| for (int i=0; i<single_value.n_elements; i++) single_value.value_elements[i]->check_restriction(t_res, t_name ? t_name : "@General_Types.VerdicttypeSet"); |
| 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 : "@General_Types.VerdicttypeSet"); |
| } |
| |
| boolean VerdicttypeSet_template::get_istemplate_kind(const char* type) const { |
| if (!strcmp(type, "AnyElement")) { |
| if (template_selection != SPECIFIC_VALUE) { |
| return FALSE; |
| } |
| for (int i = 0; i < single_value.n_elements; i++) { |
| if (single_value.value_elements[i]->get_selection() == ANY_VALUE) { |
| return TRUE; |
| } |
| } |
| return FALSE; |
| } else if (!strcmp(type, "AnyElementsOrNone")) { |
| if (template_selection != SPECIFIC_VALUE) { |
| return FALSE; |
| } |
| for (int i = 0; i < single_value.n_elements; i++) { |
| if (single_value.value_elements[i]->get_selection() == ANY_OR_OMIT) { |
| return TRUE; |
| } |
| } |
| return FALSE; |
| } else if (!strcmp(type, "permutation")) { |
| return FALSE; |
| } else if (!strcmp(type, "length")) { |
| return length_restriction_type != NO_LENGTH_RESTRICTION; |
| } else { |
| return Base_Template::get_istemplate_kind(type); |
| } |
| } |
| |
| const anytype Anytypes::UNBOUND_ELEM; |
| Anytypes::Anytypes() |
| { |
| val_ptr = NULL; |
| } |
| |
| Anytypes::Anytypes(null_type) |
| { |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| } |
| |
| Anytypes::Anytypes(const Anytypes& other_value) |
| { |
| if (!other_value.is_bound()) TTCN_error("Copying an unbound value of type @General_Types.Anytypes."); |
| val_ptr = other_value.val_ptr; |
| val_ptr->ref_count++; |
| } |
| |
| Anytypes::~Anytypes() |
| { |
| clean_up(); |
| if (val_ptr != NULL) val_ptr = NULL; |
| } |
| |
| void Anytypes::clean_up() |
| { |
| if (val_ptr != NULL) { |
| if (val_ptr->ref_count > 1) { |
| val_ptr->ref_count--; |
| val_ptr = NULL; |
| } |
| else if (val_ptr->ref_count == 1) { |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; |
| elem_count++) |
| if (val_ptr->value_elements[elem_count] != NULL) |
| delete val_ptr->value_elements[elem_count]; |
| free_pointers((void**)val_ptr->value_elements); |
| delete val_ptr; |
| val_ptr = NULL; |
| } |
| else |
| TTCN_error("Internal error: Invalid reference counter in a record of/set of value."); |
| } |
| } |
| |
| Anytypes& Anytypes::operator=(null_type) |
| { |
| clean_up(); |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| return *this; |
| } |
| |
| Anytypes& Anytypes::operator=(const Anytypes& other_value) |
| { |
| if (other_value.val_ptr == NULL) TTCN_error("Assigning an unbound value of type @General_Types.Anytypes."); |
| if (this != &other_value) { |
| clean_up(); |
| val_ptr = other_value.val_ptr; |
| val_ptr->ref_count++; |
| } |
| return *this; |
| } |
| |
| boolean Anytypes::operator==(null_type) const |
| { |
| if (val_ptr == NULL) |
| TTCN_error("The left operand of comparison is an unbound value of type @General_Types.Anytypes."); |
| return val_ptr->n_elements == 0 ; |
| } |
| |
| boolean Anytypes::operator==(const Anytypes& other_value) const |
| { |
| if (val_ptr == NULL) TTCN_error("The left operand of comparison is an unbound value of type @General_Types.Anytypes."); |
| if (other_value.val_ptr == NULL) TTCN_error("The right operand of comparison is an unbound value of type @General_Types.Anytypes."); |
| if (val_ptr == other_value.val_ptr) return TRUE; |
| if (val_ptr->n_elements != (other_value.val_ptr)->n_elements) |
| return FALSE; |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++){ |
| if (val_ptr->value_elements[elem_count] != NULL){ |
| if ((other_value.val_ptr)->value_elements[elem_count] != NULL){ |
| if (*val_ptr->value_elements[elem_count] != *(other_value.val_ptr)->value_elements[elem_count]) return FALSE; |
| } else return FALSE; |
| } else { |
| if ((other_value.val_ptr)->value_elements[elem_count] != NULL) return FALSE; |
| } |
| } |
| return TRUE; |
| } |
| |
| anytype& Anytypes::operator[](int index_value) |
| { |
| if (index_value < 0) TTCN_error("Accessing an element of type @General_Types.Anytypes using a negative index: %d.", index_value); |
| if (val_ptr == NULL) { |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| } else if (val_ptr->ref_count > 1) { |
| struct recordof_setof_struct *new_val_ptr = new recordof_setof_struct; |
| new_val_ptr->ref_count = 1; |
| new_val_ptr->n_elements = (index_value >= val_ptr->n_elements) ? index_value + 1 : val_ptr->n_elements; |
| new_val_ptr->value_elements = (anytype**)allocate_pointers(new_val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++){ |
| if (val_ptr->value_elements[elem_count] != NULL){ |
| new_val_ptr->value_elements[elem_count] = new anytype(*(val_ptr->value_elements[elem_count])); |
| } |
| } |
| clean_up(); |
| val_ptr = new_val_ptr; |
| } |
| if (index_value >= val_ptr->n_elements) set_size(index_value + 1); |
| if (val_ptr->value_elements[index_value] == NULL) { |
| val_ptr->value_elements[index_value] = new anytype; |
| } |
| return *val_ptr->value_elements[index_value]; |
| } |
| |
| anytype& Anytypes::operator[](const INTEGER& index_value) |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a value of type @General_Types.Anytypes."); |
| return (*this)[(int)index_value]; |
| } |
| |
| const anytype& Anytypes::operator[](int index_value) const |
| { |
| if (val_ptr == NULL) |
| TTCN_error("Accessing an element in an unbound value of type @General_Types.Anytypes."); |
| if (index_value < 0) TTCN_error("Accessing an element of type @General_Types.Anytypes using a negative index: %d.", index_value); |
| if (index_value >= val_ptr->n_elements) TTCN_error("Index overflow in a value of type @General_Types.Anytypes: The index is %d, but the value has only %d elements.", index_value, val_ptr->n_elements); |
| return (val_ptr->value_elements[index_value] == NULL) ? |
| UNBOUND_ELEM : *val_ptr->value_elements[index_value]; |
| } |
| |
| const anytype& Anytypes::operator[](const INTEGER& index_value) const |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a value of type @General_Types.Anytypes."); |
| return (*this)[(int)index_value]; |
| } |
| |
| Anytypes Anytypes::operator<<=(int rotate_count) const |
| { |
| return *this >>= (-rotate_count); |
| } |
| |
| Anytypes Anytypes::operator<<=(const INTEGER& rotate_count) const |
| { |
| rotate_count.must_bound("Unbound integer operand of rotate left operator."); |
| return *this >>= (int)(-rotate_count); |
| } |
| |
| Anytypes Anytypes::operator>>=(const INTEGER& rotate_count) const |
| { |
| rotate_count.must_bound("Unbound integer operand of rotate right operator."); |
| return *this >>= (int)rotate_count; |
| } |
| |
| Anytypes Anytypes::operator>>=(int rotate_count) const |
| { |
| if (val_ptr == NULL) TTCN_error("Performing rotation operation on an unbound value of type @General_Types.Anytypes."); |
| if (val_ptr->n_elements == 0) return *this; |
| int rc; |
| if (rotate_count>=0) rc = rotate_count % val_ptr->n_elements; |
| else rc = val_ptr->n_elements - ((-rotate_count) % val_ptr->n_elements); |
| if (rc == 0) return *this; |
| Anytypes ret_val; |
| ret_val.set_size(val_ptr->n_elements); |
| for (int i=0; i<val_ptr->n_elements; i++) { |
| if (val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[(i+rc)%val_ptr->n_elements] =new anytype(*val_ptr->value_elements[i]); |
| } |
| } |
| return ret_val; |
| } |
| |
| Anytypes Anytypes::operator+(const Anytypes& other_value) const |
| { |
| if (val_ptr == NULL || other_value.val_ptr == NULL) TTCN_error("Unbound operand of @General_Types.Anytypes concatenation."); |
| if (val_ptr->n_elements == 0) return other_value; |
| if (other_value.val_ptr->n_elements == 0) return *this; |
| Anytypes ret_val; |
| ret_val.set_size(val_ptr->n_elements+other_value.val_ptr->n_elements); |
| for (int i=0; i<val_ptr->n_elements; i++) { |
| if (val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i] = new anytype(*val_ptr->value_elements[i]); |
| } |
| } |
| for (int i=0; i<other_value.val_ptr->n_elements; i++) { |
| if (other_value.val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i+val_ptr->n_elements] = new anytype(*other_value.val_ptr->value_elements[i]); |
| } |
| } |
| return ret_val; |
| } |
| |
| Anytypes Anytypes::substr(int index, int returncount) const |
| { |
| if (val_ptr == NULL) TTCN_error("The first argument of substr() is an unbound value of type @General_Types.Anytypes."); |
| check_substr_arguments(val_ptr->n_elements, index, returncount, "@General_Types.Anytypes","element"); |
| Anytypes ret_val; |
| ret_val.set_size(returncount); |
| for (int i=0; i<returncount; i++) { |
| if (val_ptr->value_elements[i+index] != NULL) { |
| ret_val.val_ptr->value_elements[i] = new anytype(*val_ptr->value_elements[i+index]); |
| } |
| } |
| return ret_val; |
| } |
| |
| Anytypes Anytypes::replace(int index, int len, const Anytypes& repl) const |
| { |
| if (val_ptr == NULL) TTCN_error("The first argument of replace() is an unbound value of type @General_Types.Anytypes."); |
| if (repl.val_ptr == NULL) TTCN_error("The fourth argument of replace() is an unbound value of type @General_Types.Anytypes."); |
| check_replace_arguments(val_ptr->n_elements, index, len, "@General_Types.Anytypes","element"); |
| Anytypes ret_val; |
| ret_val.set_size(val_ptr->n_elements + repl.val_ptr->n_elements - len); |
| for (int i = 0; i < index; i++) { |
| if (val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i] = new anytype(*val_ptr->value_elements[i]); |
| } |
| } |
| for (int i = 0; i < repl.val_ptr->n_elements; i++) { |
| if (repl.val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i+index] = new anytype(*repl.val_ptr->value_elements[i]); |
| } |
| } |
| for (int i = 0; i < val_ptr->n_elements - index - len; i++) { |
| if (val_ptr->value_elements[index+i+len] != NULL) { |
| ret_val.val_ptr->value_elements[index+i+repl.val_ptr->n_elements] = new anytype(*val_ptr->value_elements[index+i+len]); |
| } |
| } |
| return ret_val; |
| } |
| |
| Anytypes Anytypes::replace(int index, int len, const Anytypes_template& repl) const |
| { |
| if (!repl.is_value()) TTCN_error("The fourth argument of function replace() is a template with non-specific value."); |
| return replace(index, len, repl.valueof()); |
| } |
| |
| void Anytypes::set_size(int new_size) |
| { |
| if (new_size < 0) TTCN_error("Internal error: Setting a negative size for a value of type @General_Types.Anytypes."); |
| if (val_ptr == NULL) { |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| } else if (val_ptr->ref_count > 1) { |
| struct recordof_setof_struct *new_val_ptr = new recordof_setof_struct; |
| new_val_ptr->ref_count = 1; |
| new_val_ptr->n_elements = (new_size < val_ptr->n_elements) ? new_size : val_ptr->n_elements; |
| new_val_ptr->value_elements = (anytype**)allocate_pointers(new_val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < new_val_ptr->n_elements; elem_count++) { |
| if (val_ptr->value_elements[elem_count] != NULL){ |
| new_val_ptr->value_elements[elem_count] = new anytype(*(val_ptr->value_elements[elem_count])); |
| } |
| } |
| clean_up(); |
| val_ptr = new_val_ptr; |
| } |
| if (new_size > val_ptr->n_elements) { |
| val_ptr->value_elements = (anytype**)reallocate_pointers((void**)val_ptr->value_elements, val_ptr->n_elements, new_size); |
| #ifdef TITAN_MEMORY_DEBUG_SET_RECORD_OF |
| if((val_ptr->n_elements/1000)!=(new_size/1000)) TTCN_warning("New size of type @General_Types.Anytypes: %d",new_size); |
| #endif |
| val_ptr->n_elements = new_size; |
| } else if (new_size < val_ptr->n_elements) { |
| for (int elem_count = new_size; elem_count < val_ptr->n_elements; elem_count++) |
| if (val_ptr->value_elements[elem_count] != NULL)delete val_ptr->value_elements[elem_count]; |
| val_ptr->value_elements = (anytype**)reallocate_pointers((void**)val_ptr->value_elements, val_ptr->n_elements, new_size); |
| val_ptr->n_elements = new_size; |
| } |
| } |
| |
| boolean Anytypes::is_value() const |
| { |
| if (val_ptr == NULL) return FALSE; |
| for(int i = 0; i < val_ptr->n_elements; ++i) { |
| if (val_ptr->value_elements[i] == NULL || !val_ptr->value_elements[i]->is_value()) return FALSE; |
| } |
| return TRUE; |
| } |
| |
| int Anytypes::size_of() const |
| { |
| if (val_ptr == NULL) TTCN_error("Performing sizeof operation on an unbound value of type @General_Types.Anytypes."); |
| return val_ptr->n_elements; |
| } |
| |
| int Anytypes::lengthof() const |
| { |
| if (val_ptr == NULL) TTCN_error("Performing lengthof operation on an unbound value of type @General_Types.Anytypes."); |
| for (int my_length=val_ptr->n_elements; my_length>0; my_length--) if (val_ptr->value_elements[my_length-1] != NULL) return my_length; |
| return 0; |
| } |
| |
| void Anytypes::log() const |
| { |
| if (val_ptr == NULL) {; |
| TTCN_Logger::log_event_unbound(); |
| return; |
| } |
| switch (val_ptr->n_elements) { |
| case 0: |
| TTCN_Logger::log_event_str("{ }"); |
| break; |
| default: |
| TTCN_Logger::log_event_str("{ "); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) { |
| if (elem_count > 0) TTCN_Logger::log_event_str(", "); |
| (*this)[elem_count].log(); |
| } |
| TTCN_Logger::log_event_str(" }"); |
| } |
| } |
| |
| void Anytypes::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE|Module_Param::BC_LIST, "record of value"); |
| switch (param.get_operation_type()) { |
| case Module_Param::OT_ASSIGN: |
| if (param.get_type()==Module_Param::MP_Value_List && param.get_size()==0) { |
| *this = NULL_VALUE; |
| return; |
| } |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: |
| set_size(param.get_size()); |
| for (size_t i=0; i<param.get_size(); ++i) { |
| Module_Param* const curr = param.get_elem(i); |
| if (curr->get_type()!=Module_Param::MP_NotUsed) { |
| (*this)[i].set_param(*curr); |
| if (!(*this)[i].is_bound()) { |
| delete val_ptr->value_elements[i]; |
| val_ptr->value_elements[i] = NULL; |
| } |
| } |
| } |
| break; |
| case Module_Param::MP_Indexed_List: |
| for (size_t i=0; i<param.get_size(); ++i) { |
| Module_Param* const curr = param.get_elem(i); |
| (*this)[curr->get_id()->get_index()].set_param(*curr); |
| if (!(*this)[curr->get_id()->get_index()].is_bound()) { |
| delete val_ptr->value_elements[curr->get_id()->get_index()]; |
| val_ptr->value_elements[curr->get_id()->get_index()] = NULL; |
| } |
| } |
| break; |
| default: |
| param.type_error("record of value", "@General_Types.Anytypes"); |
| } |
| break; |
| case Module_Param::OT_CONCAT: |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: { |
| if (!is_bound()) *this = NULL_VALUE; |
| int start_idx = lengthof(); |
| for (size_t i=0; i<param.get_size(); ++i) { |
| Module_Param* const curr = param.get_elem(i); |
| if ((curr->get_type()!=Module_Param::MP_NotUsed)) { |
| (*this)[start_idx+(int)i].set_param(*curr); |
| } |
| } |
| } break; |
| case Module_Param::MP_Indexed_List: |
| param.error("Cannot concatenate an indexed value list"); |
| break; |
| default: |
| param.type_error("record of value", "@General_Types.Anytypes"); |
| } |
| break; |
| default: |
| TTCN_error("Internal error: Unknown operation type."); |
| } |
| } |
| |
| void Anytypes::set_implicit_omit() |
| { |
| if (val_ptr == NULL) return; |
| for (int i = 0; i < val_ptr->n_elements; i++) { |
| if (val_ptr->value_elements[i] != NULL) val_ptr->value_elements[i]->set_implicit_omit(); |
| } |
| } |
| |
| void Anytypes::encode_text(Text_Buf& text_buf) const |
| { |
| if (val_ptr == NULL) TTCN_error("Text encoder: Encoding an unbound value of type @General_Types.Anytypes."); |
| text_buf.push_int(val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) |
| (*this)[elem_count].encode_text(text_buf); |
| } |
| |
| void Anytypes::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = text_buf.pull_int().get_val(); |
| if (val_ptr->n_elements < 0) TTCN_error("Text decoder: Negative size was received for a value of type @General_Types.Anytypes."); |
| val_ptr->value_elements = (anytype**)allocate_pointers(val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) { |
| val_ptr->value_elements[elem_count] = new anytype; |
| val_ptr->value_elements[elem_count]->decode_text(text_buf); |
| } |
| } |
| |
| void Anytypes::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t 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); |
| 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;} |
| default: |
| TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| void Anytypes::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t 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(); |
| if(b_data[p_buf.get_len()-1]!='\0'){ |
| 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); |
| 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)<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;} |
| default: |
| TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| int Anytypes::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean /*no_err*/, int sel_field, boolean first_call, const RAW_Force_Omit*){ |
| int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding); |
| limit-=prepaddlength; |
| int decoded_length=0; |
| int decoded_field_length=0; |
| size_t start_of_field=0; |
| if(first_call) { |
| clean_up(); |
| val_ptr=new recordof_setof_struct; |
| val_ptr->ref_count=1; |
| val_ptr->n_elements=0; |
| val_ptr->value_elements=NULL; |
| } |
| int start_field=val_ptr->n_elements; |
| if(p_td.raw->fieldlength || sel_field!=-1){ |
| int a=0; |
| if(sel_field==-1) sel_field=p_td.raw->fieldlength; |
| for(a=0;a<sel_field;a++){ |
| decoded_field_length=(*this)[a+start_field].RAW_decode(*p_td.oftype_descr,p_buf,limit,top_bit_ord,TRUE); |
| if(decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| } |
| if(a==0) val_ptr->n_elements=0; |
| } else { |
| if(limit==0){ |
| if(!first_call) return -1; |
| val_ptr->n_elements=0; |
| return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength; |
| } |
| int a=start_field; |
| while(limit>0){ |
| start_of_field=p_buf.get_pos_bit(); |
| decoded_field_length=(*this)[a].RAW_decode(*p_td.oftype_descr,p_buf,limit,top_bit_ord,TRUE); |
| if(decoded_field_length < 0){ |
| delete &(*this)[a]; |
| val_ptr->n_elements--; |
| p_buf.set_pos_bit(start_of_field); |
| if(a>start_field){ |
| return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength; |
| } else return -1; |
| } |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| a++; |
| } |
| } |
| return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength; |
| } |
| |
| int Anytypes::RAW_encode(const TTCN_Typedescriptor_t& p_td,RAW_enc_tree& myleaf) const{ |
| int encoded_length=0; |
| int encoded_num_of_records=p_td.raw->fieldlength?smaller(val_ptr->n_elements, p_td.raw->fieldlength):val_ptr->n_elements; |
| myleaf.isleaf=FALSE; |
| myleaf.rec_of=TRUE; |
| myleaf.body.node.num_of_nodes=encoded_num_of_records; |
| myleaf.body.node.nodes=init_nodes_of_enc_tree(encoded_num_of_records); |
| for(int a=0;a<encoded_num_of_records;a++){ |
| myleaf.body.node.nodes[a]=new RAW_enc_tree(TRUE,&myleaf,&(myleaf.curr_pos),a,p_td.oftype_descr->raw); |
| encoded_length+=(*this)[a].RAW_encode(*p_td.oftype_descr,*myleaf.body.node.nodes[a]); |
| } |
| return myleaf.length=encoded_length; |
| } |
| |
| void Anytypes_template::copy_value(const Anytypes& other_value) |
| { |
| if (!other_value.is_bound()) TTCN_error("Initialization of a template of type @General_Types.Anytypes with an unbound value."); |
| single_value.n_elements = other_value.size_of(); |
| single_value.value_elements = (anytype_template**)allocate_pointers(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (other_value[elem_count].is_bound()) { |
| single_value.value_elements[elem_count] = new anytype_template(other_value[elem_count]); |
| } else { |
| single_value.value_elements[elem_count] = new anytype_template; |
| } |
| } |
| set_selection(SPECIFIC_VALUE); |
| } |
| |
| void Anytypes_template::copy_template(const Anytypes_template& other_value) |
| { |
| switch (other_value.template_selection) { |
| case SPECIFIC_VALUE: |
| single_value.n_elements = other_value.single_value.n_elements; |
| single_value.value_elements = (anytype_template**)allocate_pointers(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (UNINITIALIZED_TEMPLATE != other_value.single_value.value_elements[elem_count]->get_selection()) { |
| single_value.value_elements[elem_count] = new anytype_template(*other_value.single_value.value_elements[elem_count]); |
| } else { |
| single_value.value_elements[elem_count] = new anytype_template; |
| } |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new Anytypes_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; |
| default: |
| TTCN_error("Copying an uninitialized/unsupported template of type @General_Types.Anytypes."); |
| break; |
| } |
| set_selection(other_value); |
| } |
| |
| boolean Anytypes_template::match_function_specific(const Base_Type *value_ptr, int value_index, const Restricted_Length_Template *template_ptr, int template_index, boolean legacy) |
| { |
| if (value_index >= 0) return ((const Anytypes_template*)template_ptr)->single_value.value_elements[template_index]->match((*(const Anytypes*)value_ptr)[value_index], legacy); |
| else return ((const Anytypes_template*)template_ptr)->single_value.value_elements[template_index]->is_any_or_omit(); |
| } |
| |
| Anytypes_template::Anytypes_template() |
| { |
| } |
| |
| Anytypes_template::Anytypes_template(template_sel other_value) |
| : Record_Of_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| Anytypes_template::Anytypes_template(null_type) |
| : Record_Of_Template(SPECIFIC_VALUE) |
| { |
| single_value.n_elements = 0; |
| single_value.value_elements = NULL; |
| } |
| |
| Anytypes_template::Anytypes_template(const Anytypes& other_value) |
| { |
| copy_value(other_value); |
| } |
| |
| Anytypes_template::Anytypes_template(const OPTIONAL<Anytypes>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const Anytypes&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of type @General_Types.Anytypes from an unbound optional field."); |
| } |
| } |
| |
| Anytypes_template::Anytypes_template(const Anytypes_template& other_value) |
| : Record_Of_Template() |
| { |
| copy_template(other_value); |
| } |
| |
| Anytypes_template::~Anytypes_template() |
| { |
| clean_up(); |
| } |
| |
| void Anytypes_template::clean_up() |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| delete single_value.value_elements[elem_count]; |
| free_pointers((void**)single_value.value_elements); |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| delete [] value_list.list_value; |
| default: |
| break; |
| } |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| Anytypes_template& Anytypes_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| Anytypes_template& Anytypes_template::operator=(null_type) |
| { |
| clean_up(); |
| set_selection(SPECIFIC_VALUE); |
| single_value.n_elements = 0; |
| single_value.value_elements = NULL; |
| return *this; |
| } |
| |
| Anytypes_template& Anytypes_template::operator=(const Anytypes& other_value) |
| { |
| clean_up(); |
| copy_value(other_value); |
| return *this; |
| } |
| |
| Anytypes_template& Anytypes_template::operator=(const OPTIONAL<Anytypes>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const Anytypes&)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 @General_Types.Anytypes."); |
| } |
| return *this; |
| } |
| |
| Anytypes_template& Anytypes_template::operator=(const Anytypes_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| anytype_template& Anytypes_template::operator[](int index_value) |
| { |
| if (index_value < 0) TTCN_error("Accessing an element of a template for type @General_Types.Anytypes using a negative index: %d.", index_value); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: |
| if(index_value < single_value.n_elements) break; |
| // no break |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| case UNINITIALIZED_TEMPLATE: |
| set_size(index_value + 1); |
| break; |
| default: |
| TTCN_error("Accessing an element of a non-specific template for type @General_Types.Anytypes."); |
| break; |
| } |
| return *single_value.value_elements[index_value]; |
| } |
| |
| anytype_template& Anytypes_template::operator[](const INTEGER& index_value) |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a template of type @General_Types.Anytypes."); |
| return (*this)[(int)index_value]; |
| } |
| |
| const anytype_template& Anytypes_template::operator[](int index_value) const |
| { |
| if (index_value < 0) TTCN_error("Accessing an element of a template for type @General_Types.Anytypes using a negative index: %d.", index_value); |
| if (template_selection != SPECIFIC_VALUE) TTCN_error("Accessing an element of a non-specific template for type @General_Types.Anytypes."); |
| if (index_value >= single_value.n_elements) TTCN_error("Index overflow in a template of type @General_Types.Anytypes: The index is %d, but the template has only %d elements.", index_value, single_value.n_elements); |
| return *single_value.value_elements[index_value]; |
| } |
| |
| const anytype_template& Anytypes_template::operator[](const INTEGER& index_value) const |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a template of type @General_Types.Anytypes."); |
| return (*this)[(int)index_value]; |
| } |
| |
| void Anytypes_template::set_size(int new_size) |
| { |
| if (new_size < 0) TTCN_error("Internal error: Setting a negative size for a template of type @General_Types.Anytypes."); |
| template_sel old_selection = template_selection; |
| if (old_selection != SPECIFIC_VALUE) { |
| clean_up(); |
| set_selection(SPECIFIC_VALUE); |
| single_value.n_elements = 0; |
| single_value.value_elements = NULL; |
| } |
| if (new_size > single_value.n_elements) { |
| single_value.value_elements = (anytype_template**)reallocate_pointers((void**)single_value.value_elements, single_value.n_elements, new_size); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) { |
| for (int elem_count = single_value.n_elements; elem_count < new_size; elem_count++) |
| single_value.value_elements[elem_count] = new anytype_template(ANY_VALUE); |
| } else { |
| for (int elem_count = single_value.n_elements; elem_count < new_size; elem_count++) |
| single_value.value_elements[elem_count] = new anytype_template; |
| } |
| single_value.n_elements = new_size; |
| } else if (new_size < single_value.n_elements) { |
| for (int elem_count = new_size; elem_count < single_value.n_elements; elem_count++) |
| delete single_value.value_elements[elem_count]; |
| single_value.value_elements = (anytype_template**)reallocate_pointers((void**)single_value.value_elements, single_value.n_elements, new_size); |
| single_value.n_elements = new_size; |
| } |
| } |
| |
| int Anytypes_template::n_elem() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| return single_value.n_elements; |
| break; |
| case VALUE_LIST: |
| return value_list.n_values; |
| break; |
| default: |
| TTCN_error("Performing n_elem"); |
| } |
| } |
| |
| int Anytypes_template::size_of(boolean is_size) const |
| { |
| const char* op_name = is_size ? "size" : "length"; |
| int min_size; |
| boolean has_any_or_none; |
| if (is_ifpresent) TTCN_error("Performing %sof() operation on a template of type @General_Types.Anytypes which has an ifpresent attribute.", op_name); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: { |
| min_size = 0; |
| has_any_or_none = FALSE; |
| int elem_count = single_value.n_elements; |
| if (!is_size) { while (elem_count>0 && !single_value.value_elements[elem_count-1]->is_bound()) elem_count--; } |
| for (int i=0; i<elem_count; i++) { |
| switch (single_value.value_elements[i]->get_selection()) { |
| case OMIT_VALUE: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.Anytypes containing omit element.", op_name); |
| case ANY_OR_OMIT: |
| has_any_or_none = TRUE; |
| break; |
| default: |
| min_size++; |
| break; |
| } |
| } |
| } break; |
| case OMIT_VALUE: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.Anytypes containing omit value.", op_name); |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| min_size = 0; |
| has_any_or_none = TRUE; |
| break; |
| case VALUE_LIST: |
| { |
| if (value_list.n_values<1) |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.Anytypes containing an empty list.", op_name); |
| int item_size = value_list.list_value[0].size_of(is_size); |
| for (unsigned int i = 1; i < value_list.n_values; i++) { |
| if (value_list.list_value[i].size_of(is_size)!=item_size) |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.Anytypes containing a value list with different sizes.", op_name); |
| } |
| min_size = item_size; |
| has_any_or_none = FALSE; |
| break; |
| } |
| case COMPLEMENTED_LIST: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.Anytypes containing complemented list.", op_name); |
| default: |
| TTCN_error("Performing %sof() operation on an uninitialized/unsupported template of type @General_Types.Anytypes.", op_name); |
| } |
| return check_section_is_single(min_size, has_any_or_none, op_name, "a", "template of type @General_Types.Anytypes"); |
| } |
| |
| boolean Anytypes_template::match(const Anytypes& other_value, boolean legacy) const |
| { |
| if (!other_value.is_bound()) return FALSE; |
| int value_length = other_value.size_of(); |
| if (!match_length(value_length)) return FALSE; |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| return match_record_of(&other_value, value_length, this, single_value.n_elements, match_function_specific, legacy); |
| case OMIT_VALUE: |
| return FALSE; |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| 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; |
| default: |
| TTCN_error("Matching with an uninitialized/unsupported template of type @General_Types.Anytypes."); |
| } |
| return FALSE; |
| } |
| |
| boolean Anytypes_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| if (!single_value.value_elements[elem_count]->is_value()) return FALSE; |
| return TRUE; |
| } |
| |
| Anytypes Anytypes_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 @General_Types.Anytypes."); |
| Anytypes ret_val; |
| ret_val.set_size(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| if (single_value.value_elements[elem_count]->is_bound()) { |
| ret_val[elem_count] = single_value.value_elements[elem_count]->valueof(); |
| } |
| return ret_val; |
| } |
| |
| Anytypes Anytypes_template::substr(int index, int returncount) const |
| { |
| if (!is_value()) TTCN_error("The first argument of function substr() is a template with non-specific value."); |
| return valueof().substr(index, returncount); |
| } |
| |
| Anytypes Anytypes_template::replace(int index, int len, const Anytypes_template& repl) const |
| { |
| if (!is_value()) TTCN_error("The first argument of function replace() is a template with non-specific value."); |
| if (!repl.is_value()) TTCN_error("The fourth argument of function replace() is a template with non-specific value."); |
| return valueof().replace(index, len, repl.valueof()); |
| } |
| |
| Anytypes Anytypes_template::replace(int index, int len, const Anytypes& repl) const |
| { |
| if (!is_value()) TTCN_error("The first argument of function replace() is a template with non-specific value."); |
| return valueof().replace(index, len, repl); |
| } |
| |
| void Anytypes_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| clean_up(); |
| switch (template_type) { |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = list_length; |
| value_list.list_value = new Anytypes_template[list_length]; |
| break; |
| default: |
| TTCN_error("Internal error: Setting an invalid type for a template of type @General_Types.Anytypes."); |
| } |
| set_selection(template_type); |
| } |
| |
| Anytypes_template& Anytypes_template::list_item(unsigned int list_index) |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) TTCN_error("Internal error: Accessing a list element of a non-list template of type @General_Types.Anytypes."); |
| if (list_index >= value_list.n_values) TTCN_error("Internal error: Index overflow in a value list template of type @General_Types.Anytypes."); |
| return value_list.list_value[list_index]; |
| } |
| |
| void Anytypes_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| if (single_value.n_elements > 0) { |
| TTCN_Logger::log_event_str("{ "); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (elem_count > 0) TTCN_Logger::log_event_str(", "); |
| if (permutation_starts_at(elem_count)) TTCN_Logger::log_event_str("permutation("); |
| single_value.value_elements[elem_count]->log(); |
| if (permutation_ends_at(elem_count)) TTCN_Logger::log_char(')'); |
| } |
| TTCN_Logger::log_event_str(" }"); |
| } else TTCN_Logger::log_event_str("{ }"); |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| 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; |
| default: |
| log_generic(); |
| } |
| log_restricted(); |
| log_ifpresent(); |
| } |
| |
| void Anytypes_template::log_match(const Anytypes& 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 && single_value.n_elements > 0 && get_number_of_permutations() == 0 && single_value.n_elements == match_value.size_of()) { |
| size_t previous_size = TTCN_Logger::get_logmatch_buffer_len(); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if(!single_value.value_elements[elem_count]->match(match_value[elem_count], legacy)){ |
| TTCN_Logger::log_logmatch_info("[%d]", elem_count); |
| single_value.value_elements[elem_count]->log_match(match_value[elem_count], legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| } |
| log_match_length(single_value.n_elements); |
| } 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 && single_value.n_elements > 0 && get_number_of_permutations() == 0 && single_value.n_elements == match_value.size_of()) { |
| TTCN_Logger::log_event_str("{ "); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (elem_count > 0) TTCN_Logger::log_event_str(", "); |
| single_value.value_elements[elem_count]->log_match(match_value[elem_count], legacy); |
| } |
| TTCN_Logger::log_event_str(" }"); |
| log_match_length(single_value.n_elements); |
| } 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 Anytypes_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_permutation(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| text_buf.push_int(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| single_value.value_elements[elem_count]->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 @General_Types.Anytypes."); |
| } |
| } |
| |
| void Anytypes_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_permutation(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value.n_elements = text_buf.pull_int().get_val(); |
| if (single_value.n_elements < 0) TTCN_error("Text decoder: Negative size was received for a template of type @General_Types.Anytypes."); |
| single_value.value_elements = (anytype_template**)allocate_pointers(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| single_value.value_elements[elem_count] = new anytype_template; |
| single_value.value_elements[elem_count]->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 Anytypes_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 for a template of type @General_Types.Anytypes."); |
| } |
| } |
| |
| boolean Anytypes_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean Anytypes_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int i=0; i<value_list.n_values; i++) |
| if (value_list.list_value[i].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| void Anytypes_template::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_TEMPLATE|Module_Param::BC_LIST, "record of 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: { |
| Anytypes_template temp; |
| temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); |
| for (size_t p_i=0; p_i<param.get_size(); p_i++) { |
| temp.list_item(p_i).set_param(*param.get_elem(p_i)); |
| } |
| *this = temp; |
| break; } |
| case Module_Param::MP_Indexed_List: |
| if (template_selection!=SPECIFIC_VALUE) set_size(0); |
| for (size_t p_i=0; p_i<param.get_size(); ++p_i) { |
| (*this)[(int)(param.get_elem(p_i)->get_id()->get_index())].set_param(*param.get_elem(p_i)); |
| } |
| break; |
| case Module_Param::MP_Value_List: { |
| set_size(param.get_size()); |
| int curr_idx = 0; |
| for (size_t p_i=0; p_i<param.get_size(); ++p_i) { |
| switch (param.get_elem(p_i)->get_type()) { |
| case Module_Param::MP_NotUsed: |
| curr_idx++; |
| break; |
| case Module_Param::MP_Permutation_Template: { |
| int perm_start_idx = curr_idx; |
| Module_Param* param_i = param.get_elem(p_i); |
| for (size_t perm_i=0; perm_i<param_i->get_size(); perm_i++) { |
| (*this)[curr_idx].set_param(*(param_i->get_elem(perm_i))); |
| curr_idx++; |
| } |
| int perm_end_idx = curr_idx - 1; |
| add_permutation(perm_start_idx, perm_end_idx); |
| } break; |
| default: |
| (*this)[curr_idx].set_param(*param.get_elem(p_i)); |
| curr_idx++; |
| } |
| } |
| } break; |
| default: |
| param.type_error("record of template", "@General_Types.Anytypes"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| set_length_range(param); |
| } |
| |
| void Anytypes_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; |
| for (int i=0; i<single_value.n_elements; i++) single_value.value_elements[i]->check_restriction(t_res, t_name ? t_name : "@General_Types.Anytypes"); |
| 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 : "@General_Types.Anytypes"); |
| } |
| |
| boolean Anytypes_template::get_istemplate_kind(const char* type) const { |
| if (!strcmp(type, "AnyElement")) { |
| if (template_selection != SPECIFIC_VALUE) { |
| return FALSE; |
| } |
| for (int i = 0; i < single_value.n_elements; i++) { |
| if (single_value.value_elements[i]->get_selection() == ANY_VALUE) { |
| return TRUE; |
| } |
| } |
| return FALSE; |
| } else if (!strcmp(type, "AnyElementsOrNone")) { |
| if (template_selection != SPECIFIC_VALUE) { |
| return FALSE; |
| } |
| for (int i = 0; i < single_value.n_elements; i++) { |
| if (single_value.value_elements[i]->get_selection() == ANY_OR_OMIT) { |
| return TRUE; |
| } |
| } |
| return FALSE; |
| } else if (!strcmp(type, "permutation")) { |
| return number_of_permutations; |
| } else if (!strcmp(type, "length")) { |
| return length_restriction_type != NO_LENGTH_RESTRICTION; |
| } else { |
| return Base_Template::get_istemplate_kind(type); |
| } |
| } |
| void anytype::copy_value(const anytype& other_value) |
| { |
| switch (other_value.union_selection) { |
| default: |
| TTCN_error("Assignment of an unbound union value of type @General_Types.anytype."); |
| } |
| union_selection = other_value.union_selection; |
| } |
| |
| anytype::anytype() |
| { |
| union_selection = UNBOUND_VALUE; |
| } |
| |
| anytype::anytype(const anytype& other_value) |
| : Base_Type(){ |
| copy_value(other_value); |
| } |
| |
| anytype::~anytype() |
| { |
| clean_up(); |
| } |
| |
| anytype& anytype::operator=(const anytype& other_value) |
| { |
| if (this != &other_value) { |
| clean_up(); |
| copy_value(other_value); |
| } |
| return *this; |
| } |
| |
| boolean anytype::operator==(const anytype& other_value) const |
| { |
| if (union_selection == UNBOUND_VALUE) TTCN_error("The left operand of comparison is an unbound value of union type @General_Types.anytype."); |
| if (other_value.union_selection == UNBOUND_VALUE) TTCN_error("The right operand of comparison is an unbound value of union type @General_Types.anytype."); |
| if (union_selection != other_value.union_selection) return FALSE; |
| switch (union_selection) { |
| default: |
| return FALSE; |
| } |
| } |
| |
| boolean anytype::ischosen(union_selection_type checked_selection) const |
| { |
| if (checked_selection == UNBOUND_VALUE) TTCN_error("Internal error: Performing ischosen() operation on an invalid field of union type @General_Types.anytype."); |
| return union_selection == checked_selection; |
| } |
| |
| boolean anytype::is_bound() const |
| { |
| return union_selection != UNBOUND_VALUE; |
| } |
| |
| boolean anytype::is_value() const |
| { |
| switch (union_selection) { |
| case UNBOUND_VALUE: return FALSE; |
| default: TTCN_error("Invalid selection in union is_bound");} |
| } |
| |
| void anytype::clean_up() |
| { |
| switch (union_selection) { |
| default: |
| break; |
| } |
| union_selection = UNBOUND_VALUE; |
| } |
| |
| void anytype::log() const |
| { |
| switch (union_selection) { |
| default: |
| TTCN_Logger::log_event_unbound(); |
| } |
| } |
| |
| void anytype::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE, "union value"); |
| Module_Param_Ptr m_p = ¶m; |
| if (m_p->get_type()==Module_Param::MP_Value_List && m_p->get_size()==0) return; |
| if (m_p->get_type()!=Module_Param::MP_Assignment_List) { |
| param.error("union value with field name was expected"); |
| } |
| Module_Param* mp_last = m_p->get_elem(m_p->get_size()-1); |
| char* last_name = mp_last->get_id()->get_name(); |
| mp_last->error("Field %s does not exist in type @General_Types.anytype.", last_name); |
| } |
| |
| void anytype::set_implicit_omit() |
| { |
| switch (union_selection) { |
| default: break; |
| } |
| } |
| |
| void anytype::encode_text(Text_Buf& text_buf) const |
| { |
| text_buf.push_int(union_selection); |
| switch (union_selection) { |
| default: |
| TTCN_error("Text encoder: Encoding an unbound value of union type @General_Types.anytype."); |
| } |
| } |
| |
| void anytype::decode_text(Text_Buf& text_buf) |
| { |
| switch ((union_selection_type)text_buf.pull_int().get_val()) { |
| default: |
| TTCN_error("Text decoder: Unrecognized union selector was received for type @General_Types.anytype."); |
| } |
| } |
| |
| void anytype_template::copy_value(const anytype& other_value) |
| { |
| single_value.union_selection = other_value.get_selection(); |
| switch (single_value.union_selection) { |
| default: |
| TTCN_error("Initializing a template with an unbound value of type @General_Types.anytype."); |
| } |
| set_selection(SPECIFIC_VALUE); |
| } |
| |
| void anytype_template::copy_template(const anytype_template& other_value) |
| { |
| switch (other_value.template_selection) { |
| case SPECIFIC_VALUE: |
| single_value.union_selection = other_value.single_value.union_selection; |
| switch (single_value.union_selection) { |
| default: |
| TTCN_error("Internal error: Invalid union selector in a specific value when copying a template of type @General_Types.anytype."); |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new anytype_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; |
| default: |
| TTCN_error("Copying an uninitialized template of union type @General_Types.anytype."); |
| } |
| set_selection(other_value); |
| } |
| |
| anytype_template::anytype_template() |
| { |
| } |
| |
| anytype_template::anytype_template(template_sel other_value) |
| : Base_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| anytype_template::anytype_template(const anytype& other_value) |
| { |
| copy_value(other_value); |
| } |
| |
| anytype_template::anytype_template(const OPTIONAL<anytype>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const anytype&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of union type @General_Types.anytype from an unbound optional field."); |
| } |
| } |
| |
| anytype_template::anytype_template(const anytype_template& other_value) |
| : Base_Template(){ |
| copy_template(other_value); |
| } |
| |
| anytype_template::~anytype_template() |
| { |
| clean_up(); |
| } |
| |
| void anytype_template::clean_up() |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| switch (single_value.union_selection) { |
| default: |
| break; |
| } |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| delete [] value_list.list_value; |
| default: |
| break; |
| } |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| anytype_template& anytype_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| anytype_template& anytype_template::operator=(const anytype& other_value) |
| { |
| clean_up(); |
| copy_value(other_value); |
| return *this; |
| } |
| |
| anytype_template& anytype_template::operator=(const OPTIONAL<anytype>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const anytype&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Assignment of an unbound optional field to a template of union type @General_Types.anytype."); |
| } |
| return *this; |
| } |
| |
| anytype_template& anytype_template::operator=(const anytype_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| boolean anytype_template::match(const anytype& 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: |
| { |
| anytype::union_selection_type value_selection = other_value.get_selection(); |
| if (value_selection == anytype::UNBOUND_VALUE) return FALSE; |
| if (value_selection != single_value.union_selection) return FALSE; |
| switch (value_selection) { |
| default: |
| TTCN_error("Internal error: Invalid selector in a specific value when matching a template of union type @General_Types.anytype."); |
| } |
| } |
| 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; |
| default: |
| TTCN_error ("Matching an uninitialized template of union type @General_Types.anytype."); |
| } |
| return FALSE; |
| } |
| |
| boolean anytype_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| switch (single_value.union_selection) { |
| default: |
| TTCN_error("Internal error: Invalid selector in a specific value when performing is_value operation on a template of union type @General_Types.anytype."); |
| } |
| } |
| |
| anytype anytype_template::valueof() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) |
| TTCN_error("Performing a valueof or send operation on a non-specific template of union type @General_Types.anytype."); |
| anytype ret_val; |
| switch (single_value.union_selection) { |
| default: |
| TTCN_error("Internal error: Invalid selector in a specific value when performing valueof operation on a template of union type @General_Types.anytype."); |
| } |
| return ret_val; |
| } |
| |
| anytype_template& anytype_template::list_item(unsigned int list_index) const |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) TTCN_error("Internal error: Accessing a list element of a non-list template of union type @General_Types.anytype."); |
| if (list_index >= value_list.n_values) TTCN_error("Internal error: Index overflow in a value list template of union type @General_Types.anytype."); |
| return value_list.list_value[list_index]; |
| } |
| void anytype_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST) TTCN_error ("Internal error: Setting an invalid list for a template of union type @General_Types.anytype."); |
| clean_up(); |
| set_selection(template_type); |
| value_list.n_values = list_length; |
| value_list.list_value = new anytype_template[list_length]; |
| } |
| |
| boolean anytype_template::ischosen(anytype::union_selection_type checked_selection) const |
| { |
| if (checked_selection == anytype::UNBOUND_VALUE) TTCN_error("Internal error: Performing ischosen() operation on an invalid field of union type @General_Types.anytype."); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| if (single_value.union_selection == anytype::UNBOUND_VALUE) TTCN_error("Internal error: Invalid selector in a specific value when performing ischosen() operation on a template of union type @General_Types.anytype."); |
| return single_value.union_selection == checked_selection; |
| case VALUE_LIST: |
| { |
| if (value_list.n_values < 1) |
| TTCN_error("Internal error: Performing ischosen() operation on a template of union type @General_Types.anytype containing an empty list."); |
| boolean ret_val = value_list.list_value[0].ischosen(checked_selection); |
| for (unsigned int list_count = 1; ret_val == TRUE && list_count < value_list.n_values; list_count++) { |
| ret_val = value_list.list_value[list_count].ischosen(checked_selection); |
| } |
| return ret_val; |
| } |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| void anytype_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| switch (single_value.union_selection) { |
| default: |
| TTCN_Logger::log_event_str("<invalid selector>"); |
| } |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| 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; |
| default: |
| log_generic(); |
| } |
| log_ifpresent(); |
| } |
| |
| void anytype_template::log_match(const anytype& match_value, boolean legacy) const |
| { |
| if(TTCN_Logger::VERBOSITY_COMPACT == TTCN_Logger::get_matching_verbosity() && match(match_value, legacy)){ |
| TTCN_Logger::print_logmatch_buffer(); |
| TTCN_Logger::log_event_str(" matched"); |
| return; |
| } |
| if (template_selection == SPECIFIC_VALUE && single_value.union_selection == match_value.get_selection()) { |
| switch (single_value.union_selection) { |
| default: |
| TTCN_Logger::print_logmatch_buffer(); |
| TTCN_Logger::log_event_str("<invalid selector>"); |
| } |
| } else { |
| TTCN_Logger::print_logmatch_buffer(); |
| 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 anytype_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| text_buf.push_int(single_value.union_selection); |
| switch (single_value.union_selection) { |
| default: |
| TTCN_error("Internal error: Invalid selector in a specific value when encoding a template of union type @General_Types.anytype."); |
| } |
| 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 template of type @General_Types.anytype."); |
| } |
| } |
| |
| void anytype_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| { |
| single_value.union_selection = anytype::UNBOUND_VALUE; |
| anytype::union_selection_type new_selection = (anytype::union_selection_type)text_buf.pull_int().get_val(); |
| switch (new_selection) { |
| default: |
| TTCN_error("Text decoder: Unrecognized union selector was received for a template of type @General_Types.anytype."); |
| } |
| single_value.union_selection = new_selection; |
| } |
| 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 anytype_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: Unrecognized selector was received in a template of type @General_Types.anytype."); |
| } |
| } |
| |
| boolean anytype_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean anytype_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int v_idx=0; v_idx<value_list.n_values; v_idx++) |
| if (value_list.list_value[v_idx].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| void anytype_template::set_param(Module_Param& param) |
| { |
| if (dynamic_cast<Module_Param_Name*>(param.get_id()) != NULL && |
| param.get_id()->next_name()) { |
| char* param_field = param.get_id()->get_current_name(); |
| if (param_field[0] >= '0' && param_field[0] <= '9') { |
| param.error("Unexpected array index in module parameter, expected a valid field" |
| " name for union template type `@General_Types.anytype'"); |
| } |
| param.error("Field `%s' not found in union template type `@General_Types.anytype'", param_field); |
| } |
| param.basic_check(Module_Param::BC_TEMPLATE, "union template"); |
| Module_Param_Ptr m_p = ¶m; |
| switch (m_p->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: { |
| anytype_template new_temp; |
| new_temp.set_type(m_p->get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, m_p->get_size()); |
| for (size_t p_i=0; p_i<m_p->get_size(); p_i++) { |
| new_temp.list_item(p_i).set_param(*m_p->get_elem(p_i)); |
| } |
| *this = new_temp; |
| break; } |
| case Module_Param::MP_Value_List: |
| if (m_p->get_size()==0) break; |
| param.type_error("union template", "@General_Types.anytype"); |
| break; |
| case Module_Param::MP_Assignment_List: { |
| Module_Param* mp_last = m_p->get_elem(m_p->get_size()-1); |
| char* last_name = mp_last->get_id()->get_name(); |
| mp_last->error("Field %s does not exist in type @General_Types.anytype.", last_name); |
| } break; |
| default: |
| param.type_error("union template", "@General_Types.anytype"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| } |
| |
| void anytype_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; |
| switch (single_value.union_selection) { |
| default: |
| TTCN_error("Internal error: Invalid selector in a specific value when performing check_restriction operation on a template of union type @General_Types.anytype."); |
| } |
| 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 : "@General_Types.anytype"); |
| } |
| |
| |
| const anytype AnytypeSet::UNBOUND_ELEM; |
| boolean AnytypeSet::compare_function(const Base_Type *left_ptr, int left_index, const Base_Type *right_ptr, int right_index) |
| { |
| if (((const AnytypeSet*)left_ptr)->val_ptr == NULL) TTCN_error("The left operand of comparison is an unbound value of type @General_Types.AnytypeSet."); |
| if (((const AnytypeSet*)right_ptr)->val_ptr == NULL) TTCN_error("The right operand of comparison is an unbound value of type @General_Types.AnytypeSet."); |
| if (((const AnytypeSet*)left_ptr)->val_ptr->value_elements[left_index] != NULL){ |
| if (((const AnytypeSet*)right_ptr)->val_ptr->value_elements[right_index] != NULL){ |
| return *((const AnytypeSet*)left_ptr)->val_ptr->value_elements[left_index] == *((const AnytypeSet*)right_ptr)->val_ptr->value_elements[right_index]; |
| } else return FALSE; |
| } else { |
| return ((const AnytypeSet*)right_ptr)->val_ptr->value_elements[right_index] == NULL; |
| } |
| } |
| |
| AnytypeSet::AnytypeSet() |
| { |
| val_ptr = NULL; |
| } |
| |
| AnytypeSet::AnytypeSet(null_type) |
| { |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| } |
| |
| AnytypeSet::AnytypeSet(const AnytypeSet& other_value) |
| { |
| if (!other_value.is_bound()) TTCN_error("Copying an unbound value of type @General_Types.AnytypeSet."); |
| val_ptr = other_value.val_ptr; |
| val_ptr->ref_count++; |
| } |
| |
| AnytypeSet::~AnytypeSet() |
| { |
| clean_up(); |
| if (val_ptr != NULL) val_ptr = NULL; |
| } |
| |
| void AnytypeSet::clean_up() |
| { |
| if (val_ptr != NULL) { |
| if (val_ptr->ref_count > 1) { |
| val_ptr->ref_count--; |
| val_ptr = NULL; |
| } |
| else if (val_ptr->ref_count == 1) { |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; |
| elem_count++) |
| if (val_ptr->value_elements[elem_count] != NULL) |
| delete val_ptr->value_elements[elem_count]; |
| free_pointers((void**)val_ptr->value_elements); |
| delete val_ptr; |
| val_ptr = NULL; |
| } |
| else |
| TTCN_error("Internal error: Invalid reference counter in a record of/set of value."); |
| } |
| } |
| |
| AnytypeSet& AnytypeSet::operator=(null_type) |
| { |
| clean_up(); |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| return *this; |
| } |
| |
| AnytypeSet& AnytypeSet::operator=(const AnytypeSet& other_value) |
| { |
| if (other_value.val_ptr == NULL) TTCN_error("Assigning an unbound value of type @General_Types.AnytypeSet."); |
| if (this != &other_value) { |
| clean_up(); |
| val_ptr = other_value.val_ptr; |
| val_ptr->ref_count++; |
| } |
| return *this; |
| } |
| |
| boolean AnytypeSet::operator==(null_type) const |
| { |
| if (val_ptr == NULL) |
| TTCN_error("The left operand of comparison is an unbound value of type @General_Types.AnytypeSet."); |
| return val_ptr->n_elements == 0 ; |
| } |
| |
| boolean AnytypeSet::operator==(const AnytypeSet& other_value) const |
| { |
| if (val_ptr == NULL) TTCN_error("The left operand of comparison is an unbound value of type @General_Types.AnytypeSet."); |
| if (other_value.val_ptr == NULL) TTCN_error("The right operand of comparison is an unbound value of type @General_Types.AnytypeSet."); |
| if (val_ptr == other_value.val_ptr) return TRUE; |
| return compare_set_of(this, val_ptr->n_elements, &other_value, (other_value.val_ptr)->n_elements, compare_function); |
| } |
| |
| anytype& AnytypeSet::operator[](int index_value) |
| { |
| if (index_value < 0) TTCN_error("Accessing an element of type @General_Types.AnytypeSet using a negative index: %d.", index_value); |
| if (val_ptr == NULL) { |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| } else if (val_ptr->ref_count > 1) { |
| struct recordof_setof_struct *new_val_ptr = new recordof_setof_struct; |
| new_val_ptr->ref_count = 1; |
| new_val_ptr->n_elements = (index_value >= val_ptr->n_elements) ? index_value + 1 : val_ptr->n_elements; |
| new_val_ptr->value_elements = (anytype**)allocate_pointers(new_val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++){ |
| if (val_ptr->value_elements[elem_count] != NULL){ |
| new_val_ptr->value_elements[elem_count] = new anytype(*(val_ptr->value_elements[elem_count])); |
| } |
| } |
| clean_up(); |
| val_ptr = new_val_ptr; |
| } |
| if (index_value >= val_ptr->n_elements) set_size(index_value + 1); |
| if (val_ptr->value_elements[index_value] == NULL) { |
| val_ptr->value_elements[index_value] = new anytype; |
| } |
| return *val_ptr->value_elements[index_value]; |
| } |
| |
| anytype& AnytypeSet::operator[](const INTEGER& index_value) |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a value of type @General_Types.AnytypeSet."); |
| return (*this)[(int)index_value]; |
| } |
| |
| const anytype& AnytypeSet::operator[](int index_value) const |
| { |
| if (val_ptr == NULL) |
| TTCN_error("Accessing an element in an unbound value of type @General_Types.AnytypeSet."); |
| if (index_value < 0) TTCN_error("Accessing an element of type @General_Types.AnytypeSet using a negative index: %d.", index_value); |
| if (index_value >= val_ptr->n_elements) TTCN_error("Index overflow in a value of type @General_Types.AnytypeSet: The index is %d, but the value has only %d elements.", index_value, val_ptr->n_elements); |
| return (val_ptr->value_elements[index_value] == NULL) ? |
| UNBOUND_ELEM : *val_ptr->value_elements[index_value]; |
| } |
| |
| const anytype& AnytypeSet::operator[](const INTEGER& index_value) const |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a value of type @General_Types.AnytypeSet."); |
| return (*this)[(int)index_value]; |
| } |
| |
| AnytypeSet AnytypeSet::operator<<=(int rotate_count) const |
| { |
| return *this >>= (-rotate_count); |
| } |
| |
| AnytypeSet AnytypeSet::operator<<=(const INTEGER& rotate_count) const |
| { |
| rotate_count.must_bound("Unbound integer operand of rotate left operator."); |
| return *this >>= (int)(-rotate_count); |
| } |
| |
| AnytypeSet AnytypeSet::operator>>=(const INTEGER& rotate_count) const |
| { |
| rotate_count.must_bound("Unbound integer operand of rotate right operator."); |
| return *this >>= (int)rotate_count; |
| } |
| |
| AnytypeSet AnytypeSet::operator>>=(int rotate_count) const |
| { |
| if (val_ptr == NULL) TTCN_error("Performing rotation operation on an unbound value of type @General_Types.AnytypeSet."); |
| if (val_ptr->n_elements == 0) return *this; |
| int rc; |
| if (rotate_count>=0) rc = rotate_count % val_ptr->n_elements; |
| else rc = val_ptr->n_elements - ((-rotate_count) % val_ptr->n_elements); |
| if (rc == 0) return *this; |
| AnytypeSet ret_val; |
| ret_val.set_size(val_ptr->n_elements); |
| for (int i=0; i<val_ptr->n_elements; i++) { |
| if (val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[(i+rc)%val_ptr->n_elements] =new anytype(*val_ptr->value_elements[i]); |
| } |
| } |
| return ret_val; |
| } |
| |
| AnytypeSet AnytypeSet::operator+(const AnytypeSet& other_value) const |
| { |
| if (val_ptr == NULL || other_value.val_ptr == NULL) TTCN_error("Unbound operand of @General_Types.AnytypeSet concatenation."); |
| if (val_ptr->n_elements == 0) return other_value; |
| if (other_value.val_ptr->n_elements == 0) return *this; |
| AnytypeSet ret_val; |
| ret_val.set_size(val_ptr->n_elements+other_value.val_ptr->n_elements); |
| for (int i=0; i<val_ptr->n_elements; i++) { |
| if (val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i] = new anytype(*val_ptr->value_elements[i]); |
| } |
| } |
| for (int i=0; i<other_value.val_ptr->n_elements; i++) { |
| if (other_value.val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i+val_ptr->n_elements] = new anytype(*other_value.val_ptr->value_elements[i]); |
| } |
| } |
| return ret_val; |
| } |
| |
| AnytypeSet AnytypeSet::substr(int index, int returncount) const |
| { |
| if (val_ptr == NULL) TTCN_error("The first argument of substr() is an unbound value of type @General_Types.AnytypeSet."); |
| check_substr_arguments(val_ptr->n_elements, index, returncount, "@General_Types.AnytypeSet","element"); |
| AnytypeSet ret_val; |
| ret_val.set_size(returncount); |
| for (int i=0; i<returncount; i++) { |
| if (val_ptr->value_elements[i+index] != NULL) { |
| ret_val.val_ptr->value_elements[i] = new anytype(*val_ptr->value_elements[i+index]); |
| } |
| } |
| return ret_val; |
| } |
| |
| AnytypeSet AnytypeSet::replace(int index, int len, const AnytypeSet& repl) const |
| { |
| if (val_ptr == NULL) TTCN_error("The first argument of replace() is an unbound value of type @General_Types.AnytypeSet."); |
| if (repl.val_ptr == NULL) TTCN_error("The fourth argument of replace() is an unbound value of type @General_Types.AnytypeSet."); |
| check_replace_arguments(val_ptr->n_elements, index, len, "@General_Types.AnytypeSet","element"); |
| AnytypeSet ret_val; |
| ret_val.set_size(val_ptr->n_elements + repl.val_ptr->n_elements - len); |
| for (int i = 0; i < index; i++) { |
| if (val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i] = new anytype(*val_ptr->value_elements[i]); |
| } |
| } |
| for (int i = 0; i < repl.val_ptr->n_elements; i++) { |
| if (repl.val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i+index] = new anytype(*repl.val_ptr->value_elements[i]); |
| } |
| } |
| for (int i = 0; i < val_ptr->n_elements - index - len; i++) { |
| if (val_ptr->value_elements[index+i+len] != NULL) { |
| ret_val.val_ptr->value_elements[index+i+repl.val_ptr->n_elements] = new anytype(*val_ptr->value_elements[index+i+len]); |
| } |
| } |
| return ret_val; |
| } |
| |
| AnytypeSet AnytypeSet::replace(int index, int len, const AnytypeSet_template& repl) const |
| { |
| if (!repl.is_value()) TTCN_error("The fourth argument of function replace() is a template with non-specific value."); |
| return replace(index, len, repl.valueof()); |
| } |
| |
| void AnytypeSet::set_size(int new_size) |
| { |
| if (new_size < 0) TTCN_error("Internal error: Setting a negative size for a value of type @General_Types.AnytypeSet."); |
| if (val_ptr == NULL) { |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| } else if (val_ptr->ref_count > 1) { |
| struct recordof_setof_struct *new_val_ptr = new recordof_setof_struct; |
| new_val_ptr->ref_count = 1; |
| new_val_ptr->n_elements = (new_size < val_ptr->n_elements) ? new_size : val_ptr->n_elements; |
| new_val_ptr->value_elements = (anytype**)allocate_pointers(new_val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < new_val_ptr->n_elements; elem_count++) { |
| if (val_ptr->value_elements[elem_count] != NULL){ |
| new_val_ptr->value_elements[elem_count] = new anytype(*(val_ptr->value_elements[elem_count])); |
| } |
| } |
| clean_up(); |
| val_ptr = new_val_ptr; |
| } |
| if (new_size > val_ptr->n_elements) { |
| val_ptr->value_elements = (anytype**)reallocate_pointers((void**)val_ptr->value_elements, val_ptr->n_elements, new_size); |
| #ifdef TITAN_MEMORY_DEBUG_SET_RECORD_OF |
| if((val_ptr->n_elements/1000)!=(new_size/1000)) TTCN_warning("New size of type @General_Types.AnytypeSet: %d",new_size); |
| #endif |
| val_ptr->n_elements = new_size; |
| } else if (new_size < val_ptr->n_elements) { |
| for (int elem_count = new_size; elem_count < val_ptr->n_elements; elem_count++) |
| if (val_ptr->value_elements[elem_count] != NULL)delete val_ptr->value_elements[elem_count]; |
| val_ptr->value_elements = (anytype**)reallocate_pointers((void**)val_ptr->value_elements, val_ptr->n_elements, new_size); |
| val_ptr->n_elements = new_size; |
| } |
| } |
| |
| boolean AnytypeSet::is_value() const |
| { |
| if (val_ptr == NULL) return FALSE; |
| for(int i = 0; i < val_ptr->n_elements; ++i) { |
| if (val_ptr->value_elements[i] == NULL || !val_ptr->value_elements[i]->is_value()) return FALSE; |
| } |
| return TRUE; |
| } |
| |
| int AnytypeSet::size_of() const |
| { |
| if (val_ptr == NULL) TTCN_error("Performing sizeof operation on an unbound value of type @General_Types.AnytypeSet."); |
| return val_ptr->n_elements; |
| } |
| |
| int AnytypeSet::lengthof() const |
| { |
| if (val_ptr == NULL) TTCN_error("Performing lengthof operation on an unbound value of type @General_Types.AnytypeSet."); |
| for (int my_length=val_ptr->n_elements; my_length>0; my_length--) if (val_ptr->value_elements[my_length-1] != NULL) return my_length; |
| return 0; |
| } |
| |
| void AnytypeSet::log() const |
| { |
| if (val_ptr == NULL) {; |
| TTCN_Logger::log_event_unbound(); |
| return; |
| } |
| switch (val_ptr->n_elements) { |
| case 0: |
| TTCN_Logger::log_event_str("{ }"); |
| break; |
| default: |
| TTCN_Logger::log_event_str("{ "); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) { |
| if (elem_count > 0) TTCN_Logger::log_event_str(", "); |
| (*this)[elem_count].log(); |
| } |
| TTCN_Logger::log_event_str(" }"); |
| } |
| } |
| |
| void AnytypeSet::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE|Module_Param::BC_LIST, "set of value"); |
| switch (param.get_operation_type()) { |
| case Module_Param::OT_ASSIGN: |
| if (param.get_type()==Module_Param::MP_Value_List && param.get_size()==0) { |
| *this = NULL_VALUE; |
| return; |
| } |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: |
| set_size(param.get_size()); |
| for (size_t i=0; i<param.get_size(); ++i) { |
| Module_Param* const curr = param.get_elem(i); |
| if (curr->get_type()!=Module_Param::MP_NotUsed) { |
| (*this)[i].set_param(*curr); |
| if (!(*this)[i].is_bound()) { |
| delete val_ptr->value_elements[i]; |
| val_ptr->value_elements[i] = NULL; |
| } |
| } |
| } |
| break; |
| case Module_Param::MP_Indexed_List: |
| for (size_t i=0; i<param.get_size(); ++i) { |
| Module_Param* const curr = param.get_elem(i); |
| (*this)[curr->get_id()->get_index()].set_param(*curr); |
| if (!(*this)[curr->get_id()->get_index()].is_bound()) { |
| delete val_ptr->value_elements[curr->get_id()->get_index()]; |
| val_ptr->value_elements[curr->get_id()->get_index()] = NULL; |
| } |
| } |
| break; |
| default: |
| param.type_error("set of value", "@General_Types.AnytypeSet"); |
| } |
| break; |
| case Module_Param::OT_CONCAT: |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: { |
| if (!is_bound()) *this = NULL_VALUE; |
| int start_idx = lengthof(); |
| for (size_t i=0; i<param.get_size(); ++i) { |
| Module_Param* const curr = param.get_elem(i); |
| if ((curr->get_type()!=Module_Param::MP_NotUsed)) { |
| (*this)[start_idx+(int)i].set_param(*curr); |
| } |
| } |
| } break; |
| case Module_Param::MP_Indexed_List: |
| param.error("Cannot concatenate an indexed value list"); |
| break; |
| default: |
| param.type_error("set of value", "@General_Types.AnytypeSet"); |
| } |
| break; |
| default: |
| TTCN_error("Internal error: Unknown operation type."); |
| } |
| } |
| |
| void AnytypeSet::set_implicit_omit() |
| { |
| if (val_ptr == NULL) return; |
| for (int i = 0; i < val_ptr->n_elements; i++) { |
| if (val_ptr->value_elements[i] != NULL) val_ptr->value_elements[i]->set_implicit_omit(); |
| } |
| } |
| |
| void AnytypeSet::encode_text(Text_Buf& text_buf) const |
| { |
| if (val_ptr == NULL) TTCN_error("Text encoder: Encoding an unbound value of type @General_Types.AnytypeSet."); |
| text_buf.push_int(val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) |
| (*this)[elem_count].encode_text(text_buf); |
| } |
| |
| void AnytypeSet::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = text_buf.pull_int().get_val(); |
| if (val_ptr->n_elements < 0) TTCN_error("Text decoder: Negative size was received for a value of type @General_Types.AnytypeSet."); |
| val_ptr->value_elements = (anytype**)allocate_pointers(val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) { |
| val_ptr->value_elements[elem_count] = new anytype; |
| val_ptr->value_elements[elem_count]->decode_text(text_buf); |
| } |
| } |
| |
| void AnytypeSet::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t 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); |
| 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;} |
| default: |
| TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| void AnytypeSet::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t 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(); |
| if(b_data[p_buf.get_len()-1]!='\0'){ |
| 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); |
| 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)<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;} |
| default: |
| TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| int AnytypeSet::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean /*no_err*/, int sel_field, boolean first_call, const RAW_Force_Omit*){ |
| int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding); |
| limit-=prepaddlength; |
| int decoded_length=0; |
| int decoded_field_length=0; |
| size_t start_of_field=0; |
| if(first_call) { |
| clean_up(); |
| val_ptr=new recordof_setof_struct; |
| val_ptr->ref_count=1; |
| val_ptr->n_elements=0; |
| val_ptr->value_elements=NULL; |
| } |
| int start_field=val_ptr->n_elements; |
| if(p_td.raw->fieldlength || sel_field!=-1){ |
| int a=0; |
| if(sel_field==-1) sel_field=p_td.raw->fieldlength; |
| for(a=0;a<sel_field;a++){ |
| decoded_field_length=(*this)[a+start_field].RAW_decode(*p_td.oftype_descr,p_buf,limit,top_bit_ord,TRUE); |
| if(decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| } |
| if(a==0) val_ptr->n_elements=0; |
| } else { |
| if(limit==0){ |
| if(!first_call) return -1; |
| val_ptr->n_elements=0; |
| return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength; |
| } |
| int a=start_field; |
| while(limit>0){ |
| start_of_field=p_buf.get_pos_bit(); |
| decoded_field_length=(*this)[a].RAW_decode(*p_td.oftype_descr,p_buf,limit,top_bit_ord,TRUE); |
| if(decoded_field_length < 0){ |
| delete &(*this)[a]; |
| val_ptr->n_elements--; |
| p_buf.set_pos_bit(start_of_field); |
| if(a>start_field){ |
| return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength; |
| } else return -1; |
| } |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| a++; |
| } |
| } |
| return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength; |
| } |
| |
| int AnytypeSet::RAW_encode(const TTCN_Typedescriptor_t& p_td,RAW_enc_tree& myleaf) const{ |
| int encoded_length=0; |
| int encoded_num_of_records=p_td.raw->fieldlength?smaller(val_ptr->n_elements, p_td.raw->fieldlength):val_ptr->n_elements; |
| myleaf.isleaf=FALSE; |
| myleaf.rec_of=TRUE; |
| myleaf.body.node.num_of_nodes=encoded_num_of_records; |
| myleaf.body.node.nodes=init_nodes_of_enc_tree(encoded_num_of_records); |
| for(int a=0;a<encoded_num_of_records;a++){ |
| myleaf.body.node.nodes[a]=new RAW_enc_tree(TRUE,&myleaf,&(myleaf.curr_pos),a,p_td.oftype_descr->raw); |
| encoded_length+=(*this)[a].RAW_encode(*p_td.oftype_descr,*myleaf.body.node.nodes[a]); |
| } |
| return myleaf.length=encoded_length; |
| } |
| |
| void AnytypeSet_template::copy_value(const AnytypeSet& other_value) |
| { |
| if (!other_value.is_bound()) TTCN_error("Initialization of a template of type @General_Types.AnytypeSet with an unbound value."); |
| single_value.n_elements = other_value.size_of(); |
| single_value.value_elements = (anytype_template**)allocate_pointers(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (other_value[elem_count].is_bound()) { |
| single_value.value_elements[elem_count] = new anytype_template(other_value[elem_count]); |
| } else { |
| single_value.value_elements[elem_count] = new anytype_template; |
| } |
| } |
| set_selection(SPECIFIC_VALUE); |
| } |
| |
| void AnytypeSet_template::copy_template(const AnytypeSet_template& other_value) |
| { |
| switch (other_value.template_selection) { |
| case SPECIFIC_VALUE: |
| single_value.n_elements = other_value.single_value.n_elements; |
| single_value.value_elements = (anytype_template**)allocate_pointers(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (UNINITIALIZED_TEMPLATE != other_value.single_value.value_elements[elem_count]->get_selection()) { |
| single_value.value_elements[elem_count] = new anytype_template(*other_value.single_value.value_elements[elem_count]); |
| } else { |
| single_value.value_elements[elem_count] = new anytype_template; |
| } |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new AnytypeSet_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 SUPERSET_MATCH: |
| case SUBSET_MATCH: |
| value_set.n_items = other_value.value_set.n_items; |
| value_set.set_items = new anytype_template[value_set.n_items]; |
| for (unsigned int set_count = 0; set_count < value_set.n_items; set_count++) |
| value_set.set_items[set_count] = other_value.value_set.set_items[set_count]; |
| break; |
| default: |
| TTCN_error("Copying an uninitialized/unsupported template of type @General_Types.AnytypeSet."); |
| break; |
| } |
| set_selection(other_value); |
| } |
| |
| boolean AnytypeSet_template::match_function_specific(const Base_Type *value_ptr, int value_index, const Restricted_Length_Template *template_ptr, int template_index, boolean legacy) |
| { |
| if (value_index >= 0) return ((const AnytypeSet_template*)template_ptr)->single_value.value_elements[template_index]->match((*(const AnytypeSet*)value_ptr)[value_index], legacy); |
| else return ((const AnytypeSet_template*)template_ptr)->single_value.value_elements[template_index]->is_any_or_omit(); |
| } |
| |
| boolean AnytypeSet_template::match_function_set(const Base_Type *value_ptr, int value_index, const Restricted_Length_Template *template_ptr, int template_index, boolean legacy) |
| { |
| if (value_index >= 0) return ((const AnytypeSet_template*)template_ptr)->value_set.set_items[template_index].match((*(const AnytypeSet*)value_ptr)[value_index], legacy); |
| else return ((const AnytypeSet_template*)template_ptr)->value_set.set_items[template_index].is_any_or_omit(); |
| } |
| |
| void AnytypeSet_template::log_function(const Base_Type *value_ptr, const Restricted_Length_Template *template_ptr, int index_value, int index_template, boolean legacy) |
| { |
| if (value_ptr == NULL) { |
| if (template_ptr != NULL) { |
| ((const AnytypeSet_template*)template_ptr)->single_value.value_elements[index_template]->log(); |
| } |
| } else if (template_ptr == NULL) { |
| (*(const AnytypeSet*)value_ptr)[index_value].log(); |
| } else { |
| ((const AnytypeSet_template*)template_ptr)->single_value.value_elements[index_template]->log_match((*(const AnytypeSet*)value_ptr)[index_value], legacy); |
| } |
| } |
| |
| AnytypeSet_template::AnytypeSet_template() |
| { |
| } |
| |
| AnytypeSet_template::AnytypeSet_template(template_sel other_value) |
| : Restricted_Length_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| AnytypeSet_template::AnytypeSet_template(null_type) |
| : Restricted_Length_Template(SPECIFIC_VALUE) |
| { |
| single_value.n_elements = 0; |
| single_value.value_elements = NULL; |
| } |
| |
| AnytypeSet_template::AnytypeSet_template(const AnytypeSet& other_value) |
| { |
| copy_value(other_value); |
| } |
| |
| AnytypeSet_template::AnytypeSet_template(const OPTIONAL<AnytypeSet>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const AnytypeSet&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of type @General_Types.AnytypeSet from an unbound optional field."); |
| } |
| } |
| |
| AnytypeSet_template::AnytypeSet_template(const AnytypeSet_template& other_value) |
| : Restricted_Length_Template() |
| { |
| copy_template(other_value); |
| } |
| |
| AnytypeSet_template::~AnytypeSet_template() |
| { |
| clean_up(); |
| } |
| |
| void AnytypeSet_template::clean_up() |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| delete single_value.value_elements[elem_count]; |
| free_pointers((void**)single_value.value_elements); |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| delete [] value_list.list_value; |
| break; |
| case SUPERSET_MATCH: |
| case SUBSET_MATCH: |
| delete [] value_set.set_items; |
| default: |
| break; |
| } |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| AnytypeSet_template& AnytypeSet_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| AnytypeSet_template& AnytypeSet_template::operator=(null_type) |
| { |
| clean_up(); |
| set_selection(SPECIFIC_VALUE); |
| single_value.n_elements = 0; |
| single_value.value_elements = NULL; |
| return *this; |
| } |
| |
| AnytypeSet_template& AnytypeSet_template::operator=(const AnytypeSet& other_value) |
| { |
| clean_up(); |
| copy_value(other_value); |
| return *this; |
| } |
| |
| AnytypeSet_template& AnytypeSet_template::operator=(const OPTIONAL<AnytypeSet>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const AnytypeSet&)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 @General_Types.AnytypeSet."); |
| } |
| return *this; |
| } |
| |
| AnytypeSet_template& AnytypeSet_template::operator=(const AnytypeSet_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| anytype_template& AnytypeSet_template::operator[](int index_value) |
| { |
| if (index_value < 0) TTCN_error("Accessing an element of a template for type @General_Types.AnytypeSet using a negative index: %d.", index_value); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: |
| if(index_value < single_value.n_elements) break; |
| // no break |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| case UNINITIALIZED_TEMPLATE: |
| set_size(index_value + 1); |
| break; |
| default: |
| TTCN_error("Accessing an element of a non-specific template for type @General_Types.AnytypeSet."); |
| break; |
| } |
| return *single_value.value_elements[index_value]; |
| } |
| |
| anytype_template& AnytypeSet_template::operator[](const INTEGER& index_value) |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a template of type @General_Types.AnytypeSet."); |
| return (*this)[(int)index_value]; |
| } |
| |
| const anytype_template& AnytypeSet_template::operator[](int index_value) const |
| { |
| if (index_value < 0) TTCN_error("Accessing an element of a template for type @General_Types.AnytypeSet using a negative index: %d.", index_value); |
| if (template_selection != SPECIFIC_VALUE) TTCN_error("Accessing an element of a non-specific template for type @General_Types.AnytypeSet."); |
| if (index_value >= single_value.n_elements) TTCN_error("Index overflow in a template of type @General_Types.AnytypeSet: The index is %d, but the template has only %d elements.", index_value, single_value.n_elements); |
| return *single_value.value_elements[index_value]; |
| } |
| |
| const anytype_template& AnytypeSet_template::operator[](const INTEGER& index_value) const |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a template of type @General_Types.AnytypeSet."); |
| return (*this)[(int)index_value]; |
| } |
| |
| void AnytypeSet_template::set_size(int new_size) |
| { |
| if (new_size < 0) TTCN_error("Internal error: Setting a negative size for a template of type @General_Types.AnytypeSet."); |
| template_sel old_selection = template_selection; |
| if (old_selection != SPECIFIC_VALUE) { |
| clean_up(); |
| set_selection(SPECIFIC_VALUE); |
| single_value.n_elements = 0; |
| single_value.value_elements = NULL; |
| } |
| if (new_size > single_value.n_elements) { |
| single_value.value_elements = (anytype_template**)reallocate_pointers((void**)single_value.value_elements, single_value.n_elements, new_size); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) { |
| for (int elem_count = single_value.n_elements; elem_count < new_size; elem_count++) |
| single_value.value_elements[elem_count] = new anytype_template(ANY_VALUE); |
| } else { |
| for (int elem_count = single_value.n_elements; elem_count < new_size; elem_count++) |
| single_value.value_elements[elem_count] = new anytype_template; |
| } |
| single_value.n_elements = new_size; |
| } else if (new_size < single_value.n_elements) { |
| for (int elem_count = new_size; elem_count < single_value.n_elements; elem_count++) |
| delete single_value.value_elements[elem_count]; |
| single_value.value_elements = (anytype_template**)reallocate_pointers((void**)single_value.value_elements, single_value.n_elements, new_size); |
| single_value.n_elements = new_size; |
| } |
| } |
| |
| int AnytypeSet_template::n_elem() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| return single_value.n_elements; |
| break; |
| case VALUE_LIST: |
| return value_list.n_values; |
| break; |
| default: |
| TTCN_error("Performing n_elem"); |
| } |
| } |
| |
| int AnytypeSet_template::size_of(boolean is_size) const |
| { |
| const char* op_name = is_size ? "size" : "length"; |
| int min_size; |
| boolean has_any_or_none; |
| if (is_ifpresent) TTCN_error("Performing %sof() operation on a template of type @General_Types.AnytypeSet which has an ifpresent attribute.", op_name); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: { |
| min_size = 0; |
| has_any_or_none = FALSE; |
| int elem_count = single_value.n_elements; |
| if (!is_size) { while (elem_count>0 && !single_value.value_elements[elem_count-1]->is_bound()) elem_count--; } |
| for (int i=0; i<elem_count; i++) { |
| switch (single_value.value_elements[i]->get_selection()) { |
| case OMIT_VALUE: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.AnytypeSet containing omit element.", op_name); |
| case ANY_OR_OMIT: |
| has_any_or_none = TRUE; |
| break; |
| default: |
| min_size++; |
| break; |
| } |
| } |
| } break; |
| case SUPERSET_MATCH: |
| case SUBSET_MATCH: { |
| min_size = 0; |
| has_any_or_none = FALSE; |
| int elem_count = value_set.n_items; |
| if (!is_size) { while (elem_count>0 && !value_set.set_items[elem_count-1].is_bound()) elem_count--; } |
| for (int i=0; i<elem_count; i++) { |
| switch (value_set.set_items[i].get_selection()) |
| { |
| case OMIT_VALUE: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.AnytypeSet containing omit element.", op_name); |
| case ANY_OR_OMIT: |
| has_any_or_none = TRUE; |
| break; |
| default: |
| min_size++; |
| break; |
| } |
| } |
| if (template_selection==SUPERSET_MATCH) { |
| has_any_or_none = TRUE; |
| } else { |
| int max_size = min_size; |
| min_size = 0; |
| if (!has_any_or_none) { // [0,max_size] |
| switch (length_restriction_type) { |
| case NO_LENGTH_RESTRICTION: |
| if (max_size==0) return 0; |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.AnytypeSet with no exact size.", op_name); |
| case SINGLE_LENGTH_RESTRICTION: |
| if (length_restriction.single_length<=max_size) |
| return length_restriction.single_length; |
| TTCN_error("Performing %sof() operation on an invalid template of type @General_Types.AnytypeSet. The maximum size (%d) contradicts the length restriction (%d).", op_name, max_size, length_restriction.single_length); |
| case RANGE_LENGTH_RESTRICTION: |
| if (max_size==length_restriction.range_length.min_length) { |
| return max_size; |
| } else if (max_size>length_restriction.range_length.min_length){ |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.AnytypeSet with no exact size.", op_name); |
| } else |
| TTCN_error("Performing %sof() operation on an invalid template of type @General_Types.AnytypeSet. Maximum size (%d) contradicts the length restriction (%d..%d).", op_name, max_size, length_restriction.range_length.min_length, length_restriction.range_length.max_length); |
| default: |
| TTCN_error("Internal error: Template has invalid length restriction type."); |
| } |
| } |
| } |
| } break; |
| case OMIT_VALUE: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.AnytypeSet containing omit value.", op_name); |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| min_size = 0; |
| has_any_or_none = TRUE; |
| break; |
| case VALUE_LIST: |
| { |
| if (value_list.n_values<1) |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.AnytypeSet containing an empty list.", op_name); |
| int item_size = value_list.list_value[0].size_of(is_size); |
| for (unsigned int i = 1; i < value_list.n_values; i++) { |
| if (value_list.list_value[i].size_of(is_size)!=item_size) |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.AnytypeSet containing a value list with different sizes.", op_name); |
| } |
| min_size = item_size; |
| has_any_or_none = FALSE; |
| break; |
| } |
| case COMPLEMENTED_LIST: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.AnytypeSet containing complemented list.", op_name); |
| default: |
| TTCN_error("Performing %sof() operation on an uninitialized/unsupported template of type @General_Types.AnytypeSet.", op_name); |
| } |
| return check_section_is_single(min_size, has_any_or_none, op_name, "a", "template of type @General_Types.AnytypeSet"); |
| } |
| |
| boolean AnytypeSet_template::match(const AnytypeSet& other_value, boolean legacy) const |
| { |
| if (!other_value.is_bound()) return FALSE; |
| int value_length = other_value.size_of(); |
| if (!match_length(value_length)) return FALSE; |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| return match_set_of(&other_value, value_length, this, single_value.n_elements, match_function_specific, legacy); |
| case OMIT_VALUE: |
| return FALSE; |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| 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 SUPERSET_MATCH: |
| case SUBSET_MATCH: |
| return match_set_of(&other_value, value_length, this, value_set.n_items, match_function_set, legacy); |
| default: |
| TTCN_error("Matching with an uninitialized/unsupported template of type @General_Types.AnytypeSet."); |
| } |
| return FALSE; |
| } |
| |
| boolean AnytypeSet_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| if (!single_value.value_elements[elem_count]->is_value()) return FALSE; |
| return TRUE; |
| } |
| |
| AnytypeSet AnytypeSet_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 @General_Types.AnytypeSet."); |
| AnytypeSet ret_val; |
| ret_val.set_size(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| if (single_value.value_elements[elem_count]->is_bound()) { |
| ret_val[elem_count] = single_value.value_elements[elem_count]->valueof(); |
| } |
| return ret_val; |
| } |
| |
| AnytypeSet AnytypeSet_template::substr(int index, int returncount) const |
| { |
| if (!is_value()) TTCN_error("The first argument of function substr() is a template with non-specific value."); |
| return valueof().substr(index, returncount); |
| } |
| |
| AnytypeSet AnytypeSet_template::replace(int index, int len, const AnytypeSet_template& repl) const |
| { |
| if (!is_value()) TTCN_error("The first argument of function replace() is a template with non-specific value."); |
| if (!repl.is_value()) TTCN_error("The fourth argument of function replace() is a template with non-specific value."); |
| return valueof().replace(index, len, repl.valueof()); |
| } |
| |
| AnytypeSet AnytypeSet_template::replace(int index, int len, const AnytypeSet& repl) const |
| { |
| if (!is_value()) TTCN_error("The first argument of function replace() is a template with non-specific value."); |
| return valueof().replace(index, len, repl); |
| } |
| |
| void AnytypeSet_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| clean_up(); |
| switch (template_type) { |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = list_length; |
| value_list.list_value = new AnytypeSet_template[list_length]; |
| break; |
| case SUPERSET_MATCH: |
| case SUBSET_MATCH: |
| value_set.n_items = list_length; |
| value_set.set_items = new anytype_template[list_length]; |
| break; |
| default: |
| TTCN_error("Internal error: Setting an invalid type for a template of type @General_Types.AnytypeSet."); |
| } |
| set_selection(template_type); |
| } |
| |
| AnytypeSet_template& AnytypeSet_template::list_item(unsigned int list_index) |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) TTCN_error("Internal error: Accessing a list element of a non-list template of type @General_Types.AnytypeSet."); |
| if (list_index >= value_list.n_values) TTCN_error("Internal error: Index overflow in a value list template of type @General_Types.AnytypeSet."); |
| return value_list.list_value[list_index]; |
| } |
| |
| anytype_template& AnytypeSet_template::set_item(unsigned int set_index) |
| { |
| if (template_selection != SUPERSET_MATCH && template_selection != SUBSET_MATCH) TTCN_error("Internal error: Accessing a set element of a non-set template of type @General_Types.AnytypeSet."); |
| if (set_index >= value_set.n_items) TTCN_error("Internal error: Index overflow in a set template of type @General_Types.AnytypeSet."); |
| return value_set.set_items[set_index]; |
| } |
| |
| void AnytypeSet_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| if (single_value.n_elements > 0) { |
| TTCN_Logger::log_event_str("{ "); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (elem_count > 0) TTCN_Logger::log_event_str(", "); |
| single_value.value_elements[elem_count]->log(); |
| } |
| TTCN_Logger::log_event_str(" }"); |
| } else TTCN_Logger::log_event_str("{ }"); |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| 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 SUPERSET_MATCH: |
| case SUBSET_MATCH: |
| TTCN_Logger::log_event("%s(", template_selection == SUPERSET_MATCH ? "superset" : "subset"); |
| for (unsigned int set_count = 0; set_count < value_set.n_items; set_count++) { |
| if (set_count > 0) TTCN_Logger::log_event_str(", "); |
| value_set.set_items[set_count].log(); |
| } |
| TTCN_Logger::log_char(')'); |
| break; |
| default: |
| log_generic(); |
| } |
| log_restricted(); |
| log_ifpresent(); |
| } |
| |
| void AnytypeSet_template::log_match(const AnytypeSet& 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{ |
| size_t previous_size = TTCN_Logger::get_logmatch_buffer_len(); |
| if (template_selection == SPECIFIC_VALUE) |
| log_match_heuristics(&match_value, match_value.size_of(), this, single_value.n_elements, match_function_specific, log_function, legacy); |
| else{ |
| if(previous_size != 0){ |
| TTCN_Logger::print_logmatch_buffer(); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| TTCN_Logger::log_event_str(":="); |
| } |
| } |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| TTCN_Logger::log_event_str(" unmatched"); |
| } |
| return; |
| } |
| 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"); |
| if (template_selection == SPECIFIC_VALUE) log_match_heuristics(&match_value, match_value.size_of(), this, single_value.n_elements, match_function_specific, log_function, legacy); |
| } |
| } |
| |
| void AnytypeSet_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_restricted(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| text_buf.push_int(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| single_value.value_elements[elem_count]->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; |
| case SUPERSET_MATCH: |
| case SUBSET_MATCH: |
| text_buf.push_int(value_set.n_items); |
| for (unsigned int set_count = 0; set_count < value_set.n_items; set_count++) |
| value_set.set_items[set_count].encode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of type @General_Types.AnytypeSet."); |
| } |
| } |
| |
| void AnytypeSet_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_restricted(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value.n_elements = text_buf.pull_int().get_val(); |
| if (single_value.n_elements < 0) TTCN_error("Text decoder: Negative size was received for a template of type @General_Types.AnytypeSet."); |
| single_value.value_elements = (anytype_template**)allocate_pointers(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| single_value.value_elements[elem_count] = new anytype_template; |
| single_value.value_elements[elem_count]->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 AnytypeSet_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; |
| case SUPERSET_MATCH: |
| case SUBSET_MATCH: |
| value_set.n_items = text_buf.pull_int().get_val(); |
| value_set.set_items = new anytype_template[value_set.n_items]; |
| for (unsigned int set_count = 0; set_count < value_set.n_items; set_count++) |
| value_set.set_items[set_count].decode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text decoder: An unknown/unsupported selection was received for a template of type @General_Types.AnytypeSet."); |
| } |
| } |
| |
| boolean AnytypeSet_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean AnytypeSet_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int i=0; i<value_list.n_values; i++) |
| if (value_list.list_value[i].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| void AnytypeSet_template::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_TEMPLATE|Module_Param::BC_LIST, "set of 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: { |
| AnytypeSet_template temp; |
| temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); |
| for (size_t p_i=0; p_i<param.get_size(); p_i++) { |
| temp.list_item(p_i).set_param(*param.get_elem(p_i)); |
| } |
| *this = temp; |
| break; } |
| case Module_Param::MP_Indexed_List: |
| if (template_selection!=SPECIFIC_VALUE) set_size(0); |
| for (size_t p_i=0; p_i<param.get_size(); ++p_i) { |
| (*this)[(int)(param.get_elem(p_i)->get_id()->get_index())].set_param(*param.get_elem(p_i)); |
| } |
| break; |
| case Module_Param::MP_Value_List: |
| set_size(param.get_size()); |
| for (size_t p_i=0; p_i<param.get_size(); ++p_i) { |
| if (param.get_elem(p_i)->get_type()!=Module_Param::MP_NotUsed) { |
| (*this)[p_i].set_param(*param.get_elem(p_i)); |
| } |
| } |
| break; |
| case Module_Param::MP_Superset_Template: |
| case Module_Param::MP_Subset_Template: |
| set_type(param.get_type()==Module_Param::MP_Superset_Template ? SUPERSET_MATCH : SUBSET_MATCH, param.get_size()); |
| for (size_t p_i=0; p_i<param.get_size(); p_i++) { |
| set_item(p_i).set_param(*param.get_elem(p_i)); |
| } |
| break; |
| default: |
| param.type_error("set of template", "@General_Types.AnytypeSet"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| set_length_range(param); |
| } |
| |
| void AnytypeSet_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; |
| for (int i=0; i<single_value.n_elements; i++) single_value.value_elements[i]->check_restriction(t_res, t_name ? t_name : "@General_Types.AnytypeSet"); |
| 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 : "@General_Types.AnytypeSet"); |
| } |
| |
| boolean AnytypeSet_template::get_istemplate_kind(const char* type) const { |
| if (!strcmp(type, "AnyElement")) { |
| if (template_selection != SPECIFIC_VALUE) { |
| return FALSE; |
| } |
| for (int i = 0; i < single_value.n_elements; i++) { |
| if (single_value.value_elements[i]->get_selection() == ANY_VALUE) { |
| return TRUE; |
| } |
| } |
| return FALSE; |
| } else if (!strcmp(type, "AnyElementsOrNone")) { |
| if (template_selection != SPECIFIC_VALUE) { |
| return FALSE; |
| } |
| for (int i = 0; i < single_value.n_elements; i++) { |
| if (single_value.value_elements[i]->get_selection() == ANY_OR_OMIT) { |
| return TRUE; |
| } |
| } |
| return FALSE; |
| } else if (!strcmp(type, "permutation")) { |
| return FALSE; |
| } else if (!strcmp(type, "length")) { |
| return length_restriction_type != NO_LENGTH_RESTRICTION; |
| } else { |
| return Base_Template::get_istemplate_kind(type); |
| } |
| } |
| Protocols::Protocols() |
| { |
| enum_value = UNBOUND_VALUE; |
| } |
| |
| Protocols::Protocols(int other_value) |
| { |
| if (!is_valid_enum(other_value)) TTCN_error("Initializing a variable of enumerated type @General_Types.Protocols with invalid numeric value %d.", other_value); |
| enum_value = (enum_type)other_value; |
| } |
| |
| Protocols::Protocols(enum_type other_value) |
| { |
| enum_value = other_value; |
| } |
| |
| Protocols::Protocols(const Protocols& other_value) |
| : Base_Type() |
| { |
| if (other_value.enum_value == UNBOUND_VALUE) TTCN_error("Copying an unbound value of enumerated type @General_Types.Protocols."); |
| enum_value = other_value.enum_value; |
| } |
| |
| Protocols& Protocols::operator=(int other_value) |
| { |
| if (!is_valid_enum(other_value)) TTCN_error("Assigning unknown numeric value %d to a variable of enumerated type @General_Types.Protocols.", other_value); |
| enum_value = (enum_type)other_value; |
| return *this; |
| } |
| |
| Protocols& Protocols::operator=(enum_type other_value) |
| { |
| enum_value = other_value; |
| return *this; |
| } |
| |
| Protocols& Protocols::operator=(const Protocols& other_value) |
| { |
| if (other_value.enum_value == UNBOUND_VALUE) TTCN_error("Assignment of an unbound value of enumerated type @General_Types.Protocols."); |
| enum_value = other_value.enum_value; |
| return *this; |
| } |
| |
| boolean Protocols::operator==(enum_type other_value) const |
| { |
| if (enum_value == UNBOUND_VALUE) TTCN_error("The left operand of comparison is an unbound value of enumerated type @General_Types.Protocols."); |
| return enum_value == other_value; |
| } |
| |
| boolean Protocols::operator==(const Protocols& other_value) const |
| { |
| if (enum_value == UNBOUND_VALUE) TTCN_error("The left operand of comparison is an unbound value of enumerated type @General_Types.Protocols."); |
| if (other_value.enum_value == UNBOUND_VALUE) TTCN_error("The right operand of comparison is an unbound value of enumerated type @General_Types.Protocols."); |
| return enum_value == other_value.enum_value; |
| } |
| |
| boolean Protocols::operator<(enum_type other_value) const |
| { |
| if (enum_value == UNBOUND_VALUE) TTCN_error("The left operand of comparison is an unbound value of enumerated type @General_Types.Protocols."); |
| return enum_value < other_value; |
| } |
| |
| boolean Protocols::operator<(const Protocols& other_value) const |
| { |
| if (enum_value == UNBOUND_VALUE) TTCN_error("The left operand of comparison is an unbound value of enumerated type @General_Types.Protocols."); |
| if (other_value.enum_value == UNBOUND_VALUE) TTCN_error("The right operand of comparison is an unbound value of enumerated type @General_Types.Protocols."); |
| return enum_value < other_value.enum_value; |
| } |
| |
| boolean Protocols::operator>(enum_type other_value) const |
| { |
| if (enum_value == UNBOUND_VALUE) TTCN_error("The left operand of comparison is an unbound value of enumerated type @General_Types.Protocols."); |
| return enum_value > other_value; |
| } |
| |
| boolean Protocols::operator>(const Protocols& other_value) const |
| { |
| if (enum_value == UNBOUND_VALUE) TTCN_error("The left operand of comparison is an unbound value of enumerated type @General_Types.Protocols."); |
| if (other_value.enum_value == UNBOUND_VALUE) TTCN_error("The right operand of comparison is an unbound value of enumerated type @General_Types.Protocols."); |
| return enum_value > other_value.enum_value; |
| } |
| |
| const char *Protocols::enum_to_str(enum_type enum_par) |
| { |
| switch (enum_par) { |
| case mtp3: return "mtp3"; |
| case sccp: return "sccp"; |
| case isup: return "isup"; |
| case bicc: return "bicc"; |
| case qaal2: return "qaal2"; |
| case gcp: return "gcp"; |
| case bssap: return "bssap"; |
| case bssmap: return "bssmap"; |
| case ranap: return "ranap"; |
| case dtap: return "dtap"; |
| default: return "<unknown>"; |
| } |
| } |
| |
| Protocols::enum_type Protocols::str_to_enum(const char *str_par) |
| { |
| if (!strcmp(str_par, "mtp3")) return mtp3; |
| else if (!strcmp(str_par, "sccp")) return sccp; |
| else if (!strcmp(str_par, "isup")) return isup; |
| else if (!strcmp(str_par, "bicc")) return bicc; |
| else if (!strcmp(str_par, "qaal2")) return qaal2; |
| else if (!strcmp(str_par, "gcp")) return gcp; |
| else if (!strcmp(str_par, "bssap")) return bssap; |
| else if (!strcmp(str_par, "bssmap")) return bssmap; |
| else if (!strcmp(str_par, "ranap")) return ranap; |
| else if (!strcmp(str_par, "dtap")) return dtap; |
| else return UNKNOWN_VALUE; |
| } |
| |
| boolean Protocols::is_valid_enum(int int_par) |
| { |
| switch (int_par) { |
| case 0: |
| case 1: |
| case 2: |
| case 3: |
| case 4: |
| case 5: |
| case 6: |
| case 7: |
| case 8: |
| case 9: |
| return TRUE; |
| default: |
| return FALSE; |
| } |
| } |
| |
| int Protocols::enum2int(enum_type enum_par) |
| { |
| if (enum_par==UNBOUND_VALUE || enum_par==UNKNOWN_VALUE) TTCN_error("The argument of function enum2int() is an %s value of enumerated type @General_Types.Protocols.", enum_par==UNBOUND_VALUE?"unbound":"invalid"); |
| return enum_par; |
| } |
| |
| int Protocols::enum2int(const Protocols& enum_par) |
| { |
| if (enum_par.enum_value==UNBOUND_VALUE || enum_par.enum_value==UNKNOWN_VALUE) TTCN_error("The argument of function enum2int() is an %s value of enumerated type @General_Types.Protocols.", enum_par==UNBOUND_VALUE?"unbound":"invalid"); |
| return enum_par.enum_value; |
| } |
| |
| void Protocols::int2enum(int int_val) |
| { |
| if (!is_valid_enum(int_val)) TTCN_error("Assigning invalid numeric value %d to a variable of enumerated type @General_Types.Protocols.", int_val); |
| enum_value = (enum_type)int_val; |
| } |
| |
| Protocols::operator Protocols::enum_type() const |
| { |
| if (enum_value == UNBOUND_VALUE) TTCN_error("Using the value of an unbound variable of enumerated type @General_Types.Protocols."); |
| return enum_value; |
| } |
| |
| void Protocols::log() const |
| { |
| if (enum_value != UNBOUND_VALUE) TTCN_Logger::log_event_enum(enum_to_str(enum_value), enum_value); |
| else TTCN_Logger::log_event_unbound(); |
| } |
| |
| void Protocols::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE, "enumerated value"); |
| if (param.get_type()!=Module_Param::MP_Enumerated) param.type_error("enumerated value", "@General_Types.Protocols"); |
| enum_value = str_to_enum(param.get_enumerated()); |
| if (!is_valid_enum(enum_value)) { |
| param.error("Invalid enumerated value for type @General_Types.Protocols."); |
| } |
| } |
| |
| void Protocols::encode_text(Text_Buf& text_buf) const |
| { |
| if (enum_value == UNBOUND_VALUE) TTCN_error("Text encoder: Encoding an unbound value of enumerated type @General_Types.Protocols."); |
| text_buf.push_int(enum_value); |
| } |
| |
| void Protocols::decode_text(Text_Buf& text_buf) |
| { |
| enum_value = (enum_type)text_buf.pull_int().get_val(); |
| if (!is_valid_enum(enum_value)) TTCN_error("Text decoder: Unknown numeric value %d was received for enumerated type @General_Types.Protocols.", enum_value); |
| } |
| |
| void Protocols::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t 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(TRUE, 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); |
| 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;} |
| default: |
| TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| void Protocols::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t 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(); |
| if(b_data[p_buf.get_len()-1]!='\0'){ |
| 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); |
| 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)<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;} |
| default: |
| TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| int Protocols::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*) |
| { |
| int decoded_value = 0; |
| int decoded_length = RAW_decode_enum_type(p_td, p_buf, limit, top_bit_ord, decoded_value, 4, no_err); |
| if (decoded_length < 0) return decoded_length; |
| if (is_valid_enum(decoded_value)) enum_value = (enum_type)decoded_value; |
| else { |
| if(no_err){ |
| return -1; |
| } else { |
| TTCN_EncDec_ErrorContext::error |
| (TTCN_EncDec::ET_ENC_ENUM, "Invalid enum value '%d' for '%s': ",decoded_value, p_td.name); |
| enum_value = UNKNOWN_VALUE; |
| } |
| } |
| return decoded_length; |
| } |
| |
| int Protocols::RAW_encode(const TTCN_Typedescriptor_t& p_td, RAW_enc_tree& myleaf) const |
| { |
| return RAW_encode_enum_type(p_td, myleaf, (int)enum_value, 4); |
| } |
| |
| void Protocols_template::copy_template(const Protocols_template& other_value) |
| { |
| set_selection(other_value); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = other_value.single_value; |
| break; |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new Protocols_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; |
| default: |
| TTCN_error("Copying an uninitialized/unsupported template of enumerated type @General_Types.Protocols."); |
| } |
| } |
| |
| Protocols_template::Protocols_template() |
| { |
| } |
| |
| Protocols_template::Protocols_template(template_sel other_value) |
| : Base_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| Protocols_template::Protocols_template(int other_value) |
| : Base_Template(SPECIFIC_VALUE) |
| { |
| if (!Protocols::is_valid_enum(other_value)) TTCN_error("Initializing a template of enumerated type @General_Types.Protocols with unknown numeric value %d.", other_value); |
| single_value = (Protocols::enum_type)other_value; |
| } |
| |
| Protocols_template::Protocols_template(Protocols::enum_type other_value) |
| : Base_Template(SPECIFIC_VALUE) |
| { |
| single_value = other_value; |
| } |
| |
| Protocols_template::Protocols_template(const Protocols& other_value) |
| : Base_Template(SPECIFIC_VALUE) |
| { |
| if (other_value.enum_value == Protocols::UNBOUND_VALUE) TTCN_error("Creating a template from an unbound value of enumerated type @General_Types.Protocols."); |
| single_value = other_value.enum_value; |
| } |
| |
| Protocols_template::Protocols_template(const OPTIONAL<Protocols>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| set_selection(SPECIFIC_VALUE); |
| single_value = (Protocols::enum_type)(const Protocols&)other_value; |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of enumerated type @General_Types.Protocols from an unbound optional field."); |
| } |
| } |
| |
| Protocols_template::Protocols_template(const Protocols_template& other_value) |
| : Base_Template() |
| { |
| copy_template(other_value); |
| } |
| |
| Protocols_template::~Protocols_template() |
| { |
| clean_up(); |
| } |
| |
| boolean Protocols_template::is_bound() const |
| { |
| if (template_selection == UNINITIALIZED_TEMPLATE && !is_ifpresent) return FALSE; |
| return TRUE; |
| } |
| |
| boolean Protocols_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| return single_value != Protocols::UNBOUND_VALUE; |
| } |
| |
| void Protocols_template::clean_up() |
| { |
| if (template_selection == VALUE_LIST || template_selection == COMPLEMENTED_LIST) delete [] value_list.list_value; |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| Protocols_template& Protocols_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| Protocols_template& Protocols_template::operator=(int other_value) |
| { |
| if (!Protocols::is_valid_enum(other_value)) TTCN_warning("Assigning unknown numeric value %d to a template of enumerated type @General_Types.Protocols.", other_value); |
| clean_up(); |
| set_selection(SPECIFIC_VALUE); |
| single_value = (Protocols::enum_type)other_value; |
| return *this; |
| } |
| |
| Protocols_template& Protocols_template::operator=(Protocols::enum_type other_value) |
| { |
| clean_up(); |
| set_selection(SPECIFIC_VALUE); |
| single_value = other_value; |
| return *this; |
| } |
| |
| Protocols_template& Protocols_template::operator=(const Protocols& other_value) |
| { |
| if (other_value.enum_value == Protocols::UNBOUND_VALUE) TTCN_error("Assignment of an unbound value of enumerated type @General_Types.Protocols to a template."); |
| clean_up(); |
| set_selection(SPECIFIC_VALUE); |
| single_value = other_value.enum_value; |
| return *this; |
| } |
| |
| Protocols_template& Protocols_template::operator=(const OPTIONAL<Protocols>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| set_selection(SPECIFIC_VALUE); |
| single_value = (Protocols::enum_type)(const Protocols&)other_value; |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Assignment of an unbound optional field to a template of enumerated type @General_Types.Protocols."); |
| } |
| return *this; |
| } |
| |
| Protocols_template& Protocols_template::operator=(const Protocols_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| boolean Protocols_template::match(Protocols::enum_type other_value, boolean) const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| return single_value == other_value; |
| case OMIT_VALUE: |
| return FALSE; |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| 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)) return template_selection == VALUE_LIST; |
| return template_selection == COMPLEMENTED_LIST; |
| default: |
| TTCN_error("Matching an uninitialized/unsupported template of enumerated type @General_Types.Protocols."); |
| } |
| return FALSE; |
| } |
| |
| boolean Protocols_template::match(const Protocols& other_value, boolean) const |
| { |
| if (other_value.enum_value == Protocols::UNBOUND_VALUE) TTCN_error("Matching a template of enumerated type @General_Types.Protocols with an unbound value."); |
| return match(other_value.enum_value); |
| } |
| |
| Protocols::enum_type Protocols_template::valueof() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) TTCN_error("Performing a valueof or send operation on a non-specific template of enumerated type @General_Types.Protocols."); |
| return single_value; |
| } |
| |
| void Protocols_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| if (template_type != VALUE_LIST && template_type != COMPLEMENTED_LIST) TTCN_error("Setting an invalid list type for a template of enumerated type @General_Types.Protocols."); |
| clean_up(); |
| set_selection(template_type); |
| value_list.n_values = list_length; |
| value_list.list_value = new Protocols_template[list_length]; |
| } |
| |
| Protocols_template& Protocols_template::list_item(unsigned int list_index) |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) TTCN_error("Accessing a list element in a non-list template of enumerated type @General_Types.Protocols."); |
| if (list_index >= value_list.n_values) TTCN_error("Index overflow in a value list template of enumerated type @General_Types.Protocols."); |
| return value_list.list_value[list_index]; |
| } |
| |
| void Protocols_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| TTCN_Logger::log_event_enum(Protocols::enum_to_str(single_value), single_value); |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| case VALUE_LIST: |
| TTCN_Logger::log_char('('); |
| for (unsigned int elem_count = 0; elem_count < value_list.n_values; elem_count++) { |
| if (elem_count > 0) TTCN_Logger::log_event_str(", "); |
| value_list.list_value[elem_count].log(); |
| } |
| TTCN_Logger::log_char(')'); |
| break; |
| default: |
| log_generic(); |
| } |
| log_ifpresent(); |
| } |
| |
| void Protocols_template::log_match(const Protocols& match_value, boolean) const |
| { |
| match_value.log(); |
| TTCN_Logger::log_event_str(" with "); |
| log(); |
| if (match(match_value)) TTCN_Logger::log_event_str(" matched"); |
| else TTCN_Logger::log_event_str(" unmatched"); |
| } |
| |
| void Protocols_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| text_buf.push_int(single_value); |
| 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 elem_count = 0; elem_count < value_list.n_values; elem_count++) |
| value_list.list_value[elem_count].encode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text encoder: Encoding an uninitialized/unsupported template of enumerated type @General_Types.Protocols."); |
| } |
| } |
| |
| void Protocols_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_base(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value = (Protocols::enum_type)text_buf.pull_int().get_val(); |
| if (!Protocols::is_valid_enum(single_value)) TTCN_error("Text decoder: Unknown numeric value %d was received for a template of enumerated type @General_Types.Protocols.", single_value); |
| 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 Protocols_template[value_list.n_values]; |
| for (unsigned int elem_count = 0; elem_count < value_list.n_values; elem_count++) |
| value_list.list_value[elem_count].decode_text(text_buf); |
| break; |
| default: |
| TTCN_error("Text decoder: An unknown/unsupported selection was received for a template of enumerated type @General_Types.Protocols."); |
| } |
| } |
| |
| boolean Protocols_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean Protocols_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int i=0; i<value_list.n_values; i++) |
| if (value_list.list_value[i].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| void Protocols_template::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_TEMPLATE, "enumerated template"); |
| Module_Param_Ptr m_p = ¶m; |
| switch (m_p->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: { |
| Protocols_template new_temp; |
| new_temp.set_type(m_p->get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, m_p->get_size()); |
| for (size_t p_i=0; p_i<m_p->get_size(); p_i++) { |
| new_temp.list_item(p_i).set_param(*m_p->get_elem(p_i)); |
| } |
| *this = new_temp; |
| break; } |
| case Module_Param::MP_Enumerated: { |
| Protocols::enum_type enum_val = Protocols::str_to_enum(m_p->get_enumerated()); |
| if (!Protocols::is_valid_enum(enum_val)) { |
| param.error("Invalid enumerated value for type @General_Types.Protocols."); |
| } |
| *this = enum_val; |
| } break; |
| default: |
| param.type_error("enumerated template", "@General_Types.Protocols"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| } |
| |
| void Protocols_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_VALUE: |
| if (!is_ifpresent && template_selection==SPECIFIC_VALUE) return; |
| break; |
| case TR_OMIT: |
| if (!is_ifpresent && (template_selection==OMIT_VALUE || template_selection==SPECIFIC_VALUE)) return; |
| break; |
| 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 : "@General_Types.Protocols"); |
| } |
| |
| |
| const COMPONENT ListOfDummy__comptype::UNBOUND_ELEM; |
| ListOfDummy__comptype::ListOfDummy__comptype() |
| { |
| val_ptr = NULL; |
| } |
| |
| ListOfDummy__comptype::ListOfDummy__comptype(null_type) |
| { |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| } |
| |
| ListOfDummy__comptype::ListOfDummy__comptype(const ListOfDummy__comptype& other_value) |
| { |
| if (!other_value.is_bound()) TTCN_error("Copying an unbound value of type @General_Types.ListOfDummy_comptype."); |
| val_ptr = other_value.val_ptr; |
| val_ptr->ref_count++; |
| } |
| |
| ListOfDummy__comptype::~ListOfDummy__comptype() |
| { |
| clean_up(); |
| if (val_ptr != NULL) val_ptr = NULL; |
| } |
| |
| void ListOfDummy__comptype::clean_up() |
| { |
| if (val_ptr != NULL) { |
| if (val_ptr->ref_count > 1) { |
| val_ptr->ref_count--; |
| val_ptr = NULL; |
| } |
| else if (val_ptr->ref_count == 1) { |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; |
| elem_count++) |
| if (val_ptr->value_elements[elem_count] != NULL) |
| delete val_ptr->value_elements[elem_count]; |
| free_pointers((void**)val_ptr->value_elements); |
| delete val_ptr; |
| val_ptr = NULL; |
| } |
| else |
| TTCN_error("Internal error: Invalid reference counter in a record of/set of value."); |
| } |
| } |
| |
| ListOfDummy__comptype& ListOfDummy__comptype::operator=(null_type) |
| { |
| clean_up(); |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| return *this; |
| } |
| |
| ListOfDummy__comptype& ListOfDummy__comptype::operator=(const ListOfDummy__comptype& other_value) |
| { |
| if (other_value.val_ptr == NULL) TTCN_error("Assigning an unbound value of type @General_Types.ListOfDummy_comptype."); |
| if (this != &other_value) { |
| clean_up(); |
| val_ptr = other_value.val_ptr; |
| val_ptr->ref_count++; |
| } |
| return *this; |
| } |
| |
| boolean ListOfDummy__comptype::operator==(null_type) const |
| { |
| if (val_ptr == NULL) |
| TTCN_error("The left operand of comparison is an unbound value of type @General_Types.ListOfDummy_comptype."); |
| return val_ptr->n_elements == 0 ; |
| } |
| |
| boolean ListOfDummy__comptype::operator==(const ListOfDummy__comptype& other_value) const |
| { |
| if (val_ptr == NULL) TTCN_error("The left operand of comparison is an unbound value of type @General_Types.ListOfDummy_comptype."); |
| if (other_value.val_ptr == NULL) TTCN_error("The right operand of comparison is an unbound value of type @General_Types.ListOfDummy_comptype."); |
| if (val_ptr == other_value.val_ptr) return TRUE; |
| if (val_ptr->n_elements != (other_value.val_ptr)->n_elements) |
| return FALSE; |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++){ |
| if (val_ptr->value_elements[elem_count] != NULL){ |
| if ((other_value.val_ptr)->value_elements[elem_count] != NULL){ |
| if (*val_ptr->value_elements[elem_count] != *(other_value.val_ptr)->value_elements[elem_count]) return FALSE; |
| } else return FALSE; |
| } else { |
| if ((other_value.val_ptr)->value_elements[elem_count] != NULL) return FALSE; |
| } |
| } |
| return TRUE; |
| } |
| |
| COMPONENT& ListOfDummy__comptype::operator[](int index_value) |
| { |
| if (index_value < 0) TTCN_error("Accessing an element of type @General_Types.ListOfDummy_comptype using a negative index: %d.", index_value); |
| if (val_ptr == NULL) { |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| } else if (val_ptr->ref_count > 1) { |
| struct recordof_setof_struct *new_val_ptr = new recordof_setof_struct; |
| new_val_ptr->ref_count = 1; |
| new_val_ptr->n_elements = (index_value >= val_ptr->n_elements) ? index_value + 1 : val_ptr->n_elements; |
| new_val_ptr->value_elements = (COMPONENT**)allocate_pointers(new_val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++){ |
| if (val_ptr->value_elements[elem_count] != NULL){ |
| new_val_ptr->value_elements[elem_count] = new COMPONENT(*(val_ptr->value_elements[elem_count])); |
| } |
| } |
| clean_up(); |
| val_ptr = new_val_ptr; |
| } |
| if (index_value >= val_ptr->n_elements) set_size(index_value + 1); |
| if (val_ptr->value_elements[index_value] == NULL) { |
| val_ptr->value_elements[index_value] = new COMPONENT; |
| } |
| return *val_ptr->value_elements[index_value]; |
| } |
| |
| COMPONENT& ListOfDummy__comptype::operator[](const INTEGER& index_value) |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a value of type @General_Types.ListOfDummy_comptype."); |
| return (*this)[(int)index_value]; |
| } |
| |
| const COMPONENT& ListOfDummy__comptype::operator[](int index_value) const |
| { |
| if (val_ptr == NULL) |
| TTCN_error("Accessing an element in an unbound value of type @General_Types.ListOfDummy_comptype."); |
| if (index_value < 0) TTCN_error("Accessing an element of type @General_Types.ListOfDummy_comptype using a negative index: %d.", index_value); |
| if (index_value >= val_ptr->n_elements) TTCN_error("Index overflow in a value of type @General_Types.ListOfDummy_comptype: The index is %d, but the value has only %d elements.", index_value, val_ptr->n_elements); |
| return (val_ptr->value_elements[index_value] == NULL) ? |
| UNBOUND_ELEM : *val_ptr->value_elements[index_value]; |
| } |
| |
| const COMPONENT& ListOfDummy__comptype::operator[](const INTEGER& index_value) const |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a value of type @General_Types.ListOfDummy_comptype."); |
| return (*this)[(int)index_value]; |
| } |
| |
| ListOfDummy__comptype ListOfDummy__comptype::operator<<=(int rotate_count) const |
| { |
| return *this >>= (-rotate_count); |
| } |
| |
| ListOfDummy__comptype ListOfDummy__comptype::operator<<=(const INTEGER& rotate_count) const |
| { |
| rotate_count.must_bound("Unbound integer operand of rotate left operator."); |
| return *this >>= (int)(-rotate_count); |
| } |
| |
| ListOfDummy__comptype ListOfDummy__comptype::operator>>=(const INTEGER& rotate_count) const |
| { |
| rotate_count.must_bound("Unbound integer operand of rotate right operator."); |
| return *this >>= (int)rotate_count; |
| } |
| |
| ListOfDummy__comptype ListOfDummy__comptype::operator>>=(int rotate_count) const |
| { |
| if (val_ptr == NULL) TTCN_error("Performing rotation operation on an unbound value of type @General_Types.ListOfDummy_comptype."); |
| if (val_ptr->n_elements == 0) return *this; |
| int rc; |
| if (rotate_count>=0) rc = rotate_count % val_ptr->n_elements; |
| else rc = val_ptr->n_elements - ((-rotate_count) % val_ptr->n_elements); |
| if (rc == 0) return *this; |
| ListOfDummy__comptype ret_val; |
| ret_val.set_size(val_ptr->n_elements); |
| for (int i=0; i<val_ptr->n_elements; i++) { |
| if (val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[(i+rc)%val_ptr->n_elements] =new COMPONENT(*val_ptr->value_elements[i]); |
| } |
| } |
| return ret_val; |
| } |
| |
| ListOfDummy__comptype ListOfDummy__comptype::operator+(const ListOfDummy__comptype& other_value) const |
| { |
| if (val_ptr == NULL || other_value.val_ptr == NULL) TTCN_error("Unbound operand of @General_Types.ListOfDummy_comptype concatenation."); |
| if (val_ptr->n_elements == 0) return other_value; |
| if (other_value.val_ptr->n_elements == 0) return *this; |
| ListOfDummy__comptype ret_val; |
| ret_val.set_size(val_ptr->n_elements+other_value.val_ptr->n_elements); |
| for (int i=0; i<val_ptr->n_elements; i++) { |
| if (val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i] = new COMPONENT(*val_ptr->value_elements[i]); |
| } |
| } |
| for (int i=0; i<other_value.val_ptr->n_elements; i++) { |
| if (other_value.val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i+val_ptr->n_elements] = new COMPONENT(*other_value.val_ptr->value_elements[i]); |
| } |
| } |
| return ret_val; |
| } |
| |
| ListOfDummy__comptype ListOfDummy__comptype::substr(int index, int returncount) const |
| { |
| if (val_ptr == NULL) TTCN_error("The first argument of substr() is an unbound value of type @General_Types.ListOfDummy_comptype."); |
| check_substr_arguments(val_ptr->n_elements, index, returncount, "@General_Types.ListOfDummy_comptype","element"); |
| ListOfDummy__comptype ret_val; |
| ret_val.set_size(returncount); |
| for (int i=0; i<returncount; i++) { |
| if (val_ptr->value_elements[i+index] != NULL) { |
| ret_val.val_ptr->value_elements[i] = new COMPONENT(*val_ptr->value_elements[i+index]); |
| } |
| } |
| return ret_val; |
| } |
| |
| ListOfDummy__comptype ListOfDummy__comptype::replace(int index, int len, const ListOfDummy__comptype& repl) const |
| { |
| if (val_ptr == NULL) TTCN_error("The first argument of replace() is an unbound value of type @General_Types.ListOfDummy_comptype."); |
| if (repl.val_ptr == NULL) TTCN_error("The fourth argument of replace() is an unbound value of type @General_Types.ListOfDummy_comptype."); |
| check_replace_arguments(val_ptr->n_elements, index, len, "@General_Types.ListOfDummy_comptype","element"); |
| ListOfDummy__comptype ret_val; |
| ret_val.set_size(val_ptr->n_elements + repl.val_ptr->n_elements - len); |
| for (int i = 0; i < index; i++) { |
| if (val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i] = new COMPONENT(*val_ptr->value_elements[i]); |
| } |
| } |
| for (int i = 0; i < repl.val_ptr->n_elements; i++) { |
| if (repl.val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i+index] = new COMPONENT(*repl.val_ptr->value_elements[i]); |
| } |
| } |
| for (int i = 0; i < val_ptr->n_elements - index - len; i++) { |
| if (val_ptr->value_elements[index+i+len] != NULL) { |
| ret_val.val_ptr->value_elements[index+i+repl.val_ptr->n_elements] = new COMPONENT(*val_ptr->value_elements[index+i+len]); |
| } |
| } |
| return ret_val; |
| } |
| |
| ListOfDummy__comptype ListOfDummy__comptype::replace(int index, int len, const ListOfDummy__comptype_template& repl) const |
| { |
| if (!repl.is_value()) TTCN_error("The fourth argument of function replace() is a template with non-specific value."); |
| return replace(index, len, repl.valueof()); |
| } |
| |
| void ListOfDummy__comptype::set_size(int new_size) |
| { |
| if (new_size < 0) TTCN_error("Internal error: Setting a negative size for a value of type @General_Types.ListOfDummy_comptype."); |
| if (val_ptr == NULL) { |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| } else if (val_ptr->ref_count > 1) { |
| struct recordof_setof_struct *new_val_ptr = new recordof_setof_struct; |
| new_val_ptr->ref_count = 1; |
| new_val_ptr->n_elements = (new_size < val_ptr->n_elements) ? new_size : val_ptr->n_elements; |
| new_val_ptr->value_elements = (COMPONENT**)allocate_pointers(new_val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < new_val_ptr->n_elements; elem_count++) { |
| if (val_ptr->value_elements[elem_count] != NULL){ |
| new_val_ptr->value_elements[elem_count] = new COMPONENT(*(val_ptr->value_elements[elem_count])); |
| } |
| } |
| clean_up(); |
| val_ptr = new_val_ptr; |
| } |
| if (new_size > val_ptr->n_elements) { |
| val_ptr->value_elements = (COMPONENT**)reallocate_pointers((void**)val_ptr->value_elements, val_ptr->n_elements, new_size); |
| #ifdef TITAN_MEMORY_DEBUG_SET_RECORD_OF |
| if((val_ptr->n_elements/1000)!=(new_size/1000)) TTCN_warning("New size of type @General_Types.ListOfDummy_comptype: %d",new_size); |
| #endif |
| val_ptr->n_elements = new_size; |
| } else if (new_size < val_ptr->n_elements) { |
| for (int elem_count = new_size; elem_count < val_ptr->n_elements; elem_count++) |
| if (val_ptr->value_elements[elem_count] != NULL)delete val_ptr->value_elements[elem_count]; |
| val_ptr->value_elements = (COMPONENT**)reallocate_pointers((void**)val_ptr->value_elements, val_ptr->n_elements, new_size); |
| val_ptr->n_elements = new_size; |
| } |
| } |
| |
| boolean ListOfDummy__comptype::is_value() const |
| { |
| if (val_ptr == NULL) return FALSE; |
| for(int i = 0; i < val_ptr->n_elements; ++i) { |
| if (val_ptr->value_elements[i] == NULL || !val_ptr->value_elements[i]->is_value()) return FALSE; |
| } |
| return TRUE; |
| } |
| |
| int ListOfDummy__comptype::size_of() const |
| { |
| if (val_ptr == NULL) TTCN_error("Performing sizeof operation on an unbound value of type @General_Types.ListOfDummy_comptype."); |
| return val_ptr->n_elements; |
| } |
| |
| int ListOfDummy__comptype::lengthof() const |
| { |
| if (val_ptr == NULL) TTCN_error("Performing lengthof operation on an unbound value of type @General_Types.ListOfDummy_comptype."); |
| for (int my_length=val_ptr->n_elements; my_length>0; my_length--) if (val_ptr->value_elements[my_length-1] != NULL) return my_length; |
| return 0; |
| } |
| |
| void ListOfDummy__comptype::log() const |
| { |
| if (val_ptr == NULL) {; |
| TTCN_Logger::log_event_unbound(); |
| return; |
| } |
| switch (val_ptr->n_elements) { |
| case 0: |
| TTCN_Logger::log_event_str("{ }"); |
| break; |
| default: |
| TTCN_Logger::log_event_str("{ "); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) { |
| if (elem_count > 0) TTCN_Logger::log_event_str(", "); |
| (*this)[elem_count].log(); |
| } |
| TTCN_Logger::log_event_str(" }"); |
| } |
| } |
| |
| void ListOfDummy__comptype::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE|Module_Param::BC_LIST, "record of value"); |
| switch (param.get_operation_type()) { |
| case Module_Param::OT_ASSIGN: |
| if (param.get_type()==Module_Param::MP_Value_List && param.get_size()==0) { |
| *this = NULL_VALUE; |
| return; |
| } |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: |
| set_size(param.get_size()); |
| for (size_t i=0; i<param.get_size(); ++i) { |
| Module_Param* const curr = param.get_elem(i); |
| if (curr->get_type()!=Module_Param::MP_NotUsed) { |
| (*this)[i].set_param(*curr); |
| if (!(*this)[i].is_bound()) { |
| delete val_ptr->value_elements[i]; |
| val_ptr->value_elements[i] = NULL; |
| } |
| } |
| } |
| break; |
| case Module_Param::MP_Indexed_List: |
| for (size_t i=0; i<param.get_size(); ++i) { |
| Module_Param* const curr = param.get_elem(i); |
| (*this)[curr->get_id()->get_index()].set_param(*curr); |
| if (!(*this)[curr->get_id()->get_index()].is_bound()) { |
| delete val_ptr->value_elements[curr->get_id()->get_index()]; |
| val_ptr->value_elements[curr->get_id()->get_index()] = NULL; |
| } |
| } |
| break; |
| default: |
| param.type_error("record of value", "@General_Types.ListOfDummy_comptype"); |
| } |
| break; |
| case Module_Param::OT_CONCAT: |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: { |
| if (!is_bound()) *this = NULL_VALUE; |
| int start_idx = lengthof(); |
| for (size_t i=0; i<param.get_size(); ++i) { |
| Module_Param* const curr = param.get_elem(i); |
| if ((curr->get_type()!=Module_Param::MP_NotUsed)) { |
| (*this)[start_idx+(int)i].set_param(*curr); |
| } |
| } |
| } break; |
| case Module_Param::MP_Indexed_List: |
| param.error("Cannot concatenate an indexed value list"); |
| break; |
| default: |
| param.type_error("record of value", "@General_Types.ListOfDummy_comptype"); |
| } |
| break; |
| default: |
| TTCN_error("Internal error: Unknown operation type."); |
| } |
| } |
| |
| void ListOfDummy__comptype::set_implicit_omit() |
| { |
| if (val_ptr == NULL) return; |
| for (int i = 0; i < val_ptr->n_elements; i++) { |
| if (val_ptr->value_elements[i] != NULL) val_ptr->value_elements[i]->set_implicit_omit(); |
| } |
| } |
| |
| void ListOfDummy__comptype::encode_text(Text_Buf& text_buf) const |
| { |
| if (val_ptr == NULL) TTCN_error("Text encoder: Encoding an unbound value of type @General_Types.ListOfDummy_comptype."); |
| text_buf.push_int(val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) |
| (*this)[elem_count].encode_text(text_buf); |
| } |
| |
| void ListOfDummy__comptype::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = text_buf.pull_int().get_val(); |
| if (val_ptr->n_elements < 0) TTCN_error("Text decoder: Negative size was received for a value of type @General_Types.ListOfDummy_comptype."); |
| val_ptr->value_elements = (COMPONENT**)allocate_pointers(val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) { |
| val_ptr->value_elements[elem_count] = new COMPONENT; |
| val_ptr->value_elements[elem_count]->decode_text(text_buf); |
| } |
| } |
| |
| void ListOfDummy__comptype::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t 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); |
| 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;} |
| default: |
| TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| void ListOfDummy__comptype::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t 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(); |
| if(b_data[p_buf.get_len()-1]!='\0'){ |
| 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); |
| 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)<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;} |
| default: |
| TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| int ListOfDummy__comptype::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean /*no_err*/, int sel_field, boolean first_call, const RAW_Force_Omit*){ |
| int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding); |
| limit-=prepaddlength; |
| int decoded_length=0; |
| int decoded_field_length=0; |
| size_t start_of_field=0; |
| if(first_call) { |
| clean_up(); |
| val_ptr=new recordof_setof_struct; |
| val_ptr->ref_count=1; |
| val_ptr->n_elements=0; |
| val_ptr->value_elements=NULL; |
| } |
| int start_field=val_ptr->n_elements; |
| if(p_td.raw->fieldlength || sel_field!=-1){ |
| int a=0; |
| if(sel_field==-1) sel_field=p_td.raw->fieldlength; |
| for(a=0;a<sel_field;a++){ |
| decoded_field_length=(*this)[a+start_field].RAW_decode(*p_td.oftype_descr,p_buf,limit,top_bit_ord,TRUE); |
| if(decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| } |
| if(a==0) val_ptr->n_elements=0; |
| } else { |
| if(limit==0){ |
| if(!first_call) return -1; |
| val_ptr->n_elements=0; |
| return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength; |
| } |
| int a=start_field; |
| while(limit>0){ |
| start_of_field=p_buf.get_pos_bit(); |
| decoded_field_length=(*this)[a].RAW_decode(*p_td.oftype_descr,p_buf,limit,top_bit_ord,TRUE); |
| if(decoded_field_length < 0){ |
| delete &(*this)[a]; |
| val_ptr->n_elements--; |
| p_buf.set_pos_bit(start_of_field); |
| if(a>start_field){ |
| return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength; |
| } else return -1; |
| } |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| a++; |
| } |
| } |
| return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength; |
| } |
| |
| int ListOfDummy__comptype::RAW_encode(const TTCN_Typedescriptor_t& p_td,RAW_enc_tree& myleaf) const{ |
| int encoded_length=0; |
| int encoded_num_of_records=p_td.raw->fieldlength?smaller(val_ptr->n_elements, p_td.raw->fieldlength):val_ptr->n_elements; |
| myleaf.isleaf=FALSE; |
| myleaf.rec_of=TRUE; |
| myleaf.body.node.num_of_nodes=encoded_num_of_records; |
| myleaf.body.node.nodes=init_nodes_of_enc_tree(encoded_num_of_records); |
| for(int a=0;a<encoded_num_of_records;a++){ |
| myleaf.body.node.nodes[a]=new RAW_enc_tree(TRUE,&myleaf,&(myleaf.curr_pos),a,p_td.oftype_descr->raw); |
| encoded_length+=(*this)[a].RAW_encode(*p_td.oftype_descr,*myleaf.body.node.nodes[a]); |
| } |
| return myleaf.length=encoded_length; |
| } |
| |
| void ListOfDummy__comptype_template::copy_value(const ListOfDummy__comptype& other_value) |
| { |
| if (!other_value.is_bound()) TTCN_error("Initialization of a template of type @General_Types.ListOfDummy_comptype with an unbound value."); |
| single_value.n_elements = other_value.size_of(); |
| single_value.value_elements = (COMPONENT_template**)allocate_pointers(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (other_value[elem_count].is_bound()) { |
| single_value.value_elements[elem_count] = new COMPONENT_template(other_value[elem_count]); |
| } else { |
| single_value.value_elements[elem_count] = new COMPONENT_template; |
| } |
| } |
| set_selection(SPECIFIC_VALUE); |
| } |
| |
| void ListOfDummy__comptype_template::copy_template(const ListOfDummy__comptype_template& other_value) |
| { |
| switch (other_value.template_selection) { |
| case SPECIFIC_VALUE: |
| single_value.n_elements = other_value.single_value.n_elements; |
| single_value.value_elements = (COMPONENT_template**)allocate_pointers(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (UNINITIALIZED_TEMPLATE != other_value.single_value.value_elements[elem_count]->get_selection()) { |
| single_value.value_elements[elem_count] = new COMPONENT_template(*other_value.single_value.value_elements[elem_count]); |
| } else { |
| single_value.value_elements[elem_count] = new COMPONENT_template; |
| } |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new ListOfDummy__comptype_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; |
| default: |
| TTCN_error("Copying an uninitialized/unsupported template of type @General_Types.ListOfDummy_comptype."); |
| break; |
| } |
| set_selection(other_value); |
| } |
| |
| boolean ListOfDummy__comptype_template::match_function_specific(const Base_Type *value_ptr, int value_index, const Restricted_Length_Template *template_ptr, int template_index, boolean legacy) |
| { |
| if (value_index >= 0) return ((const ListOfDummy__comptype_template*)template_ptr)->single_value.value_elements[template_index]->match((*(const ListOfDummy__comptype*)value_ptr)[value_index], legacy); |
| else return ((const ListOfDummy__comptype_template*)template_ptr)->single_value.value_elements[template_index]->is_any_or_omit(); |
| } |
| |
| ListOfDummy__comptype_template::ListOfDummy__comptype_template() |
| { |
| } |
| |
| ListOfDummy__comptype_template::ListOfDummy__comptype_template(template_sel other_value) |
| : Record_Of_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| ListOfDummy__comptype_template::ListOfDummy__comptype_template(null_type) |
| : Record_Of_Template(SPECIFIC_VALUE) |
| { |
| single_value.n_elements = 0; |
| single_value.value_elements = NULL; |
| } |
| |
| ListOfDummy__comptype_template::ListOfDummy__comptype_template(const ListOfDummy__comptype& other_value) |
| { |
| copy_value(other_value); |
| } |
| |
| ListOfDummy__comptype_template::ListOfDummy__comptype_template(const OPTIONAL<ListOfDummy__comptype>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const ListOfDummy__comptype&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of type @General_Types.ListOfDummy_comptype from an unbound optional field."); |
| } |
| } |
| |
| ListOfDummy__comptype_template::ListOfDummy__comptype_template(const ListOfDummy__comptype_template& other_value) |
| : Record_Of_Template() |
| { |
| copy_template(other_value); |
| } |
| |
| ListOfDummy__comptype_template::~ListOfDummy__comptype_template() |
| { |
| clean_up(); |
| } |
| |
| void ListOfDummy__comptype_template::clean_up() |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| delete single_value.value_elements[elem_count]; |
| free_pointers((void**)single_value.value_elements); |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| delete [] value_list.list_value; |
| default: |
| break; |
| } |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| ListOfDummy__comptype_template& ListOfDummy__comptype_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| ListOfDummy__comptype_template& ListOfDummy__comptype_template::operator=(null_type) |
| { |
| clean_up(); |
| set_selection(SPECIFIC_VALUE); |
| single_value.n_elements = 0; |
| single_value.value_elements = NULL; |
| return *this; |
| } |
| |
| ListOfDummy__comptype_template& ListOfDummy__comptype_template::operator=(const ListOfDummy__comptype& other_value) |
| { |
| clean_up(); |
| copy_value(other_value); |
| return *this; |
| } |
| |
| ListOfDummy__comptype_template& ListOfDummy__comptype_template::operator=(const OPTIONAL<ListOfDummy__comptype>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const ListOfDummy__comptype&)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 @General_Types.ListOfDummy_comptype."); |
| } |
| return *this; |
| } |
| |
| ListOfDummy__comptype_template& ListOfDummy__comptype_template::operator=(const ListOfDummy__comptype_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| COMPONENT_template& ListOfDummy__comptype_template::operator[](int index_value) |
| { |
| if (index_value < 0) TTCN_error("Accessing an element of a template for type @General_Types.ListOfDummy_comptype using a negative index: %d.", index_value); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: |
| if(index_value < single_value.n_elements) break; |
| // no break |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| case UNINITIALIZED_TEMPLATE: |
| set_size(index_value + 1); |
| break; |
| default: |
| TTCN_error("Accessing an element of a non-specific template for type @General_Types.ListOfDummy_comptype."); |
| break; |
| } |
| return *single_value.value_elements[index_value]; |
| } |
| |
| COMPONENT_template& ListOfDummy__comptype_template::operator[](const INTEGER& index_value) |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a template of type @General_Types.ListOfDummy_comptype."); |
| return (*this)[(int)index_value]; |
| } |
| |
| const COMPONENT_template& ListOfDummy__comptype_template::operator[](int index_value) const |
| { |
| if (index_value < 0) TTCN_error("Accessing an element of a template for type @General_Types.ListOfDummy_comptype using a negative index: %d.", index_value); |
| if (template_selection != SPECIFIC_VALUE) TTCN_error("Accessing an element of a non-specific template for type @General_Types.ListOfDummy_comptype."); |
| if (index_value >= single_value.n_elements) TTCN_error("Index overflow in a template of type @General_Types.ListOfDummy_comptype: The index is %d, but the template has only %d elements.", index_value, single_value.n_elements); |
| return *single_value.value_elements[index_value]; |
| } |
| |
| const COMPONENT_template& ListOfDummy__comptype_template::operator[](const INTEGER& index_value) const |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a template of type @General_Types.ListOfDummy_comptype."); |
| return (*this)[(int)index_value]; |
| } |
| |
| void ListOfDummy__comptype_template::set_size(int new_size) |
| { |
| if (new_size < 0) TTCN_error("Internal error: Setting a negative size for a template of type @General_Types.ListOfDummy_comptype."); |
| template_sel old_selection = template_selection; |
| if (old_selection != SPECIFIC_VALUE) { |
| clean_up(); |
| set_selection(SPECIFIC_VALUE); |
| single_value.n_elements = 0; |
| single_value.value_elements = NULL; |
| } |
| if (new_size > single_value.n_elements) { |
| single_value.value_elements = (COMPONENT_template**)reallocate_pointers((void**)single_value.value_elements, single_value.n_elements, new_size); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) { |
| for (int elem_count = single_value.n_elements; elem_count < new_size; elem_count++) |
| single_value.value_elements[elem_count] = new COMPONENT_template(ANY_VALUE); |
| } else { |
| for (int elem_count = single_value.n_elements; elem_count < new_size; elem_count++) |
| single_value.value_elements[elem_count] = new COMPONENT_template; |
| } |
| single_value.n_elements = new_size; |
| } else if (new_size < single_value.n_elements) { |
| for (int elem_count = new_size; elem_count < single_value.n_elements; elem_count++) |
| delete single_value.value_elements[elem_count]; |
| single_value.value_elements = (COMPONENT_template**)reallocate_pointers((void**)single_value.value_elements, single_value.n_elements, new_size); |
| single_value.n_elements = new_size; |
| } |
| } |
| |
| int ListOfDummy__comptype_template::n_elem() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| return single_value.n_elements; |
| break; |
| case VALUE_LIST: |
| return value_list.n_values; |
| break; |
| default: |
| TTCN_error("Performing n_elem"); |
| } |
| } |
| |
| int ListOfDummy__comptype_template::size_of(boolean is_size) const |
| { |
| const char* op_name = is_size ? "size" : "length"; |
| int min_size; |
| boolean has_any_or_none; |
| if (is_ifpresent) TTCN_error("Performing %sof() operation on a template of type @General_Types.ListOfDummy_comptype which has an ifpresent attribute.", op_name); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: { |
| min_size = 0; |
| has_any_or_none = FALSE; |
| int elem_count = single_value.n_elements; |
| if (!is_size) { while (elem_count>0 && !single_value.value_elements[elem_count-1]->is_bound()) elem_count--; } |
| for (int i=0; i<elem_count; i++) { |
| switch (single_value.value_elements[i]->get_selection()) { |
| case OMIT_VALUE: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.ListOfDummy_comptype containing omit element.", op_name); |
| case ANY_OR_OMIT: |
| has_any_or_none = TRUE; |
| break; |
| default: |
| min_size++; |
| break; |
| } |
| } |
| } break; |
| case OMIT_VALUE: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.ListOfDummy_comptype containing omit value.", op_name); |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| min_size = 0; |
| has_any_or_none = TRUE; |
| break; |
| case VALUE_LIST: |
| { |
| if (value_list.n_values<1) |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.ListOfDummy_comptype containing an empty list.", op_name); |
| int item_size = value_list.list_value[0].size_of(is_size); |
| for (unsigned int i = 1; i < value_list.n_values; i++) { |
| if (value_list.list_value[i].size_of(is_size)!=item_size) |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.ListOfDummy_comptype containing a value list with different sizes.", op_name); |
| } |
| min_size = item_size; |
| has_any_or_none = FALSE; |
| break; |
| } |
| case COMPLEMENTED_LIST: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.ListOfDummy_comptype containing complemented list.", op_name); |
| default: |
| TTCN_error("Performing %sof() operation on an uninitialized/unsupported template of type @General_Types.ListOfDummy_comptype.", op_name); |
| } |
| return check_section_is_single(min_size, has_any_or_none, op_name, "a", "template of type @General_Types.ListOfDummy_comptype"); |
| } |
| |
| boolean ListOfDummy__comptype_template::match(const ListOfDummy__comptype& other_value, boolean legacy) const |
| { |
| if (!other_value.is_bound()) return FALSE; |
| int value_length = other_value.size_of(); |
| if (!match_length(value_length)) return FALSE; |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| return match_record_of(&other_value, value_length, this, single_value.n_elements, match_function_specific, legacy); |
| case OMIT_VALUE: |
| return FALSE; |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| 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; |
| default: |
| TTCN_error("Matching with an uninitialized/unsupported template of type @General_Types.ListOfDummy_comptype."); |
| } |
| return FALSE; |
| } |
| |
| boolean ListOfDummy__comptype_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| if (!single_value.value_elements[elem_count]->is_value()) return FALSE; |
| return TRUE; |
| } |
| |
| ListOfDummy__comptype ListOfDummy__comptype_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 @General_Types.ListOfDummy_comptype."); |
| ListOfDummy__comptype ret_val; |
| ret_val.set_size(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| if (single_value.value_elements[elem_count]->is_bound()) { |
| ret_val[elem_count] = single_value.value_elements[elem_count]->valueof(); |
| } |
| return ret_val; |
| } |
| |
| ListOfDummy__comptype ListOfDummy__comptype_template::substr(int index, int returncount) const |
| { |
| if (!is_value()) TTCN_error("The first argument of function substr() is a template with non-specific value."); |
| return valueof().substr(index, returncount); |
| } |
| |
| ListOfDummy__comptype ListOfDummy__comptype_template::replace(int index, int len, const ListOfDummy__comptype_template& repl) const |
| { |
| if (!is_value()) TTCN_error("The first argument of function replace() is a template with non-specific value."); |
| if (!repl.is_value()) TTCN_error("The fourth argument of function replace() is a template with non-specific value."); |
| return valueof().replace(index, len, repl.valueof()); |
| } |
| |
| ListOfDummy__comptype ListOfDummy__comptype_template::replace(int index, int len, const ListOfDummy__comptype& repl) const |
| { |
| if (!is_value()) TTCN_error("The first argument of function replace() is a template with non-specific value."); |
| return valueof().replace(index, len, repl); |
| } |
| |
| void ListOfDummy__comptype_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| clean_up(); |
| switch (template_type) { |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = list_length; |
| value_list.list_value = new ListOfDummy__comptype_template[list_length]; |
| break; |
| default: |
| TTCN_error("Internal error: Setting an invalid type for a template of type @General_Types.ListOfDummy_comptype."); |
| } |
| set_selection(template_type); |
| } |
| |
| ListOfDummy__comptype_template& ListOfDummy__comptype_template::list_item(unsigned int list_index) |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) TTCN_error("Internal error: Accessing a list element of a non-list template of type @General_Types.ListOfDummy_comptype."); |
| if (list_index >= value_list.n_values) TTCN_error("Internal error: Index overflow in a value list template of type @General_Types.ListOfDummy_comptype."); |
| return value_list.list_value[list_index]; |
| } |
| |
| void ListOfDummy__comptype_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| if (single_value.n_elements > 0) { |
| TTCN_Logger::log_event_str("{ "); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (elem_count > 0) TTCN_Logger::log_event_str(", "); |
| if (permutation_starts_at(elem_count)) TTCN_Logger::log_event_str("permutation("); |
| single_value.value_elements[elem_count]->log(); |
| if (permutation_ends_at(elem_count)) TTCN_Logger::log_char(')'); |
| } |
| TTCN_Logger::log_event_str(" }"); |
| } else TTCN_Logger::log_event_str("{ }"); |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| 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; |
| default: |
| log_generic(); |
| } |
| log_restricted(); |
| log_ifpresent(); |
| } |
| |
| void ListOfDummy__comptype_template::log_match(const ListOfDummy__comptype& 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 && single_value.n_elements > 0 && get_number_of_permutations() == 0 && single_value.n_elements == match_value.size_of()) { |
| size_t previous_size = TTCN_Logger::get_logmatch_buffer_len(); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if(!single_value.value_elements[elem_count]->match(match_value[elem_count], legacy)){ |
| TTCN_Logger::log_logmatch_info("[%d]", elem_count); |
| single_value.value_elements[elem_count]->log_match(match_value[elem_count], legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| } |
| log_match_length(single_value.n_elements); |
| } 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 && single_value.n_elements > 0 && get_number_of_permutations() == 0 && single_value.n_elements == match_value.size_of()) { |
| TTCN_Logger::log_event_str("{ "); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (elem_count > 0) TTCN_Logger::log_event_str(", "); |
| single_value.value_elements[elem_count]->log_match(match_value[elem_count], legacy); |
| } |
| TTCN_Logger::log_event_str(" }"); |
| log_match_length(single_value.n_elements); |
| } 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 ListOfDummy__comptype_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_permutation(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| text_buf.push_int(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| single_value.value_elements[elem_count]->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 @General_Types.ListOfDummy_comptype."); |
| } |
| } |
| |
| void ListOfDummy__comptype_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_permutation(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value.n_elements = text_buf.pull_int().get_val(); |
| if (single_value.n_elements < 0) TTCN_error("Text decoder: Negative size was received for a template of type @General_Types.ListOfDummy_comptype."); |
| single_value.value_elements = (COMPONENT_template**)allocate_pointers(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| single_value.value_elements[elem_count] = new COMPONENT_template; |
| single_value.value_elements[elem_count]->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 ListOfDummy__comptype_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 for a template of type @General_Types.ListOfDummy_comptype."); |
| } |
| } |
| |
| boolean ListOfDummy__comptype_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean ListOfDummy__comptype_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int i=0; i<value_list.n_values; i++) |
| if (value_list.list_value[i].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| void ListOfDummy__comptype_template::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_TEMPLATE|Module_Param::BC_LIST, "record of 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: { |
| ListOfDummy__comptype_template temp; |
| temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); |
| for (size_t p_i=0; p_i<param.get_size(); p_i++) { |
| temp.list_item(p_i).set_param(*param.get_elem(p_i)); |
| } |
| *this = temp; |
| break; } |
| case Module_Param::MP_Indexed_List: |
| if (template_selection!=SPECIFIC_VALUE) set_size(0); |
| for (size_t p_i=0; p_i<param.get_size(); ++p_i) { |
| (*this)[(int)(param.get_elem(p_i)->get_id()->get_index())].set_param(*param.get_elem(p_i)); |
| } |
| break; |
| case Module_Param::MP_Value_List: { |
| set_size(param.get_size()); |
| int curr_idx = 0; |
| for (size_t p_i=0; p_i<param.get_size(); ++p_i) { |
| switch (param.get_elem(p_i)->get_type()) { |
| case Module_Param::MP_NotUsed: |
| curr_idx++; |
| break; |
| case Module_Param::MP_Permutation_Template: { |
| int perm_start_idx = curr_idx; |
| Module_Param* param_i = param.get_elem(p_i); |
| for (size_t perm_i=0; perm_i<param_i->get_size(); perm_i++) { |
| (*this)[curr_idx].set_param(*(param_i->get_elem(perm_i))); |
| curr_idx++; |
| } |
| int perm_end_idx = curr_idx - 1; |
| add_permutation(perm_start_idx, perm_end_idx); |
| } break; |
| default: |
| (*this)[curr_idx].set_param(*param.get_elem(p_i)); |
| curr_idx++; |
| } |
| } |
| } break; |
| default: |
| param.type_error("record of template", "@General_Types.ListOfDummy_comptype"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| set_length_range(param); |
| } |
| |
| void ListOfDummy__comptype_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; |
| for (int i=0; i<single_value.n_elements; i++) single_value.value_elements[i]->check_restriction(t_res, t_name ? t_name : "@General_Types.ListOfDummy_comptype"); |
| 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 : "@General_Types.ListOfDummy_comptype"); |
| } |
| |
| boolean ListOfDummy__comptype_template::get_istemplate_kind(const char* type) const { |
| if (!strcmp(type, "AnyElement")) { |
| if (template_selection != SPECIFIC_VALUE) { |
| return FALSE; |
| } |
| for (int i = 0; i < single_value.n_elements; i++) { |
| if (single_value.value_elements[i]->get_selection() == ANY_VALUE) { |
| return TRUE; |
| } |
| } |
| return FALSE; |
| } else if (!strcmp(type, "AnyElementsOrNone")) { |
| if (template_selection != SPECIFIC_VALUE) { |
| return FALSE; |
| } |
| for (int i = 0; i < single_value.n_elements; i++) { |
| if (single_value.value_elements[i]->get_selection() == ANY_OR_OMIT) { |
| return TRUE; |
| } |
| } |
| return FALSE; |
| } else if (!strcmp(type, "permutation")) { |
| return number_of_permutations; |
| } else if (!strcmp(type, "length")) { |
| return length_restriction_type != NO_LENGTH_RESTRICTION; |
| } else { |
| return Base_Template::get_istemplate_kind(type); |
| } |
| } |
| |
| const COMPONENT ListOfDummy__CT::UNBOUND_ELEM; |
| ListOfDummy__CT::ListOfDummy__CT() |
| { |
| val_ptr = NULL; |
| } |
| |
| ListOfDummy__CT::ListOfDummy__CT(null_type) |
| { |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| } |
| |
| ListOfDummy__CT::ListOfDummy__CT(const ListOfDummy__CT& other_value) |
| { |
| if (!other_value.is_bound()) TTCN_error("Copying an unbound value of type @General_Types.ListOfDummy_CT."); |
| val_ptr = other_value.val_ptr; |
| val_ptr->ref_count++; |
| } |
| |
| ListOfDummy__CT::~ListOfDummy__CT() |
| { |
| clean_up(); |
| if (val_ptr != NULL) val_ptr = NULL; |
| } |
| |
| void ListOfDummy__CT::clean_up() |
| { |
| if (val_ptr != NULL) { |
| if (val_ptr->ref_count > 1) { |
| val_ptr->ref_count--; |
| val_ptr = NULL; |
| } |
| else if (val_ptr->ref_count == 1) { |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; |
| elem_count++) |
| if (val_ptr->value_elements[elem_count] != NULL) |
| delete val_ptr->value_elements[elem_count]; |
| free_pointers((void**)val_ptr->value_elements); |
| delete val_ptr; |
| val_ptr = NULL; |
| } |
| else |
| TTCN_error("Internal error: Invalid reference counter in a record of/set of value."); |
| } |
| } |
| |
| ListOfDummy__CT& ListOfDummy__CT::operator=(null_type) |
| { |
| clean_up(); |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| return *this; |
| } |
| |
| ListOfDummy__CT& ListOfDummy__CT::operator=(const ListOfDummy__CT& other_value) |
| { |
| if (other_value.val_ptr == NULL) TTCN_error("Assigning an unbound value of type @General_Types.ListOfDummy_CT."); |
| if (this != &other_value) { |
| clean_up(); |
| val_ptr = other_value.val_ptr; |
| val_ptr->ref_count++; |
| } |
| return *this; |
| } |
| |
| boolean ListOfDummy__CT::operator==(null_type) const |
| { |
| if (val_ptr == NULL) |
| TTCN_error("The left operand of comparison is an unbound value of type @General_Types.ListOfDummy_CT."); |
| return val_ptr->n_elements == 0 ; |
| } |
| |
| boolean ListOfDummy__CT::operator==(const ListOfDummy__CT& other_value) const |
| { |
| if (val_ptr == NULL) TTCN_error("The left operand of comparison is an unbound value of type @General_Types.ListOfDummy_CT."); |
| if (other_value.val_ptr == NULL) TTCN_error("The right operand of comparison is an unbound value of type @General_Types.ListOfDummy_CT."); |
| if (val_ptr == other_value.val_ptr) return TRUE; |
| if (val_ptr->n_elements != (other_value.val_ptr)->n_elements) |
| return FALSE; |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++){ |
| if (val_ptr->value_elements[elem_count] != NULL){ |
| if ((other_value.val_ptr)->value_elements[elem_count] != NULL){ |
| if (*val_ptr->value_elements[elem_count] != *(other_value.val_ptr)->value_elements[elem_count]) return FALSE; |
| } else return FALSE; |
| } else { |
| if ((other_value.val_ptr)->value_elements[elem_count] != NULL) return FALSE; |
| } |
| } |
| return TRUE; |
| } |
| |
| COMPONENT& ListOfDummy__CT::operator[](int index_value) |
| { |
| if (index_value < 0) TTCN_error("Accessing an element of type @General_Types.ListOfDummy_CT using a negative index: %d.", index_value); |
| if (val_ptr == NULL) { |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| } else if (val_ptr->ref_count > 1) { |
| struct recordof_setof_struct *new_val_ptr = new recordof_setof_struct; |
| new_val_ptr->ref_count = 1; |
| new_val_ptr->n_elements = (index_value >= val_ptr->n_elements) ? index_value + 1 : val_ptr->n_elements; |
| new_val_ptr->value_elements = (COMPONENT**)allocate_pointers(new_val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++){ |
| if (val_ptr->value_elements[elem_count] != NULL){ |
| new_val_ptr->value_elements[elem_count] = new COMPONENT(*(val_ptr->value_elements[elem_count])); |
| } |
| } |
| clean_up(); |
| val_ptr = new_val_ptr; |
| } |
| if (index_value >= val_ptr->n_elements) set_size(index_value + 1); |
| if (val_ptr->value_elements[index_value] == NULL) { |
| val_ptr->value_elements[index_value] = new COMPONENT; |
| } |
| return *val_ptr->value_elements[index_value]; |
| } |
| |
| COMPONENT& ListOfDummy__CT::operator[](const INTEGER& index_value) |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a value of type @General_Types.ListOfDummy_CT."); |
| return (*this)[(int)index_value]; |
| } |
| |
| const COMPONENT& ListOfDummy__CT::operator[](int index_value) const |
| { |
| if (val_ptr == NULL) |
| TTCN_error("Accessing an element in an unbound value of type @General_Types.ListOfDummy_CT."); |
| if (index_value < 0) TTCN_error("Accessing an element of type @General_Types.ListOfDummy_CT using a negative index: %d.", index_value); |
| if (index_value >= val_ptr->n_elements) TTCN_error("Index overflow in a value of type @General_Types.ListOfDummy_CT: The index is %d, but the value has only %d elements.", index_value, val_ptr->n_elements); |
| return (val_ptr->value_elements[index_value] == NULL) ? |
| UNBOUND_ELEM : *val_ptr->value_elements[index_value]; |
| } |
| |
| const COMPONENT& ListOfDummy__CT::operator[](const INTEGER& index_value) const |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a value of type @General_Types.ListOfDummy_CT."); |
| return (*this)[(int)index_value]; |
| } |
| |
| ListOfDummy__CT ListOfDummy__CT::operator<<=(int rotate_count) const |
| { |
| return *this >>= (-rotate_count); |
| } |
| |
| ListOfDummy__CT ListOfDummy__CT::operator<<=(const INTEGER& rotate_count) const |
| { |
| rotate_count.must_bound("Unbound integer operand of rotate left operator."); |
| return *this >>= (int)(-rotate_count); |
| } |
| |
| ListOfDummy__CT ListOfDummy__CT::operator>>=(const INTEGER& rotate_count) const |
| { |
| rotate_count.must_bound("Unbound integer operand of rotate right operator."); |
| return *this >>= (int)rotate_count; |
| } |
| |
| ListOfDummy__CT ListOfDummy__CT::operator>>=(int rotate_count) const |
| { |
| if (val_ptr == NULL) TTCN_error("Performing rotation operation on an unbound value of type @General_Types.ListOfDummy_CT."); |
| if (val_ptr->n_elements == 0) return *this; |
| int rc; |
| if (rotate_count>=0) rc = rotate_count % val_ptr->n_elements; |
| else rc = val_ptr->n_elements - ((-rotate_count) % val_ptr->n_elements); |
| if (rc == 0) return *this; |
| ListOfDummy__CT ret_val; |
| ret_val.set_size(val_ptr->n_elements); |
| for (int i=0; i<val_ptr->n_elements; i++) { |
| if (val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[(i+rc)%val_ptr->n_elements] =new COMPONENT(*val_ptr->value_elements[i]); |
| } |
| } |
| return ret_val; |
| } |
| |
| ListOfDummy__CT ListOfDummy__CT::operator+(const ListOfDummy__CT& other_value) const |
| { |
| if (val_ptr == NULL || other_value.val_ptr == NULL) TTCN_error("Unbound operand of @General_Types.ListOfDummy_CT concatenation."); |
| if (val_ptr->n_elements == 0) return other_value; |
| if (other_value.val_ptr->n_elements == 0) return *this; |
| ListOfDummy__CT ret_val; |
| ret_val.set_size(val_ptr->n_elements+other_value.val_ptr->n_elements); |
| for (int i=0; i<val_ptr->n_elements; i++) { |
| if (val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i] = new COMPONENT(*val_ptr->value_elements[i]); |
| } |
| } |
| for (int i=0; i<other_value.val_ptr->n_elements; i++) { |
| if (other_value.val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i+val_ptr->n_elements] = new COMPONENT(*other_value.val_ptr->value_elements[i]); |
| } |
| } |
| return ret_val; |
| } |
| |
| ListOfDummy__CT ListOfDummy__CT::substr(int index, int returncount) const |
| { |
| if (val_ptr == NULL) TTCN_error("The first argument of substr() is an unbound value of type @General_Types.ListOfDummy_CT."); |
| check_substr_arguments(val_ptr->n_elements, index, returncount, "@General_Types.ListOfDummy_CT","element"); |
| ListOfDummy__CT ret_val; |
| ret_val.set_size(returncount); |
| for (int i=0; i<returncount; i++) { |
| if (val_ptr->value_elements[i+index] != NULL) { |
| ret_val.val_ptr->value_elements[i] = new COMPONENT(*val_ptr->value_elements[i+index]); |
| } |
| } |
| return ret_val; |
| } |
| |
| ListOfDummy__CT ListOfDummy__CT::replace(int index, int len, const ListOfDummy__CT& repl) const |
| { |
| if (val_ptr == NULL) TTCN_error("The first argument of replace() is an unbound value of type @General_Types.ListOfDummy_CT."); |
| if (repl.val_ptr == NULL) TTCN_error("The fourth argument of replace() is an unbound value of type @General_Types.ListOfDummy_CT."); |
| check_replace_arguments(val_ptr->n_elements, index, len, "@General_Types.ListOfDummy_CT","element"); |
| ListOfDummy__CT ret_val; |
| ret_val.set_size(val_ptr->n_elements + repl.val_ptr->n_elements - len); |
| for (int i = 0; i < index; i++) { |
| if (val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i] = new COMPONENT(*val_ptr->value_elements[i]); |
| } |
| } |
| for (int i = 0; i < repl.val_ptr->n_elements; i++) { |
| if (repl.val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i+index] = new COMPONENT(*repl.val_ptr->value_elements[i]); |
| } |
| } |
| for (int i = 0; i < val_ptr->n_elements - index - len; i++) { |
| if (val_ptr->value_elements[index+i+len] != NULL) { |
| ret_val.val_ptr->value_elements[index+i+repl.val_ptr->n_elements] = new COMPONENT(*val_ptr->value_elements[index+i+len]); |
| } |
| } |
| return ret_val; |
| } |
| |
| ListOfDummy__CT ListOfDummy__CT::replace(int index, int len, const ListOfDummy__CT_template& repl) const |
| { |
| if (!repl.is_value()) TTCN_error("The fourth argument of function replace() is a template with non-specific value."); |
| return replace(index, len, repl.valueof()); |
| } |
| |
| void ListOfDummy__CT::set_size(int new_size) |
| { |
| if (new_size < 0) TTCN_error("Internal error: Setting a negative size for a value of type @General_Types.ListOfDummy_CT."); |
| if (val_ptr == NULL) { |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| } else if (val_ptr->ref_count > 1) { |
| struct recordof_setof_struct *new_val_ptr = new recordof_setof_struct; |
| new_val_ptr->ref_count = 1; |
| new_val_ptr->n_elements = (new_size < val_ptr->n_elements) ? new_size : val_ptr->n_elements; |
| new_val_ptr->value_elements = (COMPONENT**)allocate_pointers(new_val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < new_val_ptr->n_elements; elem_count++) { |
| if (val_ptr->value_elements[elem_count] != NULL){ |
| new_val_ptr->value_elements[elem_count] = new COMPONENT(*(val_ptr->value_elements[elem_count])); |
| } |
| } |
| clean_up(); |
| val_ptr = new_val_ptr; |
| } |
| if (new_size > val_ptr->n_elements) { |
| val_ptr->value_elements = (COMPONENT**)reallocate_pointers((void**)val_ptr->value_elements, val_ptr->n_elements, new_size); |
| #ifdef TITAN_MEMORY_DEBUG_SET_RECORD_OF |
| if((val_ptr->n_elements/1000)!=(new_size/1000)) TTCN_warning("New size of type @General_Types.ListOfDummy_CT: %d",new_size); |
| #endif |
| val_ptr->n_elements = new_size; |
| } else if (new_size < val_ptr->n_elements) { |
| for (int elem_count = new_size; elem_count < val_ptr->n_elements; elem_count++) |
| if (val_ptr->value_elements[elem_count] != NULL)delete val_ptr->value_elements[elem_count]; |
| val_ptr->value_elements = (COMPONENT**)reallocate_pointers((void**)val_ptr->value_elements, val_ptr->n_elements, new_size); |
| val_ptr->n_elements = new_size; |
| } |
| } |
| |
| boolean ListOfDummy__CT::is_value() const |
| { |
| if (val_ptr == NULL) return FALSE; |
| for(int i = 0; i < val_ptr->n_elements; ++i) { |
| if (val_ptr->value_elements[i] == NULL || !val_ptr->value_elements[i]->is_value()) return FALSE; |
| } |
| return TRUE; |
| } |
| |
| int ListOfDummy__CT::size_of() const |
| { |
| if (val_ptr == NULL) TTCN_error("Performing sizeof operation on an unbound value of type @General_Types.ListOfDummy_CT."); |
| return val_ptr->n_elements; |
| } |
| |
| int ListOfDummy__CT::lengthof() const |
| { |
| if (val_ptr == NULL) TTCN_error("Performing lengthof operation on an unbound value of type @General_Types.ListOfDummy_CT."); |
| for (int my_length=val_ptr->n_elements; my_length>0; my_length--) if (val_ptr->value_elements[my_length-1] != NULL) return my_length; |
| return 0; |
| } |
| |
| void ListOfDummy__CT::log() const |
| { |
| if (val_ptr == NULL) {; |
| TTCN_Logger::log_event_unbound(); |
| return; |
| } |
| switch (val_ptr->n_elements) { |
| case 0: |
| TTCN_Logger::log_event_str("{ }"); |
| break; |
| default: |
| TTCN_Logger::log_event_str("{ "); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) { |
| if (elem_count > 0) TTCN_Logger::log_event_str(", "); |
| (*this)[elem_count].log(); |
| } |
| TTCN_Logger::log_event_str(" }"); |
| } |
| } |
| |
| void ListOfDummy__CT::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE|Module_Param::BC_LIST, "record of value"); |
| switch (param.get_operation_type()) { |
| case Module_Param::OT_ASSIGN: |
| if (param.get_type()==Module_Param::MP_Value_List && param.get_size()==0) { |
| *this = NULL_VALUE; |
| return; |
| } |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: |
| set_size(param.get_size()); |
| for (size_t i=0; i<param.get_size(); ++i) { |
| Module_Param* const curr = param.get_elem(i); |
| if (curr->get_type()!=Module_Param::MP_NotUsed) { |
| (*this)[i].set_param(*curr); |
| if (!(*this)[i].is_bound()) { |
| delete val_ptr->value_elements[i]; |
| val_ptr->value_elements[i] = NULL; |
| } |
| } |
| } |
| break; |
| case Module_Param::MP_Indexed_List: |
| for (size_t i=0; i<param.get_size(); ++i) { |
| Module_Param* const curr = param.get_elem(i); |
| (*this)[curr->get_id()->get_index()].set_param(*curr); |
| if (!(*this)[curr->get_id()->get_index()].is_bound()) { |
| delete val_ptr->value_elements[curr->get_id()->get_index()]; |
| val_ptr->value_elements[curr->get_id()->get_index()] = NULL; |
| } |
| } |
| break; |
| default: |
| param.type_error("record of value", "@General_Types.ListOfDummy_CT"); |
| } |
| break; |
| case Module_Param::OT_CONCAT: |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: { |
| if (!is_bound()) *this = NULL_VALUE; |
| int start_idx = lengthof(); |
| for (size_t i=0; i<param.get_size(); ++i) { |
| Module_Param* const curr = param.get_elem(i); |
| if ((curr->get_type()!=Module_Param::MP_NotUsed)) { |
| (*this)[start_idx+(int)i].set_param(*curr); |
| } |
| } |
| } break; |
| case Module_Param::MP_Indexed_List: |
| param.error("Cannot concatenate an indexed value list"); |
| break; |
| default: |
| param.type_error("record of value", "@General_Types.ListOfDummy_CT"); |
| } |
| break; |
| default: |
| TTCN_error("Internal error: Unknown operation type."); |
| } |
| } |
| |
| void ListOfDummy__CT::set_implicit_omit() |
| { |
| if (val_ptr == NULL) return; |
| for (int i = 0; i < val_ptr->n_elements; i++) { |
| if (val_ptr->value_elements[i] != NULL) val_ptr->value_elements[i]->set_implicit_omit(); |
| } |
| } |
| |
| void ListOfDummy__CT::encode_text(Text_Buf& text_buf) const |
| { |
| if (val_ptr == NULL) TTCN_error("Text encoder: Encoding an unbound value of type @General_Types.ListOfDummy_CT."); |
| text_buf.push_int(val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) |
| (*this)[elem_count].encode_text(text_buf); |
| } |
| |
| void ListOfDummy__CT::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = text_buf.pull_int().get_val(); |
| if (val_ptr->n_elements < 0) TTCN_error("Text decoder: Negative size was received for a value of type @General_Types.ListOfDummy_CT."); |
| val_ptr->value_elements = (COMPONENT**)allocate_pointers(val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) { |
| val_ptr->value_elements[elem_count] = new COMPONENT; |
| val_ptr->value_elements[elem_count]->decode_text(text_buf); |
| } |
| } |
| |
| void ListOfDummy__CT::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t 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); |
| 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;} |
| default: |
| TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| void ListOfDummy__CT::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t 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(); |
| if(b_data[p_buf.get_len()-1]!='\0'){ |
| 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); |
| 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)<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;} |
| default: |
| TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| int ListOfDummy__CT::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean /*no_err*/, int sel_field, boolean first_call, const RAW_Force_Omit*){ |
| int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding); |
| limit-=prepaddlength; |
| int decoded_length=0; |
| int decoded_field_length=0; |
| size_t start_of_field=0; |
| if(first_call) { |
| clean_up(); |
| val_ptr=new recordof_setof_struct; |
| val_ptr->ref_count=1; |
| val_ptr->n_elements=0; |
| val_ptr->value_elements=NULL; |
| } |
| int start_field=val_ptr->n_elements; |
| if(p_td.raw->fieldlength || sel_field!=-1){ |
| int a=0; |
| if(sel_field==-1) sel_field=p_td.raw->fieldlength; |
| for(a=0;a<sel_field;a++){ |
| decoded_field_length=(*this)[a+start_field].RAW_decode(*p_td.oftype_descr,p_buf,limit,top_bit_ord,TRUE); |
| if(decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| } |
| if(a==0) val_ptr->n_elements=0; |
| } else { |
| if(limit==0){ |
| if(!first_call) return -1; |
| val_ptr->n_elements=0; |
| return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength; |
| } |
| int a=start_field; |
| while(limit>0){ |
| start_of_field=p_buf.get_pos_bit(); |
| decoded_field_length=(*this)[a].RAW_decode(*p_td.oftype_descr,p_buf,limit,top_bit_ord,TRUE); |
| if(decoded_field_length < 0){ |
| delete &(*this)[a]; |
| val_ptr->n_elements--; |
| p_buf.set_pos_bit(start_of_field); |
| if(a>start_field){ |
| return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength; |
| } else return -1; |
| } |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| a++; |
| } |
| } |
| return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength; |
| } |
| |
| int ListOfDummy__CT::RAW_encode(const TTCN_Typedescriptor_t& p_td,RAW_enc_tree& myleaf) const{ |
| int encoded_length=0; |
| int encoded_num_of_records=p_td.raw->fieldlength?smaller(val_ptr->n_elements, p_td.raw->fieldlength):val_ptr->n_elements; |
| myleaf.isleaf=FALSE; |
| myleaf.rec_of=TRUE; |
| myleaf.body.node.num_of_nodes=encoded_num_of_records; |
| myleaf.body.node.nodes=init_nodes_of_enc_tree(encoded_num_of_records); |
| for(int a=0;a<encoded_num_of_records;a++){ |
| myleaf.body.node.nodes[a]=new RAW_enc_tree(TRUE,&myleaf,&(myleaf.curr_pos),a,p_td.oftype_descr->raw); |
| encoded_length+=(*this)[a].RAW_encode(*p_td.oftype_descr,*myleaf.body.node.nodes[a]); |
| } |
| return myleaf.length=encoded_length; |
| } |
| |
| void ListOfDummy__CT_template::copy_value(const ListOfDummy__CT& other_value) |
| { |
| if (!other_value.is_bound()) TTCN_error("Initialization of a template of type @General_Types.ListOfDummy_CT with an unbound value."); |
| single_value.n_elements = other_value.size_of(); |
| single_value.value_elements = (COMPONENT_template**)allocate_pointers(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (other_value[elem_count].is_bound()) { |
| single_value.value_elements[elem_count] = new COMPONENT_template(other_value[elem_count]); |
| } else { |
| single_value.value_elements[elem_count] = new COMPONENT_template; |
| } |
| } |
| set_selection(SPECIFIC_VALUE); |
| } |
| |
| void ListOfDummy__CT_template::copy_template(const ListOfDummy__CT_template& other_value) |
| { |
| switch (other_value.template_selection) { |
| case SPECIFIC_VALUE: |
| single_value.n_elements = other_value.single_value.n_elements; |
| single_value.value_elements = (COMPONENT_template**)allocate_pointers(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (UNINITIALIZED_TEMPLATE != other_value.single_value.value_elements[elem_count]->get_selection()) { |
| single_value.value_elements[elem_count] = new COMPONENT_template(*other_value.single_value.value_elements[elem_count]); |
| } else { |
| single_value.value_elements[elem_count] = new COMPONENT_template; |
| } |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new ListOfDummy__CT_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; |
| default: |
| TTCN_error("Copying an uninitialized/unsupported template of type @General_Types.ListOfDummy_CT."); |
| break; |
| } |
| set_selection(other_value); |
| } |
| |
| boolean ListOfDummy__CT_template::match_function_specific(const Base_Type *value_ptr, int value_index, const Restricted_Length_Template *template_ptr, int template_index, boolean legacy) |
| { |
| if (value_index >= 0) return ((const ListOfDummy__CT_template*)template_ptr)->single_value.value_elements[template_index]->match((*(const ListOfDummy__CT*)value_ptr)[value_index], legacy); |
| else return ((const ListOfDummy__CT_template*)template_ptr)->single_value.value_elements[template_index]->is_any_or_omit(); |
| } |
| |
| ListOfDummy__CT_template::ListOfDummy__CT_template() |
| { |
| } |
| |
| ListOfDummy__CT_template::ListOfDummy__CT_template(template_sel other_value) |
| : Record_Of_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| ListOfDummy__CT_template::ListOfDummy__CT_template(null_type) |
| : Record_Of_Template(SPECIFIC_VALUE) |
| { |
| single_value.n_elements = 0; |
| single_value.value_elements = NULL; |
| } |
| |
| ListOfDummy__CT_template::ListOfDummy__CT_template(const ListOfDummy__CT& other_value) |
| { |
| copy_value(other_value); |
| } |
| |
| ListOfDummy__CT_template::ListOfDummy__CT_template(const OPTIONAL<ListOfDummy__CT>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const ListOfDummy__CT&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of type @General_Types.ListOfDummy_CT from an unbound optional field."); |
| } |
| } |
| |
| ListOfDummy__CT_template::ListOfDummy__CT_template(const ListOfDummy__CT_template& other_value) |
| : Record_Of_Template() |
| { |
| copy_template(other_value); |
| } |
| |
| ListOfDummy__CT_template::~ListOfDummy__CT_template() |
| { |
| clean_up(); |
| } |
| |
| void ListOfDummy__CT_template::clean_up() |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| delete single_value.value_elements[elem_count]; |
| free_pointers((void**)single_value.value_elements); |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| delete [] value_list.list_value; |
| default: |
| break; |
| } |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| ListOfDummy__CT_template& ListOfDummy__CT_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| ListOfDummy__CT_template& ListOfDummy__CT_template::operator=(null_type) |
| { |
| clean_up(); |
| set_selection(SPECIFIC_VALUE); |
| single_value.n_elements = 0; |
| single_value.value_elements = NULL; |
| return *this; |
| } |
| |
| ListOfDummy__CT_template& ListOfDummy__CT_template::operator=(const ListOfDummy__CT& other_value) |
| { |
| clean_up(); |
| copy_value(other_value); |
| return *this; |
| } |
| |
| ListOfDummy__CT_template& ListOfDummy__CT_template::operator=(const OPTIONAL<ListOfDummy__CT>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const ListOfDummy__CT&)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 @General_Types.ListOfDummy_CT."); |
| } |
| return *this; |
| } |
| |
| ListOfDummy__CT_template& ListOfDummy__CT_template::operator=(const ListOfDummy__CT_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| COMPONENT_template& ListOfDummy__CT_template::operator[](int index_value) |
| { |
| if (index_value < 0) TTCN_error("Accessing an element of a template for type @General_Types.ListOfDummy_CT using a negative index: %d.", index_value); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: |
| if(index_value < single_value.n_elements) break; |
| // no break |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| case UNINITIALIZED_TEMPLATE: |
| set_size(index_value + 1); |
| break; |
| default: |
| TTCN_error("Accessing an element of a non-specific template for type @General_Types.ListOfDummy_CT."); |
| break; |
| } |
| return *single_value.value_elements[index_value]; |
| } |
| |
| COMPONENT_template& ListOfDummy__CT_template::operator[](const INTEGER& index_value) |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a template of type @General_Types.ListOfDummy_CT."); |
| return (*this)[(int)index_value]; |
| } |
| |
| const COMPONENT_template& ListOfDummy__CT_template::operator[](int index_value) const |
| { |
| if (index_value < 0) TTCN_error("Accessing an element of a template for type @General_Types.ListOfDummy_CT using a negative index: %d.", index_value); |
| if (template_selection != SPECIFIC_VALUE) TTCN_error("Accessing an element of a non-specific template for type @General_Types.ListOfDummy_CT."); |
| if (index_value >= single_value.n_elements) TTCN_error("Index overflow in a template of type @General_Types.ListOfDummy_CT: The index is %d, but the template has only %d elements.", index_value, single_value.n_elements); |
| return *single_value.value_elements[index_value]; |
| } |
| |
| const COMPONENT_template& ListOfDummy__CT_template::operator[](const INTEGER& index_value) const |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a template of type @General_Types.ListOfDummy_CT."); |
| return (*this)[(int)index_value]; |
| } |
| |
| void ListOfDummy__CT_template::set_size(int new_size) |
| { |
| if (new_size < 0) TTCN_error("Internal error: Setting a negative size for a template of type @General_Types.ListOfDummy_CT."); |
| template_sel old_selection = template_selection; |
| if (old_selection != SPECIFIC_VALUE) { |
| clean_up(); |
| set_selection(SPECIFIC_VALUE); |
| single_value.n_elements = 0; |
| single_value.value_elements = NULL; |
| } |
| if (new_size > single_value.n_elements) { |
| single_value.value_elements = (COMPONENT_template**)reallocate_pointers((void**)single_value.value_elements, single_value.n_elements, new_size); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) { |
| for (int elem_count = single_value.n_elements; elem_count < new_size; elem_count++) |
| single_value.value_elements[elem_count] = new COMPONENT_template(ANY_VALUE); |
| } else { |
| for (int elem_count = single_value.n_elements; elem_count < new_size; elem_count++) |
| single_value.value_elements[elem_count] = new COMPONENT_template; |
| } |
| single_value.n_elements = new_size; |
| } else if (new_size < single_value.n_elements) { |
| for (int elem_count = new_size; elem_count < single_value.n_elements; elem_count++) |
| delete single_value.value_elements[elem_count]; |
| single_value.value_elements = (COMPONENT_template**)reallocate_pointers((void**)single_value.value_elements, single_value.n_elements, new_size); |
| single_value.n_elements = new_size; |
| } |
| } |
| |
| int ListOfDummy__CT_template::n_elem() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| return single_value.n_elements; |
| break; |
| case VALUE_LIST: |
| return value_list.n_values; |
| break; |
| default: |
| TTCN_error("Performing n_elem"); |
| } |
| } |
| |
| int ListOfDummy__CT_template::size_of(boolean is_size) const |
| { |
| const char* op_name = is_size ? "size" : "length"; |
| int min_size; |
| boolean has_any_or_none; |
| if (is_ifpresent) TTCN_error("Performing %sof() operation on a template of type @General_Types.ListOfDummy_CT which has an ifpresent attribute.", op_name); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: { |
| min_size = 0; |
| has_any_or_none = FALSE; |
| int elem_count = single_value.n_elements; |
| if (!is_size) { while (elem_count>0 && !single_value.value_elements[elem_count-1]->is_bound()) elem_count--; } |
| for (int i=0; i<elem_count; i++) { |
| switch (single_value.value_elements[i]->get_selection()) { |
| case OMIT_VALUE: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.ListOfDummy_CT containing omit element.", op_name); |
| case ANY_OR_OMIT: |
| has_any_or_none = TRUE; |
| break; |
| default: |
| min_size++; |
| break; |
| } |
| } |
| } break; |
| case OMIT_VALUE: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.ListOfDummy_CT containing omit value.", op_name); |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| min_size = 0; |
| has_any_or_none = TRUE; |
| break; |
| case VALUE_LIST: |
| { |
| if (value_list.n_values<1) |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.ListOfDummy_CT containing an empty list.", op_name); |
| int item_size = value_list.list_value[0].size_of(is_size); |
| for (unsigned int i = 1; i < value_list.n_values; i++) { |
| if (value_list.list_value[i].size_of(is_size)!=item_size) |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.ListOfDummy_CT containing a value list with different sizes.", op_name); |
| } |
| min_size = item_size; |
| has_any_or_none = FALSE; |
| break; |
| } |
| case COMPLEMENTED_LIST: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.ListOfDummy_CT containing complemented list.", op_name); |
| default: |
| TTCN_error("Performing %sof() operation on an uninitialized/unsupported template of type @General_Types.ListOfDummy_CT.", op_name); |
| } |
| return check_section_is_single(min_size, has_any_or_none, op_name, "a", "template of type @General_Types.ListOfDummy_CT"); |
| } |
| |
| boolean ListOfDummy__CT_template::match(const ListOfDummy__CT& other_value, boolean legacy) const |
| { |
| if (!other_value.is_bound()) return FALSE; |
| int value_length = other_value.size_of(); |
| if (!match_length(value_length)) return FALSE; |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| return match_record_of(&other_value, value_length, this, single_value.n_elements, match_function_specific, legacy); |
| case OMIT_VALUE: |
| return FALSE; |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| 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; |
| default: |
| TTCN_error("Matching with an uninitialized/unsupported template of type @General_Types.ListOfDummy_CT."); |
| } |
| return FALSE; |
| } |
| |
| boolean ListOfDummy__CT_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| if (!single_value.value_elements[elem_count]->is_value()) return FALSE; |
| return TRUE; |
| } |
| |
| ListOfDummy__CT ListOfDummy__CT_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 @General_Types.ListOfDummy_CT."); |
| ListOfDummy__CT ret_val; |
| ret_val.set_size(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| if (single_value.value_elements[elem_count]->is_bound()) { |
| ret_val[elem_count] = single_value.value_elements[elem_count]->valueof(); |
| } |
| return ret_val; |
| } |
| |
| ListOfDummy__CT ListOfDummy__CT_template::substr(int index, int returncount) const |
| { |
| if (!is_value()) TTCN_error("The first argument of function substr() is a template with non-specific value."); |
| return valueof().substr(index, returncount); |
| } |
| |
| ListOfDummy__CT ListOfDummy__CT_template::replace(int index, int len, const ListOfDummy__CT_template& repl) const |
| { |
| if (!is_value()) TTCN_error("The first argument of function replace() is a template with non-specific value."); |
| if (!repl.is_value()) TTCN_error("The fourth argument of function replace() is a template with non-specific value."); |
| return valueof().replace(index, len, repl.valueof()); |
| } |
| |
| ListOfDummy__CT ListOfDummy__CT_template::replace(int index, int len, const ListOfDummy__CT& repl) const |
| { |
| if (!is_value()) TTCN_error("The first argument of function replace() is a template with non-specific value."); |
| return valueof().replace(index, len, repl); |
| } |
| |
| void ListOfDummy__CT_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| clean_up(); |
| switch (template_type) { |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = list_length; |
| value_list.list_value = new ListOfDummy__CT_template[list_length]; |
| break; |
| default: |
| TTCN_error("Internal error: Setting an invalid type for a template of type @General_Types.ListOfDummy_CT."); |
| } |
| set_selection(template_type); |
| } |
| |
| ListOfDummy__CT_template& ListOfDummy__CT_template::list_item(unsigned int list_index) |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) TTCN_error("Internal error: Accessing a list element of a non-list template of type @General_Types.ListOfDummy_CT."); |
| if (list_index >= value_list.n_values) TTCN_error("Internal error: Index overflow in a value list template of type @General_Types.ListOfDummy_CT."); |
| return value_list.list_value[list_index]; |
| } |
| |
| void ListOfDummy__CT_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| if (single_value.n_elements > 0) { |
| TTCN_Logger::log_event_str("{ "); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (elem_count > 0) TTCN_Logger::log_event_str(", "); |
| if (permutation_starts_at(elem_count)) TTCN_Logger::log_event_str("permutation("); |
| single_value.value_elements[elem_count]->log(); |
| if (permutation_ends_at(elem_count)) TTCN_Logger::log_char(')'); |
| } |
| TTCN_Logger::log_event_str(" }"); |
| } else TTCN_Logger::log_event_str("{ }"); |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| 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; |
| default: |
| log_generic(); |
| } |
| log_restricted(); |
| log_ifpresent(); |
| } |
| |
| void ListOfDummy__CT_template::log_match(const ListOfDummy__CT& 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 && single_value.n_elements > 0 && get_number_of_permutations() == 0 && single_value.n_elements == match_value.size_of()) { |
| size_t previous_size = TTCN_Logger::get_logmatch_buffer_len(); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if(!single_value.value_elements[elem_count]->match(match_value[elem_count], legacy)){ |
| TTCN_Logger::log_logmatch_info("[%d]", elem_count); |
| single_value.value_elements[elem_count]->log_match(match_value[elem_count], legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| } |
| log_match_length(single_value.n_elements); |
| } 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 && single_value.n_elements > 0 && get_number_of_permutations() == 0 && single_value.n_elements == match_value.size_of()) { |
| TTCN_Logger::log_event_str("{ "); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (elem_count > 0) TTCN_Logger::log_event_str(", "); |
| single_value.value_elements[elem_count]->log_match(match_value[elem_count], legacy); |
| } |
| TTCN_Logger::log_event_str(" }"); |
| log_match_length(single_value.n_elements); |
| } 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 ListOfDummy__CT_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_permutation(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| text_buf.push_int(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| single_value.value_elements[elem_count]->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 @General_Types.ListOfDummy_CT."); |
| } |
| } |
| |
| void ListOfDummy__CT_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_permutation(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value.n_elements = text_buf.pull_int().get_val(); |
| if (single_value.n_elements < 0) TTCN_error("Text decoder: Negative size was received for a template of type @General_Types.ListOfDummy_CT."); |
| single_value.value_elements = (COMPONENT_template**)allocate_pointers(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| single_value.value_elements[elem_count] = new COMPONENT_template; |
| single_value.value_elements[elem_count]->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 ListOfDummy__CT_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 for a template of type @General_Types.ListOfDummy_CT."); |
| } |
| } |
| |
| boolean ListOfDummy__CT_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean ListOfDummy__CT_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int i=0; i<value_list.n_values; i++) |
| if (value_list.list_value[i].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| void ListOfDummy__CT_template::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_TEMPLATE|Module_Param::BC_LIST, "record of 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: { |
| ListOfDummy__CT_template temp; |
| temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); |
| for (size_t p_i=0; p_i<param.get_size(); p_i++) { |
| temp.list_item(p_i).set_param(*param.get_elem(p_i)); |
| } |
| *this = temp; |
| break; } |
| case Module_Param::MP_Indexed_List: |
| if (template_selection!=SPECIFIC_VALUE) set_size(0); |
| for (size_t p_i=0; p_i<param.get_size(); ++p_i) { |
| (*this)[(int)(param.get_elem(p_i)->get_id()->get_index())].set_param(*param.get_elem(p_i)); |
| } |
| break; |
| case Module_Param::MP_Value_List: { |
| set_size(param.get_size()); |
| int curr_idx = 0; |
| for (size_t p_i=0; p_i<param.get_size(); ++p_i) { |
| switch (param.get_elem(p_i)->get_type()) { |
| case Module_Param::MP_NotUsed: |
| curr_idx++; |
| break; |
| case Module_Param::MP_Permutation_Template: { |
| int perm_start_idx = curr_idx; |
| Module_Param* param_i = param.get_elem(p_i); |
| for (size_t perm_i=0; perm_i<param_i->get_size(); perm_i++) { |
| (*this)[curr_idx].set_param(*(param_i->get_elem(perm_i))); |
| curr_idx++; |
| } |
| int perm_end_idx = curr_idx - 1; |
| add_permutation(perm_start_idx, perm_end_idx); |
| } break; |
| default: |
| (*this)[curr_idx].set_param(*param.get_elem(p_i)); |
| curr_idx++; |
| } |
| } |
| } break; |
| default: |
| param.type_error("record of template", "@General_Types.ListOfDummy_CT"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| set_length_range(param); |
| } |
| |
| void ListOfDummy__CT_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; |
| for (int i=0; i<single_value.n_elements; i++) single_value.value_elements[i]->check_restriction(t_res, t_name ? t_name : "@General_Types.ListOfDummy_CT"); |
| 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 : "@General_Types.ListOfDummy_CT"); |
| } |
| |
| boolean ListOfDummy__CT_template::get_istemplate_kind(const char* type) const { |
| if (!strcmp(type, "AnyElement")) { |
| if (template_selection != SPECIFIC_VALUE) { |
| return FALSE; |
| } |
| for (int i = 0; i < single_value.n_elements; i++) { |
| if (single_value.value_elements[i]->get_selection() == ANY_VALUE) { |
| return TRUE; |
| } |
| } |
| return FALSE; |
| } else if (!strcmp(type, "AnyElementsOrNone")) { |
| if (template_selection != SPECIFIC_VALUE) { |
| return FALSE; |
| } |
| for (int i = 0; i < single_value.n_elements; i++) { |
| if (single_value.value_elements[i]->get_selection() == ANY_OR_OMIT) { |
| return TRUE; |
| } |
| } |
| return FALSE; |
| } else if (!strcmp(type, "permutation")) { |
| return number_of_permutations; |
| } else if (!strcmp(type, "length")) { |
| return length_restriction_type != NO_LENGTH_RESTRICTION; |
| } else { |
| return Base_Template::get_istemplate_kind(type); |
| } |
| } |
| |
| const Protocols ProtocolList::UNBOUND_ELEM; |
| ProtocolList::ProtocolList() |
| { |
| val_ptr = NULL; |
| } |
| |
| ProtocolList::ProtocolList(null_type) |
| { |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| } |
| |
| ProtocolList::ProtocolList(const ProtocolList& other_value) |
| { |
| if (!other_value.is_bound()) TTCN_error("Copying an unbound value of type @General_Types.ProtocolList."); |
| val_ptr = other_value.val_ptr; |
| val_ptr->ref_count++; |
| } |
| |
| ProtocolList::~ProtocolList() |
| { |
| clean_up(); |
| if (val_ptr != NULL) val_ptr = NULL; |
| } |
| |
| void ProtocolList::clean_up() |
| { |
| if (val_ptr != NULL) { |
| if (val_ptr->ref_count > 1) { |
| val_ptr->ref_count--; |
| val_ptr = NULL; |
| } |
| else if (val_ptr->ref_count == 1) { |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; |
| elem_count++) |
| if (val_ptr->value_elements[elem_count] != NULL) |
| delete val_ptr->value_elements[elem_count]; |
| free_pointers((void**)val_ptr->value_elements); |
| delete val_ptr; |
| val_ptr = NULL; |
| } |
| else |
| TTCN_error("Internal error: Invalid reference counter in a record of/set of value."); |
| } |
| } |
| |
| ProtocolList& ProtocolList::operator=(null_type) |
| { |
| clean_up(); |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| return *this; |
| } |
| |
| ProtocolList& ProtocolList::operator=(const ProtocolList& other_value) |
| { |
| if (other_value.val_ptr == NULL) TTCN_error("Assigning an unbound value of type @General_Types.ProtocolList."); |
| if (this != &other_value) { |
| clean_up(); |
| val_ptr = other_value.val_ptr; |
| val_ptr->ref_count++; |
| } |
| return *this; |
| } |
| |
| boolean ProtocolList::operator==(null_type) const |
| { |
| if (val_ptr == NULL) |
| TTCN_error("The left operand of comparison is an unbound value of type @General_Types.ProtocolList."); |
| return val_ptr->n_elements == 0 ; |
| } |
| |
| boolean ProtocolList::operator==(const ProtocolList& other_value) const |
| { |
| if (val_ptr == NULL) TTCN_error("The left operand of comparison is an unbound value of type @General_Types.ProtocolList."); |
| if (other_value.val_ptr == NULL) TTCN_error("The right operand of comparison is an unbound value of type @General_Types.ProtocolList."); |
| if (val_ptr == other_value.val_ptr) return TRUE; |
| if (val_ptr->n_elements != (other_value.val_ptr)->n_elements) |
| return FALSE; |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++){ |
| if (val_ptr->value_elements[elem_count] != NULL){ |
| if ((other_value.val_ptr)->value_elements[elem_count] != NULL){ |
| if (*val_ptr->value_elements[elem_count] != *(other_value.val_ptr)->value_elements[elem_count]) return FALSE; |
| } else return FALSE; |
| } else { |
| if ((other_value.val_ptr)->value_elements[elem_count] != NULL) return FALSE; |
| } |
| } |
| return TRUE; |
| } |
| |
| Protocols& ProtocolList::operator[](int index_value) |
| { |
| if (index_value < 0) TTCN_error("Accessing an element of type @General_Types.ProtocolList using a negative index: %d.", index_value); |
| if (val_ptr == NULL) { |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| } else if (val_ptr->ref_count > 1) { |
| struct recordof_setof_struct *new_val_ptr = new recordof_setof_struct; |
| new_val_ptr->ref_count = 1; |
| new_val_ptr->n_elements = (index_value >= val_ptr->n_elements) ? index_value + 1 : val_ptr->n_elements; |
| new_val_ptr->value_elements = (Protocols**)allocate_pointers(new_val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++){ |
| if (val_ptr->value_elements[elem_count] != NULL){ |
| new_val_ptr->value_elements[elem_count] = new Protocols(*(val_ptr->value_elements[elem_count])); |
| } |
| } |
| clean_up(); |
| val_ptr = new_val_ptr; |
| } |
| if (index_value >= val_ptr->n_elements) set_size(index_value + 1); |
| if (val_ptr->value_elements[index_value] == NULL) { |
| val_ptr->value_elements[index_value] = new Protocols; |
| } |
| return *val_ptr->value_elements[index_value]; |
| } |
| |
| Protocols& ProtocolList::operator[](const INTEGER& index_value) |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a value of type @General_Types.ProtocolList."); |
| return (*this)[(int)index_value]; |
| } |
| |
| const Protocols& ProtocolList::operator[](int index_value) const |
| { |
| if (val_ptr == NULL) |
| TTCN_error("Accessing an element in an unbound value of type @General_Types.ProtocolList."); |
| if (index_value < 0) TTCN_error("Accessing an element of type @General_Types.ProtocolList using a negative index: %d.", index_value); |
| if (index_value >= val_ptr->n_elements) TTCN_error("Index overflow in a value of type @General_Types.ProtocolList: The index is %d, but the value has only %d elements.", index_value, val_ptr->n_elements); |
| return (val_ptr->value_elements[index_value] == NULL) ? |
| UNBOUND_ELEM : *val_ptr->value_elements[index_value]; |
| } |
| |
| const Protocols& ProtocolList::operator[](const INTEGER& index_value) const |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a value of type @General_Types.ProtocolList."); |
| return (*this)[(int)index_value]; |
| } |
| |
| ProtocolList ProtocolList::operator<<=(int rotate_count) const |
| { |
| return *this >>= (-rotate_count); |
| } |
| |
| ProtocolList ProtocolList::operator<<=(const INTEGER& rotate_count) const |
| { |
| rotate_count.must_bound("Unbound integer operand of rotate left operator."); |
| return *this >>= (int)(-rotate_count); |
| } |
| |
| ProtocolList ProtocolList::operator>>=(const INTEGER& rotate_count) const |
| { |
| rotate_count.must_bound("Unbound integer operand of rotate right operator."); |
| return *this >>= (int)rotate_count; |
| } |
| |
| ProtocolList ProtocolList::operator>>=(int rotate_count) const |
| { |
| if (val_ptr == NULL) TTCN_error("Performing rotation operation on an unbound value of type @General_Types.ProtocolList."); |
| if (val_ptr->n_elements == 0) return *this; |
| int rc; |
| if (rotate_count>=0) rc = rotate_count % val_ptr->n_elements; |
| else rc = val_ptr->n_elements - ((-rotate_count) % val_ptr->n_elements); |
| if (rc == 0) return *this; |
| ProtocolList ret_val; |
| ret_val.set_size(val_ptr->n_elements); |
| for (int i=0; i<val_ptr->n_elements; i++) { |
| if (val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[(i+rc)%val_ptr->n_elements] =new Protocols(*val_ptr->value_elements[i]); |
| } |
| } |
| return ret_val; |
| } |
| |
| ProtocolList ProtocolList::operator+(const ProtocolList& other_value) const |
| { |
| if (val_ptr == NULL || other_value.val_ptr == NULL) TTCN_error("Unbound operand of @General_Types.ProtocolList concatenation."); |
| if (val_ptr->n_elements == 0) return other_value; |
| if (other_value.val_ptr->n_elements == 0) return *this; |
| ProtocolList ret_val; |
| ret_val.set_size(val_ptr->n_elements+other_value.val_ptr->n_elements); |
| for (int i=0; i<val_ptr->n_elements; i++) { |
| if (val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i] = new Protocols(*val_ptr->value_elements[i]); |
| } |
| } |
| for (int i=0; i<other_value.val_ptr->n_elements; i++) { |
| if (other_value.val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i+val_ptr->n_elements] = new Protocols(*other_value.val_ptr->value_elements[i]); |
| } |
| } |
| return ret_val; |
| } |
| |
| ProtocolList ProtocolList::substr(int index, int returncount) const |
| { |
| if (val_ptr == NULL) TTCN_error("The first argument of substr() is an unbound value of type @General_Types.ProtocolList."); |
| check_substr_arguments(val_ptr->n_elements, index, returncount, "@General_Types.ProtocolList","element"); |
| ProtocolList ret_val; |
| ret_val.set_size(returncount); |
| for (int i=0; i<returncount; i++) { |
| if (val_ptr->value_elements[i+index] != NULL) { |
| ret_val.val_ptr->value_elements[i] = new Protocols(*val_ptr->value_elements[i+index]); |
| } |
| } |
| return ret_val; |
| } |
| |
| ProtocolList ProtocolList::replace(int index, int len, const ProtocolList& repl) const |
| { |
| if (val_ptr == NULL) TTCN_error("The first argument of replace() is an unbound value of type @General_Types.ProtocolList."); |
| if (repl.val_ptr == NULL) TTCN_error("The fourth argument of replace() is an unbound value of type @General_Types.ProtocolList."); |
| check_replace_arguments(val_ptr->n_elements, index, len, "@General_Types.ProtocolList","element"); |
| ProtocolList ret_val; |
| ret_val.set_size(val_ptr->n_elements + repl.val_ptr->n_elements - len); |
| for (int i = 0; i < index; i++) { |
| if (val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i] = new Protocols(*val_ptr->value_elements[i]); |
| } |
| } |
| for (int i = 0; i < repl.val_ptr->n_elements; i++) { |
| if (repl.val_ptr->value_elements[i] != NULL) { |
| ret_val.val_ptr->value_elements[i+index] = new Protocols(*repl.val_ptr->value_elements[i]); |
| } |
| } |
| for (int i = 0; i < val_ptr->n_elements - index - len; i++) { |
| if (val_ptr->value_elements[index+i+len] != NULL) { |
| ret_val.val_ptr->value_elements[index+i+repl.val_ptr->n_elements] = new Protocols(*val_ptr->value_elements[index+i+len]); |
| } |
| } |
| return ret_val; |
| } |
| |
| ProtocolList ProtocolList::replace(int index, int len, const ProtocolList_template& repl) const |
| { |
| if (!repl.is_value()) TTCN_error("The fourth argument of function replace() is a template with non-specific value."); |
| return replace(index, len, repl.valueof()); |
| } |
| |
| void ProtocolList::set_size(int new_size) |
| { |
| if (new_size < 0) TTCN_error("Internal error: Setting a negative size for a value of type @General_Types.ProtocolList."); |
| if (val_ptr == NULL) { |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = 0; |
| val_ptr->value_elements = NULL; |
| } else if (val_ptr->ref_count > 1) { |
| struct recordof_setof_struct *new_val_ptr = new recordof_setof_struct; |
| new_val_ptr->ref_count = 1; |
| new_val_ptr->n_elements = (new_size < val_ptr->n_elements) ? new_size : val_ptr->n_elements; |
| new_val_ptr->value_elements = (Protocols**)allocate_pointers(new_val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < new_val_ptr->n_elements; elem_count++) { |
| if (val_ptr->value_elements[elem_count] != NULL){ |
| new_val_ptr->value_elements[elem_count] = new Protocols(*(val_ptr->value_elements[elem_count])); |
| } |
| } |
| clean_up(); |
| val_ptr = new_val_ptr; |
| } |
| if (new_size > val_ptr->n_elements) { |
| val_ptr->value_elements = (Protocols**)reallocate_pointers((void**)val_ptr->value_elements, val_ptr->n_elements, new_size); |
| #ifdef TITAN_MEMORY_DEBUG_SET_RECORD_OF |
| if((val_ptr->n_elements/1000)!=(new_size/1000)) TTCN_warning("New size of type @General_Types.ProtocolList: %d",new_size); |
| #endif |
| val_ptr->n_elements = new_size; |
| } else if (new_size < val_ptr->n_elements) { |
| for (int elem_count = new_size; elem_count < val_ptr->n_elements; elem_count++) |
| if (val_ptr->value_elements[elem_count] != NULL)delete val_ptr->value_elements[elem_count]; |
| val_ptr->value_elements = (Protocols**)reallocate_pointers((void**)val_ptr->value_elements, val_ptr->n_elements, new_size); |
| val_ptr->n_elements = new_size; |
| } |
| } |
| |
| boolean ProtocolList::is_value() const |
| { |
| if (val_ptr == NULL) return FALSE; |
| for(int i = 0; i < val_ptr->n_elements; ++i) { |
| if (val_ptr->value_elements[i] == NULL || !val_ptr->value_elements[i]->is_value()) return FALSE; |
| } |
| return TRUE; |
| } |
| |
| int ProtocolList::size_of() const |
| { |
| if (val_ptr == NULL) TTCN_error("Performing sizeof operation on an unbound value of type @General_Types.ProtocolList."); |
| return val_ptr->n_elements; |
| } |
| |
| int ProtocolList::lengthof() const |
| { |
| if (val_ptr == NULL) TTCN_error("Performing lengthof operation on an unbound value of type @General_Types.ProtocolList."); |
| for (int my_length=val_ptr->n_elements; my_length>0; my_length--) if (val_ptr->value_elements[my_length-1] != NULL) return my_length; |
| return 0; |
| } |
| |
| void ProtocolList::log() const |
| { |
| if (val_ptr == NULL) {; |
| TTCN_Logger::log_event_unbound(); |
| return; |
| } |
| switch (val_ptr->n_elements) { |
| case 0: |
| TTCN_Logger::log_event_str("{ }"); |
| break; |
| default: |
| TTCN_Logger::log_event_str("{ "); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) { |
| if (elem_count > 0) TTCN_Logger::log_event_str(", "); |
| (*this)[elem_count].log(); |
| } |
| TTCN_Logger::log_event_str(" }"); |
| } |
| } |
| |
| void ProtocolList::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_VALUE|Module_Param::BC_LIST, "record of value"); |
| switch (param.get_operation_type()) { |
| case Module_Param::OT_ASSIGN: |
| if (param.get_type()==Module_Param::MP_Value_List && param.get_size()==0) { |
| *this = NULL_VALUE; |
| return; |
| } |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: |
| set_size(param.get_size()); |
| for (size_t i=0; i<param.get_size(); ++i) { |
| Module_Param* const curr = param.get_elem(i); |
| if (curr->get_type()!=Module_Param::MP_NotUsed) { |
| (*this)[i].set_param(*curr); |
| if (!(*this)[i].is_bound()) { |
| delete val_ptr->value_elements[i]; |
| val_ptr->value_elements[i] = NULL; |
| } |
| } |
| } |
| break; |
| case Module_Param::MP_Indexed_List: |
| for (size_t i=0; i<param.get_size(); ++i) { |
| Module_Param* const curr = param.get_elem(i); |
| (*this)[curr->get_id()->get_index()].set_param(*curr); |
| if (!(*this)[curr->get_id()->get_index()].is_bound()) { |
| delete val_ptr->value_elements[curr->get_id()->get_index()]; |
| val_ptr->value_elements[curr->get_id()->get_index()] = NULL; |
| } |
| } |
| break; |
| default: |
| param.type_error("record of value", "@General_Types.ProtocolList"); |
| } |
| break; |
| case Module_Param::OT_CONCAT: |
| switch (param.get_type()) { |
| case Module_Param::MP_Value_List: { |
| if (!is_bound()) *this = NULL_VALUE; |
| int start_idx = lengthof(); |
| for (size_t i=0; i<param.get_size(); ++i) { |
| Module_Param* const curr = param.get_elem(i); |
| if ((curr->get_type()!=Module_Param::MP_NotUsed)) { |
| (*this)[start_idx+(int)i].set_param(*curr); |
| } |
| } |
| } break; |
| case Module_Param::MP_Indexed_List: |
| param.error("Cannot concatenate an indexed value list"); |
| break; |
| default: |
| param.type_error("record of value", "@General_Types.ProtocolList"); |
| } |
| break; |
| default: |
| TTCN_error("Internal error: Unknown operation type."); |
| } |
| } |
| |
| void ProtocolList::set_implicit_omit() |
| { |
| if (val_ptr == NULL) return; |
| for (int i = 0; i < val_ptr->n_elements; i++) { |
| if (val_ptr->value_elements[i] != NULL) val_ptr->value_elements[i]->set_implicit_omit(); |
| } |
| } |
| |
| void ProtocolList::encode_text(Text_Buf& text_buf) const |
| { |
| if (val_ptr == NULL) TTCN_error("Text encoder: Encoding an unbound value of type @General_Types.ProtocolList."); |
| text_buf.push_int(val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) |
| (*this)[elem_count].encode_text(text_buf); |
| } |
| |
| void ProtocolList::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| val_ptr = new recordof_setof_struct; |
| val_ptr->ref_count = 1; |
| val_ptr->n_elements = text_buf.pull_int().get_val(); |
| if (val_ptr->n_elements < 0) TTCN_error("Text decoder: Negative size was received for a value of type @General_Types.ProtocolList."); |
| val_ptr->value_elements = (Protocols**)allocate_pointers(val_ptr->n_elements); |
| for (int elem_count = 0; elem_count < val_ptr->n_elements; elem_count++) { |
| val_ptr->value_elements[elem_count] = new Protocols; |
| val_ptr->value_elements[elem_count]->decode_text(text_buf); |
| } |
| } |
| |
| void ProtocolList::encode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t 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); |
| 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;} |
| default: |
| TTCN_error("Unknown coding method requested to encode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| void ProtocolList::decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, TTCN_EncDec::coding_t 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(); |
| if(b_data[p_buf.get_len()-1]!='\0'){ |
| 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); |
| 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)<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;} |
| default: |
| TTCN_error("Unknown coding method requested to decode type '%s'", p_td.name); |
| } |
| va_end(pvar); |
| } |
| |
| int ProtocolList::RAW_decode(const TTCN_Typedescriptor_t& p_td, TTCN_Buffer& p_buf, int limit, raw_order_t top_bit_ord, boolean /*no_err*/, int sel_field, boolean first_call, const RAW_Force_Omit*){ |
| int prepaddlength=p_buf.increase_pos_padd(p_td.raw->prepadding); |
| limit-=prepaddlength; |
| int decoded_length=0; |
| int decoded_field_length=0; |
| size_t start_of_field=0; |
| if(first_call) { |
| clean_up(); |
| val_ptr=new recordof_setof_struct; |
| val_ptr->ref_count=1; |
| val_ptr->n_elements=0; |
| val_ptr->value_elements=NULL; |
| } |
| int start_field=val_ptr->n_elements; |
| if(p_td.raw->fieldlength || sel_field!=-1){ |
| int a=0; |
| if(sel_field==-1) sel_field=p_td.raw->fieldlength; |
| for(a=0;a<sel_field;a++){ |
| decoded_field_length=(*this)[a+start_field].RAW_decode(*p_td.oftype_descr,p_buf,limit,top_bit_ord,TRUE); |
| if(decoded_field_length < 0) return decoded_field_length; |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| } |
| if(a==0) val_ptr->n_elements=0; |
| } else { |
| if(limit==0){ |
| if(!first_call) return -1; |
| val_ptr->n_elements=0; |
| return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength; |
| } |
| int a=start_field; |
| while(limit>0){ |
| start_of_field=p_buf.get_pos_bit(); |
| decoded_field_length=(*this)[a].RAW_decode(*p_td.oftype_descr,p_buf,limit,top_bit_ord,TRUE); |
| if(decoded_field_length < 0){ |
| delete &(*this)[a]; |
| val_ptr->n_elements--; |
| p_buf.set_pos_bit(start_of_field); |
| if(a>start_field){ |
| return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength; |
| } else return -1; |
| } |
| decoded_length+=decoded_field_length; |
| limit-=decoded_field_length; |
| a++; |
| } |
| } |
| return decoded_length+p_buf.increase_pos_padd(p_td.raw->padding)+prepaddlength; |
| } |
| |
| int ProtocolList::RAW_encode(const TTCN_Typedescriptor_t& p_td,RAW_enc_tree& myleaf) const{ |
| int encoded_length=0; |
| int encoded_num_of_records=p_td.raw->fieldlength?smaller(val_ptr->n_elements, p_td.raw->fieldlength):val_ptr->n_elements; |
| myleaf.isleaf=FALSE; |
| myleaf.rec_of=TRUE; |
| myleaf.body.node.num_of_nodes=encoded_num_of_records; |
| myleaf.body.node.nodes=init_nodes_of_enc_tree(encoded_num_of_records); |
| for(int a=0;a<encoded_num_of_records;a++){ |
| myleaf.body.node.nodes[a]=new RAW_enc_tree(TRUE,&myleaf,&(myleaf.curr_pos),a,p_td.oftype_descr->raw); |
| encoded_length+=(*this)[a].RAW_encode(*p_td.oftype_descr,*myleaf.body.node.nodes[a]); |
| } |
| return myleaf.length=encoded_length; |
| } |
| |
| void ProtocolList_template::copy_value(const ProtocolList& other_value) |
| { |
| if (!other_value.is_bound()) TTCN_error("Initialization of a template of type @General_Types.ProtocolList with an unbound value."); |
| single_value.n_elements = other_value.size_of(); |
| single_value.value_elements = (Protocols_template**)allocate_pointers(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (other_value[elem_count].is_bound()) { |
| single_value.value_elements[elem_count] = new Protocols_template(other_value[elem_count]); |
| } else { |
| single_value.value_elements[elem_count] = new Protocols_template; |
| } |
| } |
| set_selection(SPECIFIC_VALUE); |
| } |
| |
| void ProtocolList_template::copy_template(const ProtocolList_template& other_value) |
| { |
| switch (other_value.template_selection) { |
| case SPECIFIC_VALUE: |
| single_value.n_elements = other_value.single_value.n_elements; |
| single_value.value_elements = (Protocols_template**)allocate_pointers(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (UNINITIALIZED_TEMPLATE != other_value.single_value.value_elements[elem_count]->get_selection()) { |
| single_value.value_elements[elem_count] = new Protocols_template(*other_value.single_value.value_elements[elem_count]); |
| } else { |
| single_value.value_elements[elem_count] = new Protocols_template; |
| } |
| } |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = other_value.value_list.n_values; |
| value_list.list_value = new ProtocolList_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; |
| default: |
| TTCN_error("Copying an uninitialized/unsupported template of type @General_Types.ProtocolList."); |
| break; |
| } |
| set_selection(other_value); |
| } |
| |
| boolean ProtocolList_template::match_function_specific(const Base_Type *value_ptr, int value_index, const Restricted_Length_Template *template_ptr, int template_index, boolean legacy) |
| { |
| if (value_index >= 0) return ((const ProtocolList_template*)template_ptr)->single_value.value_elements[template_index]->match((*(const ProtocolList*)value_ptr)[value_index], legacy); |
| else return ((const ProtocolList_template*)template_ptr)->single_value.value_elements[template_index]->is_any_or_omit(); |
| } |
| |
| ProtocolList_template::ProtocolList_template() |
| { |
| } |
| |
| ProtocolList_template::ProtocolList_template(template_sel other_value) |
| : Record_Of_Template(other_value) |
| { |
| check_single_selection(other_value); |
| } |
| |
| ProtocolList_template::ProtocolList_template(null_type) |
| : Record_Of_Template(SPECIFIC_VALUE) |
| { |
| single_value.n_elements = 0; |
| single_value.value_elements = NULL; |
| } |
| |
| ProtocolList_template::ProtocolList_template(const ProtocolList& other_value) |
| { |
| copy_value(other_value); |
| } |
| |
| ProtocolList_template::ProtocolList_template(const OPTIONAL<ProtocolList>& other_value) |
| { |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const ProtocolList&)other_value); |
| break; |
| case OPTIONAL_OMIT: |
| set_selection(OMIT_VALUE); |
| break; |
| default: |
| TTCN_error("Creating a template of type @General_Types.ProtocolList from an unbound optional field."); |
| } |
| } |
| |
| ProtocolList_template::ProtocolList_template(const ProtocolList_template& other_value) |
| : Record_Of_Template() |
| { |
| copy_template(other_value); |
| } |
| |
| ProtocolList_template::~ProtocolList_template() |
| { |
| clean_up(); |
| } |
| |
| void ProtocolList_template::clean_up() |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| delete single_value.value_elements[elem_count]; |
| free_pointers((void**)single_value.value_elements); |
| break; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| delete [] value_list.list_value; |
| default: |
| break; |
| } |
| template_selection = UNINITIALIZED_TEMPLATE; |
| } |
| |
| ProtocolList_template& ProtocolList_template::operator=(template_sel other_value) |
| { |
| check_single_selection(other_value); |
| clean_up(); |
| set_selection(other_value); |
| return *this; |
| } |
| |
| ProtocolList_template& ProtocolList_template::operator=(null_type) |
| { |
| clean_up(); |
| set_selection(SPECIFIC_VALUE); |
| single_value.n_elements = 0; |
| single_value.value_elements = NULL; |
| return *this; |
| } |
| |
| ProtocolList_template& ProtocolList_template::operator=(const ProtocolList& other_value) |
| { |
| clean_up(); |
| copy_value(other_value); |
| return *this; |
| } |
| |
| ProtocolList_template& ProtocolList_template::operator=(const OPTIONAL<ProtocolList>& other_value) |
| { |
| clean_up(); |
| switch (other_value.get_selection()) { |
| case OPTIONAL_PRESENT: |
| copy_value((const ProtocolList&)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 @General_Types.ProtocolList."); |
| } |
| return *this; |
| } |
| |
| ProtocolList_template& ProtocolList_template::operator=(const ProtocolList_template& other_value) |
| { |
| if (&other_value != this) { |
| clean_up(); |
| copy_template(other_value); |
| } |
| return *this; |
| } |
| |
| Protocols_template& ProtocolList_template::operator[](int index_value) |
| { |
| if (index_value < 0) TTCN_error("Accessing an element of a template for type @General_Types.ProtocolList using a negative index: %d.", index_value); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: |
| if(index_value < single_value.n_elements) break; |
| // no break |
| case OMIT_VALUE: |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| case UNINITIALIZED_TEMPLATE: |
| set_size(index_value + 1); |
| break; |
| default: |
| TTCN_error("Accessing an element of a non-specific template for type @General_Types.ProtocolList."); |
| break; |
| } |
| return *single_value.value_elements[index_value]; |
| } |
| |
| Protocols_template& ProtocolList_template::operator[](const INTEGER& index_value) |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a template of type @General_Types.ProtocolList."); |
| return (*this)[(int)index_value]; |
| } |
| |
| const Protocols_template& ProtocolList_template::operator[](int index_value) const |
| { |
| if (index_value < 0) TTCN_error("Accessing an element of a template for type @General_Types.ProtocolList using a negative index: %d.", index_value); |
| if (template_selection != SPECIFIC_VALUE) TTCN_error("Accessing an element of a non-specific template for type @General_Types.ProtocolList."); |
| if (index_value >= single_value.n_elements) TTCN_error("Index overflow in a template of type @General_Types.ProtocolList: The index is %d, but the template has only %d elements.", index_value, single_value.n_elements); |
| return *single_value.value_elements[index_value]; |
| } |
| |
| const Protocols_template& ProtocolList_template::operator[](const INTEGER& index_value) const |
| { |
| index_value.must_bound("Using an unbound integer value for indexing a template of type @General_Types.ProtocolList."); |
| return (*this)[(int)index_value]; |
| } |
| |
| void ProtocolList_template::set_size(int new_size) |
| { |
| if (new_size < 0) TTCN_error("Internal error: Setting a negative size for a template of type @General_Types.ProtocolList."); |
| template_sel old_selection = template_selection; |
| if (old_selection != SPECIFIC_VALUE) { |
| clean_up(); |
| set_selection(SPECIFIC_VALUE); |
| single_value.n_elements = 0; |
| single_value.value_elements = NULL; |
| } |
| if (new_size > single_value.n_elements) { |
| single_value.value_elements = (Protocols_template**)reallocate_pointers((void**)single_value.value_elements, single_value.n_elements, new_size); |
| if (old_selection == ANY_VALUE || old_selection == ANY_OR_OMIT) { |
| for (int elem_count = single_value.n_elements; elem_count < new_size; elem_count++) |
| single_value.value_elements[elem_count] = new Protocols_template(ANY_VALUE); |
| } else { |
| for (int elem_count = single_value.n_elements; elem_count < new_size; elem_count++) |
| single_value.value_elements[elem_count] = new Protocols_template; |
| } |
| single_value.n_elements = new_size; |
| } else if (new_size < single_value.n_elements) { |
| for (int elem_count = new_size; elem_count < single_value.n_elements; elem_count++) |
| delete single_value.value_elements[elem_count]; |
| single_value.value_elements = (Protocols_template**)reallocate_pointers((void**)single_value.value_elements, single_value.n_elements, new_size); |
| single_value.n_elements = new_size; |
| } |
| } |
| |
| int ProtocolList_template::n_elem() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| return single_value.n_elements; |
| break; |
| case VALUE_LIST: |
| return value_list.n_values; |
| break; |
| default: |
| TTCN_error("Performing n_elem"); |
| } |
| } |
| |
| int ProtocolList_template::size_of(boolean is_size) const |
| { |
| const char* op_name = is_size ? "size" : "length"; |
| int min_size; |
| boolean has_any_or_none; |
| if (is_ifpresent) TTCN_error("Performing %sof() operation on a template of type @General_Types.ProtocolList which has an ifpresent attribute.", op_name); |
| switch (template_selection) |
| { |
| case SPECIFIC_VALUE: { |
| min_size = 0; |
| has_any_or_none = FALSE; |
| int elem_count = single_value.n_elements; |
| if (!is_size) { while (elem_count>0 && !single_value.value_elements[elem_count-1]->is_bound()) elem_count--; } |
| for (int i=0; i<elem_count; i++) { |
| switch (single_value.value_elements[i]->get_selection()) { |
| case OMIT_VALUE: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.ProtocolList containing omit element.", op_name); |
| case ANY_OR_OMIT: |
| has_any_or_none = TRUE; |
| break; |
| default: |
| min_size++; |
| break; |
| } |
| } |
| } break; |
| case OMIT_VALUE: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.ProtocolList containing omit value.", op_name); |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| min_size = 0; |
| has_any_or_none = TRUE; |
| break; |
| case VALUE_LIST: |
| { |
| if (value_list.n_values<1) |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.ProtocolList containing an empty list.", op_name); |
| int item_size = value_list.list_value[0].size_of(is_size); |
| for (unsigned int i = 1; i < value_list.n_values; i++) { |
| if (value_list.list_value[i].size_of(is_size)!=item_size) |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.ProtocolList containing a value list with different sizes.", op_name); |
| } |
| min_size = item_size; |
| has_any_or_none = FALSE; |
| break; |
| } |
| case COMPLEMENTED_LIST: |
| TTCN_error("Performing %sof() operation on a template of type @General_Types.ProtocolList containing complemented list.", op_name); |
| default: |
| TTCN_error("Performing %sof() operation on an uninitialized/unsupported template of type @General_Types.ProtocolList.", op_name); |
| } |
| return check_section_is_single(min_size, has_any_or_none, op_name, "a", "template of type @General_Types.ProtocolList"); |
| } |
| |
| boolean ProtocolList_template::match(const ProtocolList& other_value, boolean legacy) const |
| { |
| if (!other_value.is_bound()) return FALSE; |
| int value_length = other_value.size_of(); |
| if (!match_length(value_length)) return FALSE; |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| return match_record_of(&other_value, value_length, this, single_value.n_elements, match_function_specific, legacy); |
| case OMIT_VALUE: |
| return FALSE; |
| case ANY_VALUE: |
| case ANY_OR_OMIT: |
| 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; |
| default: |
| TTCN_error("Matching with an uninitialized/unsupported template of type @General_Types.ProtocolList."); |
| } |
| return FALSE; |
| } |
| |
| boolean ProtocolList_template::is_value() const |
| { |
| if (template_selection != SPECIFIC_VALUE || is_ifpresent) return FALSE; |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| if (!single_value.value_elements[elem_count]->is_value()) return FALSE; |
| return TRUE; |
| } |
| |
| ProtocolList ProtocolList_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 @General_Types.ProtocolList."); |
| ProtocolList ret_val; |
| ret_val.set_size(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| if (single_value.value_elements[elem_count]->is_bound()) { |
| ret_val[elem_count] = single_value.value_elements[elem_count]->valueof(); |
| } |
| return ret_val; |
| } |
| |
| ProtocolList ProtocolList_template::substr(int index, int returncount) const |
| { |
| if (!is_value()) TTCN_error("The first argument of function substr() is a template with non-specific value."); |
| return valueof().substr(index, returncount); |
| } |
| |
| ProtocolList ProtocolList_template::replace(int index, int len, const ProtocolList_template& repl) const |
| { |
| if (!is_value()) TTCN_error("The first argument of function replace() is a template with non-specific value."); |
| if (!repl.is_value()) TTCN_error("The fourth argument of function replace() is a template with non-specific value."); |
| return valueof().replace(index, len, repl.valueof()); |
| } |
| |
| ProtocolList ProtocolList_template::replace(int index, int len, const ProtocolList& repl) const |
| { |
| if (!is_value()) TTCN_error("The first argument of function replace() is a template with non-specific value."); |
| return valueof().replace(index, len, repl); |
| } |
| |
| void ProtocolList_template::set_type(template_sel template_type, unsigned int list_length) |
| { |
| clean_up(); |
| switch (template_type) { |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| value_list.n_values = list_length; |
| value_list.list_value = new ProtocolList_template[list_length]; |
| break; |
| default: |
| TTCN_error("Internal error: Setting an invalid type for a template of type @General_Types.ProtocolList."); |
| } |
| set_selection(template_type); |
| } |
| |
| ProtocolList_template& ProtocolList_template::list_item(unsigned int list_index) |
| { |
| if (template_selection != VALUE_LIST && template_selection != COMPLEMENTED_LIST) TTCN_error("Internal error: Accessing a list element of a non-list template of type @General_Types.ProtocolList."); |
| if (list_index >= value_list.n_values) TTCN_error("Internal error: Index overflow in a value list template of type @General_Types.ProtocolList."); |
| return value_list.list_value[list_index]; |
| } |
| |
| void ProtocolList_template::log() const |
| { |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| if (single_value.n_elements > 0) { |
| TTCN_Logger::log_event_str("{ "); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (elem_count > 0) TTCN_Logger::log_event_str(", "); |
| if (permutation_starts_at(elem_count)) TTCN_Logger::log_event_str("permutation("); |
| single_value.value_elements[elem_count]->log(); |
| if (permutation_ends_at(elem_count)) TTCN_Logger::log_char(')'); |
| } |
| TTCN_Logger::log_event_str(" }"); |
| } else TTCN_Logger::log_event_str("{ }"); |
| break; |
| case COMPLEMENTED_LIST: |
| TTCN_Logger::log_event_str("complement"); |
| 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; |
| default: |
| log_generic(); |
| } |
| log_restricted(); |
| log_ifpresent(); |
| } |
| |
| void ProtocolList_template::log_match(const ProtocolList& 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 && single_value.n_elements > 0 && get_number_of_permutations() == 0 && single_value.n_elements == match_value.size_of()) { |
| size_t previous_size = TTCN_Logger::get_logmatch_buffer_len(); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if(!single_value.value_elements[elem_count]->match(match_value[elem_count], legacy)){ |
| TTCN_Logger::log_logmatch_info("[%d]", elem_count); |
| single_value.value_elements[elem_count]->log_match(match_value[elem_count], legacy); |
| TTCN_Logger::set_logmatch_buffer_len(previous_size); |
| } |
| } |
| log_match_length(single_value.n_elements); |
| } 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 && single_value.n_elements > 0 && get_number_of_permutations() == 0 && single_value.n_elements == match_value.size_of()) { |
| TTCN_Logger::log_event_str("{ "); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| if (elem_count > 0) TTCN_Logger::log_event_str(", "); |
| single_value.value_elements[elem_count]->log_match(match_value[elem_count], legacy); |
| } |
| TTCN_Logger::log_event_str(" }"); |
| log_match_length(single_value.n_elements); |
| } 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 ProtocolList_template::encode_text(Text_Buf& text_buf) const |
| { |
| encode_text_permutation(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| text_buf.push_int(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) |
| single_value.value_elements[elem_count]->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 @General_Types.ProtocolList."); |
| } |
| } |
| |
| void ProtocolList_template::decode_text(Text_Buf& text_buf) |
| { |
| clean_up(); |
| decode_text_permutation(text_buf); |
| switch (template_selection) { |
| case SPECIFIC_VALUE: |
| single_value.n_elements = text_buf.pull_int().get_val(); |
| if (single_value.n_elements < 0) TTCN_error("Text decoder: Negative size was received for a template of type @General_Types.ProtocolList."); |
| single_value.value_elements = (Protocols_template**)allocate_pointers(single_value.n_elements); |
| for (int elem_count = 0; elem_count < single_value.n_elements; elem_count++) { |
| single_value.value_elements[elem_count] = new Protocols_template; |
| single_value.value_elements[elem_count]->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 ProtocolList_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 for a template of type @General_Types.ProtocolList."); |
| } |
| } |
| |
| boolean ProtocolList_template::is_present(boolean legacy) const |
| { |
| if (template_selection==UNINITIALIZED_TEMPLATE) return FALSE; |
| return !match_omit(legacy); |
| } |
| |
| boolean ProtocolList_template::match_omit(boolean legacy) const |
| { |
| if (is_ifpresent) return TRUE; |
| switch (template_selection) { |
| case OMIT_VALUE: |
| case ANY_OR_OMIT: |
| return TRUE; |
| case VALUE_LIST: |
| case COMPLEMENTED_LIST: |
| if (legacy) { |
| for (unsigned int i=0; i<value_list.n_values; i++) |
| if (value_list.list_value[i].match_omit()) |
| return template_selection==VALUE_LIST; |
| return template_selection==COMPLEMENTED_LIST; |
| } // else fall through |
| default: |
| return FALSE; |
| } |
| return FALSE; |
| } |
| |
| void ProtocolList_template::set_param(Module_Param& param) |
| { |
| param.basic_check(Module_Param::BC_TEMPLATE|Module_Param::BC_LIST, "record of 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: { |
| ProtocolList_template temp; |
| temp.set_type(param.get_type()==Module_Param::MP_List_Template ? VALUE_LIST : COMPLEMENTED_LIST, param.get_size()); |
| for (size_t p_i=0; p_i<param.get_size(); p_i++) { |
| temp.list_item(p_i).set_param(*param.get_elem(p_i)); |
| } |
| *this = temp; |
| break; } |
| case Module_Param::MP_Indexed_List: |
| if (template_selection!=SPECIFIC_VALUE) set_size(0); |
| for (size_t p_i=0; p_i<param.get_size(); ++p_i) { |
| (*this)[(int)(param.get_elem(p_i)->get_id()->get_index())].set_param(*param.get_elem(p_i)); |
| } |
| break; |
| case Module_Param::MP_Value_List: { |
| set_size(param.get_size()); |
| int curr_idx = 0; |
| for (size_t p_i=0; p_i<param.get_size(); ++p_i) { |
| switch (param.get_elem(p_i)->get_type()) { |
| case Module_Param::MP_NotUsed: |
| curr_idx++; |
| break; |
| case Module_Param::MP_Permutation_Template: { |
| int perm_start_idx = curr_idx; |
| Module_Param* param_i = param.get_elem(p_i); |
| for (size_t perm_i=0; perm_i<param_i->get_size(); perm_i++) { |
| (*this)[curr_idx].set_param(*(param_i->get_elem(perm_i))); |
| curr_idx++; |
| } |
| int perm_end_idx = curr_idx - 1; |
| add_permutation(perm_start_idx, perm_end_idx); |
| } break; |
| default: |
| (*this)[curr_idx].set_param(*param.get_elem(p_i)); |
| curr_idx++; |
| } |
| } |
| } break; |
| default: |
| param.type_error("record of template", "@General_Types.ProtocolList"); |
| } |
| is_ifpresent = param.get_ifpresent(); |
| set_length_range(param); |
| } |
| |
| void ProtocolList_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; |
| for (int i=0; i<single_value.n_elements; i++) single_value.value_elements[i]->check_restriction(t_res, t_name ? t_name : "@General_Types.ProtocolList"); |
| 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 : "@General_Types.ProtocolList"); |
| } |
| |
| boolean ProtocolList_template::get_istemplate_kind(const char* type) const { |
| if (!strcmp(type, "AnyElement")) { |
| if (template_selection != SPECIFIC_VALUE) { |
| return FALSE; |
| } |
| for (int i = 0; i < single_value.n_elements; i++) { |
| if (single_value.value_elements[i]->get_selection() == ANY_VALUE) { |
| return TRUE; |
| } |
| } |
| return FALSE; |
| } else if (!strcmp(type, "AnyElementsOrNone")) { |
| if (template_selection != SPECIFIC_VALUE) { |
| return FALSE; |
| } |
| for (int i = 0; i < single_value.n_elements; i++) { |
| if (single_value.value_elements[i]->get_selection() == ANY_OR_OMIT) { |
| return TRUE; |
| } |
| } |
| return FALSE; |
| } else if (!strcmp(type, "permutation")) { |
| return number_of_permutations; |
| } else if (!strcmp(type, "length")) { |
| return length_restriction_type != NO_LENGTH_RESTRICTION; |
| } else { |
| return Base_Template::get_istemplate_kind(type); |
| } |
| } |
| |
| /* Bodies of functions, altsteps and testcases */ |
| |
| boolean operator==(null_type, const Integer__array& other_value) |
| { |
| if (other_value.val_ptr == NULL) |
| TTCN_error("The right operand of comparison is an unbound value of type @General_Types.Integer_array."); |
| return other_value.val_ptr->n_elements == 0; |
| } |
| |
| boolean operator==(null_type, const Verdicttypes& other_value) |
| { |
| if (other_value.val_ptr == NULL) |
| TTCN_error("The right operand of comparison is an unbound value of type @General_Types.Verdicttypes."); |
| return other_value.val_ptr->n_elements == 0; |
| } |
| |
| boolean operator==(null_type, const VerdicttypeSet& other_value) |
| { |
| if (other_value.val_ptr == NULL) |
| TTCN_error("The right operand of comparison is an unbound value of type @General_Types.VerdicttypeSet."); |
| return other_value.val_ptr->n_elements == 0; |
| } |
| |
| boolean operator==(null_type, const Anytypes& other_value) |
| { |
| if (other_value.val_ptr == NULL) |
| TTCN_error("The right operand of comparison is an unbound value of type @General_Types.Anytypes."); |
| return other_value.val_ptr->n_elements == 0; |
| } |
| |
| boolean operator==(null_type, const AnytypeSet& other_value) |
| { |
| if (other_value.val_ptr == NULL) |
| TTCN_error("The right operand of comparison is an unbound value of type @General_Types.AnytypeSet."); |
| return other_value.val_ptr->n_elements == 0; |
| } |
| |
| boolean operator==(null_type, const ListOfDummy__comptype& other_value) |
| { |
| if (other_value.val_ptr == NULL) |
| TTCN_error("The right operand of comparison is an unbound value of type @General_Types.ListOfDummy_comptype."); |
| return other_value.val_ptr->n_elements == 0; |
| } |
| |
| boolean operator==(null_type, const ListOfDummy__CT& other_value) |
| { |
| if (other_value.val_ptr == NULL) |
| TTCN_error("The right operand of comparison is an unbound value of type @General_Types.ListOfDummy_CT."); |
| return other_value.val_ptr->n_elements == 0; |
| } |
| |
| boolean operator==(null_type, const ProtocolList& other_value) |
| { |
| if (other_value.val_ptr == NULL) |
| TTCN_error("The right operand of comparison is an unbound value of type @General_Types.ProtocolList."); |
| return other_value.val_ptr->n_elements == 0; |
| } |
| |
| |
| /* Bodies of static functions */ |
| |
| static boolean init_comp_type(const char *component_type, boolean init_base_comps) |
| { |
| (void)init_base_comps; |
| if (!strcmp(component_type, "Dummy_comptype")) { |
| return TRUE; |
| } else if (!strcmp(component_type, "Dummy_CT")) { |
| return TRUE; |
| } else return FALSE; |
| } |
| |
| |
| } /* end of namespace */ |