/***************************************************************************** # Copyright 2019 AT&T Intellectual Property * # * # Licensed under the Apache License, Version 2.0 (the "License"); * # you may not use this file except in compliance with the License. * # You may obtain a copy of the License at * # * # http://www.apache.org/licenses/LICENSE-2.0 * # * # Unless required by applicable law or agreed to in writing, software * # distributed under the License is distributed on an "AS IS" BASIS, * # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * # See the License for the specific language governing permissions and * # limitations under the License. * # * ******************************************************************************/ #pragma once #include "asn/asn.hpp" static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)"); #include "X2AP-CommonDataTypes.hpp" #include "X2AP-PDU-Contents.hpp" #include "X2AP-Constants.hpp" /* X2AP-ELEMENTARY-PROCEDURE ::= CLASS { &InitiatingMessage , &SuccessfulOutcome OPTIONAL, &UnsuccessfulOutcome OPTIONAL, &procedureCode ProcedureCode UNIQUE, &criticality Criticality DEFAULT ignore } WITH SYNTAX { INITIATING MESSAGE &InitiatingMessage [SUCCESSFUL OUTCOME &SuccessfulOutcome] [UNSUCCESSFUL OUTCOME &UnsuccessfulOutcome] PROCEDURE CODE &procedureCode [CRITICALITY &criticality] } */ struct X2AP_ELEMENTARY_PROCEDURE { struct procedureCode_t : ProcedureCode { static constexpr const char* name() {return "procedureCode_t";} using parent_t = ProcedureCode; }; struct criticality_t : Criticality { static constexpr const char* name() {return "criticality_t";} using parent_t = Criticality; }; }; /* X2AP-ELEMENTARY-PROCEDURES X2AP-ELEMENTARY-PROCEDURE ::= { X2AP-ELEMENTARY-PROCEDURES-CLASS-1 | X2AP-ELEMENTARY-PROCEDURES-CLASS-2 , ... } */ struct X2AP_ELEMENTARY_PROCEDURES { struct InitiatingMessage_t : asn::typefield { ~InitiatingMessage_t() {clear();} size_t get_index() const {return type;} HandoverRequest& select_id_handoverPreparation() { return set(1); } HandoverRequest const* get_id_handoverPreparation() const { return get(1); } ResetRequest& select_id_reset() { return set(2); } ResetRequest const* get_id_reset() const { return get(2); } X2SetupRequest& select_id_x2Setup() { return set(3); } X2SetupRequest const* get_id_x2Setup() const { return get(3); } ResourceStatusRequest& select_id_resourceStatusReportingInitiation() { return set(4); } ResourceStatusRequest const* get_id_resourceStatusReportingInitiation() const { return get(4); } ENBConfigurationUpdate& select_id_eNBConfigurationUpdate() { return set(5); } ENBConfigurationUpdate const* get_id_eNBConfigurationUpdate() const { return get(5); } MobilityChangeRequest& select_id_mobilitySettingsChange() { return set(6); } MobilityChangeRequest const* get_id_mobilitySettingsChange() const { return get(6); } CellActivationRequest& select_id_cellActivation() { return set(7); } CellActivationRequest const* get_id_cellActivation() const { return get(7); } SeNBAdditionRequest& select_id_seNBAdditionPreparation() { return set(8); } SeNBAdditionRequest const* get_id_seNBAdditionPreparation() const { return get(8); } SeNBModificationRequest& select_id_meNBinitiatedSeNBModificationPreparation() { return set(9); } SeNBModificationRequest const* get_id_meNBinitiatedSeNBModificationPreparation() const { return get(9); } SeNBModificationRequired& select_id_seNBinitiatedSeNBModification() { return set(10); } SeNBModificationRequired const* get_id_seNBinitiatedSeNBModification() const { return get(10); } SeNBReleaseRequired& select_id_seNBinitiatedSeNBRelease() { return set(11); } SeNBReleaseRequired const* get_id_seNBinitiatedSeNBRelease() const { return get(11); } X2RemovalRequest& select_id_x2Removal() { return set(12); } X2RemovalRequest const* get_id_x2Removal() const { return get(12); } RetrieveUEContextRequest& select_id_retrieveUEContext() { return set(13); } RetrieveUEContextRequest const* get_id_retrieveUEContext() const { return get(13); } SgNBAdditionRequest& select_id_sgNBAdditionPreparation() { return set(14); } SgNBAdditionRequest const* get_id_sgNBAdditionPreparation() const { return get(14); } SgNBModificationRequest& select_id_meNBinitiatedSgNBModificationPreparation() { return set(15); } SgNBModificationRequest const* get_id_meNBinitiatedSgNBModificationPreparation() const { return get(15); } SgNBModificationRequired& select_id_sgNBinitiatedSgNBModification() { return set(16); } SgNBModificationRequired const* get_id_sgNBinitiatedSgNBModification() const { return get(16); } SgNBReleaseRequest& select_id_meNBinitiatedSgNBRelease() { return set(17); } SgNBReleaseRequest const* get_id_meNBinitiatedSgNBRelease() const { return get(17); } SgNBReleaseRequired& select_id_sgNBinitiatedSgNBRelease() { return set(18); } SgNBReleaseRequired const* get_id_sgNBinitiatedSgNBRelease() const { return get(18); } SgNBChangeRequired& select_id_sgNBChange() { return set(19); } SgNBChangeRequired const* get_id_sgNBChange() const { return get(19); } ENDCX2SetupRequest& select_id_endcX2Setup() { return set(20); } ENDCX2SetupRequest const* get_id_endcX2Setup() const { return get(20); } ENDCConfigurationUpdate& select_id_endcConfigurationUpdate() { return set(21); } ENDCConfigurationUpdate const* get_id_endcConfigurationUpdate() const { return get(21); } ENDCCellActivationRequest& select_id_endcCellActivation() { return set(22); } ENDCCellActivationRequest const* get_id_endcCellActivation() const { return get(22); } ENDCPartialResetRequired& select_id_endcPartialReset() { return set(23); } ENDCPartialResetRequired const* get_id_endcPartialReset() const { return get(23); } EUTRANRCellResourceCoordinationRequest& select_id_eUTRANRCellResourceCoordination() { return set(24); } EUTRANRCellResourceCoordinationRequest const* get_id_eUTRANRCellResourceCoordination() const { return get(24); } ENDCX2RemovalRequest& select_id_endcX2Removal() { return set(25); } ENDCX2RemovalRequest const* get_id_endcX2Removal() const { return get(25); } SNStatusTransfer& select_id_snStatusTransfer() { return set(26); } SNStatusTransfer const* get_id_snStatusTransfer() const { return get(26); } UEContextRelease& select_id_uEContextRelease() { return set(27); } UEContextRelease const* get_id_uEContextRelease() const { return get(27); } HandoverCancel& select_id_handoverCancel() { return set(28); } HandoverCancel const* get_id_handoverCancel() const { return get(28); } ErrorIndication& select_id_errorIndication() { return set(29); } ErrorIndication const* get_id_errorIndication() const { return get(29); } ResourceStatusUpdate& select_id_resourceStatusReporting() { return set(30); } ResourceStatusUpdate const* get_id_resourceStatusReporting() const { return get(30); } LoadInformation& select_id_loadIndication() { return set(31); } LoadInformation const* get_id_loadIndication() const { return get(31); } PrivateMessage& select_id_privateMessage() { return set(32); } PrivateMessage const* get_id_privateMessage() const { return get(32); } RLFIndication& select_id_rLFIndication() { return set(33); } RLFIndication const* get_id_rLFIndication() const { return get(33); } HandoverReport& select_id_handoverReport() { return set(34); } HandoverReport const* get_id_handoverReport() const { return get(34); } X2Release& select_id_x2Release() { return set(35); } X2Release const* get_id_x2Release() const { return get(35); } X2APMessageTransfer& select_id_x2APMessageTransfer() { return set(36); } X2APMessageTransfer const* get_id_x2APMessageTransfer() const { return get(36); } SeNBReconfigurationComplete& select_id_seNBReconfigurationCompletion() { return set(37); } SeNBReconfigurationComplete const* get_id_seNBReconfigurationCompletion() const { return get(37); } SeNBReleaseRequest& select_id_meNBinitiatedSeNBRelease() { return set(38); } SeNBReleaseRequest const* get_id_meNBinitiatedSeNBRelease() const { return get(38); } SeNBCounterCheckRequest& select_id_seNBCounterCheck() { return set(39); } SeNBCounterCheckRequest const* get_id_seNBCounterCheck() const { return get(39); } SgNBReconfigurationComplete& select_id_sgNBReconfigurationCompletion() { return set(40); } SgNBReconfigurationComplete const* get_id_sgNBReconfigurationCompletion() const { return get(40); } SgNBCounterCheckRequest& select_id_sgNBCounterCheck() { return set(41); } SgNBCounterCheckRequest const* get_id_sgNBCounterCheck() const { return get(41); } RRCTransfer& select_id_rRCTransfer() { return set(42); } RRCTransfer const* get_id_rRCTransfer() const { return get(42); } SecondaryRATDataUsageReport& select_id_secondaryRATDataUsageReport() { return set(43); } SecondaryRATDataUsageReport const* get_id_secondaryRATDataUsageReport() const { return get(43); } SgNBActivityNotification& select_id_SgNBActivityNotification() { return set(44); } SgNBActivityNotification const* get_id_SgNBActivityNotification() const { return get(44); } DataForwardingAddressIndication& select_id_dataForwardingAddressIndication() { return set(45); } DataForwardingAddressIndication const* get_id_dataForwardingAddressIndication() const { return get(45); } bool is_unknown() const { return type == 46; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; case 7: var.destroy(); break; case 8: var.destroy(); break; case 9: var.destroy(); break; case 10: var.destroy(); break; case 11: var.destroy(); break; case 12: var.destroy(); break; case 13: var.destroy(); break; case 14: var.destroy(); break; case 15: var.destroy(); break; case 16: var.destroy(); break; case 17: var.destroy(); break; case 18: var.destroy(); break; case 19: var.destroy(); break; case 20: var.destroy(); break; case 21: var.destroy(); break; case 22: var.destroy(); break; case 23: var.destroy(); break; case 24: var.destroy(); break; case 25: var.destroy(); break; case 26: var.destroy(); break; case 27: var.destroy(); break; case 28: var.destroy(); break; case 29: var.destroy(); break; case 30: var.destroy(); break; case 31: var.destroy(); break; case 32: var.destroy(); break; case 33: var.destroy(); break; case 34: var.destroy(); break; case 35: var.destroy(); break; case 36: var.destroy(); break; case 37: var.destroy(); break; case 38: var.destroy(); break; case 39: var.destroy(); break; case 40: var.destroy(); break; case 41: var.destroy(); break; case 42: var.destroy(); break; case 43: var.destroy(); break; case 44: var.destroy(); break; case 45: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); v.template operator()(7); v.template operator()(8); v.template operator()(9); v.template operator()(10); v.template operator()(11); v.template operator()(12); v.template operator()(13); v.template operator()(14); v.template operator()(15); v.template operator()(16); v.template operator()(17); v.template operator()(18); v.template operator()(19); v.template operator()(20); v.template operator()(21); v.template operator()(22); v.template operator()(23); v.template operator()(24); v.template operator()(25); v.template operator()(26); v.template operator()(27); v.template operator()(28); v.template operator()(29); v.template operator()(30); v.template operator()(31); v.template operator()(32); v.template operator()(33); v.template operator()(34); v.template operator()(35); v.template operator()(36); v.template operator()(37); v.template operator()(38); v.template operator()(39); v.template operator()(40); v.template operator()(41); v.template operator()(42); v.template operator()(43); v.template operator()(44); v.template operator()(45); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_handoverPreparation()); return true; case 2: v(select_id_reset()); return true; case 3: v(select_id_x2Setup()); return true; case 4: v(select_id_resourceStatusReportingInitiation()); return true; case 5: v(select_id_eNBConfigurationUpdate()); return true; case 6: v(select_id_mobilitySettingsChange()); return true; case 7: v(select_id_cellActivation()); return true; case 8: v(select_id_seNBAdditionPreparation()); return true; case 9: v(select_id_meNBinitiatedSeNBModificationPreparation()); return true; case 10: v(select_id_seNBinitiatedSeNBModification()); return true; case 11: v(select_id_seNBinitiatedSeNBRelease()); return true; case 12: v(select_id_x2Removal()); return true; case 13: v(select_id_retrieveUEContext()); return true; case 14: v(select_id_sgNBAdditionPreparation()); return true; case 15: v(select_id_meNBinitiatedSgNBModificationPreparation()); return true; case 16: v(select_id_sgNBinitiatedSgNBModification()); return true; case 17: v(select_id_meNBinitiatedSgNBRelease()); return true; case 18: v(select_id_sgNBinitiatedSgNBRelease()); return true; case 19: v(select_id_sgNBChange()); return true; case 20: v(select_id_endcX2Setup()); return true; case 21: v(select_id_endcConfigurationUpdate()); return true; case 22: v(select_id_endcCellActivation()); return true; case 23: v(select_id_endcPartialReset()); return true; case 24: v(select_id_eUTRANRCellResourceCoordination()); return true; case 25: v(select_id_endcX2Removal()); return true; case 26: v(select_id_snStatusTransfer()); return true; case 27: v(select_id_uEContextRelease()); return true; case 28: v(select_id_handoverCancel()); return true; case 29: v(select_id_errorIndication()); return true; case 30: v(select_id_resourceStatusReporting()); return true; case 31: v(select_id_loadIndication()); return true; case 32: v(select_id_privateMessage()); return true; case 33: v(select_id_rLFIndication()); return true; case 34: v(select_id_handoverReport()); return true; case 35: v(select_id_x2Release()); return true; case 36: v(select_id_x2APMessageTransfer()); return true; case 37: v(select_id_seNBReconfigurationCompletion()); return true; case 38: v(select_id_meNBinitiatedSeNBRelease()); return true; case 39: v(select_id_seNBCounterCheck()); return true; case 40: v(select_id_sgNBReconfigurationCompletion()); return true; case 41: v(select_id_sgNBCounterCheck()); return true; case 42: v(select_id_rRCTransfer()); return true; case 43: v(select_id_secondaryRATDataUsageReport()); return true; case 44: v(select_id_SgNBActivityNotification()); return true; case 45: v(select_id_dataForwardingAddressIndication()); return true; case 46: if(type != 46) {clear(); asn::base::set();} type = 46; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; case 7: v(var.as()); return true; case 8: v(var.as()); return true; case 9: v(var.as()); return true; case 10: v(var.as()); return true; case 11: v(var.as()); return true; case 12: v(var.as()); return true; case 13: v(var.as()); return true; case 14: v(var.as()); return true; case 15: v(var.as()); return true; case 16: v(var.as()); return true; case 17: v(var.as()); return true; case 18: v(var.as()); return true; case 19: v(var.as()); return true; case 20: v(var.as()); return true; case 21: v(var.as()); return true; case 22: v(var.as()); return true; case 23: v(var.as()); return true; case 24: v(var.as()); return true; case 25: v(var.as()); return true; case 26: v(var.as()); return true; case 27: v(var.as()); return true; case 28: v(var.as()); return true; case 29: v(var.as()); return true; case 30: v(var.as()); return true; case 31: v(var.as()); return true; case 32: v(var.as()); return true; case 33: v(var.as()); return true; case 34: v(var.as()); return true; case 35: v(var.as()); return true; case 36: v(var.as()); return true; case 37: v(var.as()); return true; case 38: v(var.as()); return true; case 39: v(var.as()); return true; case 40: v(var.as()); return true; case 41: v(var.as()); return true; case 42: v(var.as()); return true; case 43: v(var.as()); return true; case 44: v(var.as()); return true; case 45: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CellActivationRequest)]; char dummy2[sizeof(DataForwardingAddressIndication)]; char dummy3[sizeof(ENBConfigurationUpdate)]; char dummy4[sizeof(ENDCCellActivationRequest)]; char dummy5[sizeof(ENDCConfigurationUpdate)]; char dummy6[sizeof(ENDCPartialResetRequired)]; char dummy7[sizeof(ENDCX2RemovalRequest)]; char dummy8[sizeof(ENDCX2SetupRequest)]; char dummy9[sizeof(EUTRANRCellResourceCoordinationRequest)]; char dummy10[sizeof(ErrorIndication)]; char dummy11[sizeof(HandoverCancel)]; char dummy12[sizeof(HandoverReport)]; char dummy13[sizeof(HandoverRequest)]; char dummy14[sizeof(LoadInformation)]; char dummy15[sizeof(MobilityChangeRequest)]; char dummy16[sizeof(PrivateMessage)]; char dummy17[sizeof(RLFIndication)]; char dummy18[sizeof(RRCTransfer)]; char dummy19[sizeof(ResetRequest)]; char dummy20[sizeof(ResourceStatusRequest)]; char dummy21[sizeof(ResourceStatusUpdate)]; char dummy22[sizeof(RetrieveUEContextRequest)]; char dummy23[sizeof(SNStatusTransfer)]; char dummy24[sizeof(SeNBAdditionRequest)]; char dummy25[sizeof(SeNBCounterCheckRequest)]; char dummy26[sizeof(SeNBModificationRequest)]; char dummy27[sizeof(SeNBModificationRequired)]; char dummy28[sizeof(SeNBReconfigurationComplete)]; char dummy29[sizeof(SeNBReleaseRequest)]; char dummy30[sizeof(SeNBReleaseRequired)]; char dummy31[sizeof(SecondaryRATDataUsageReport)]; char dummy32[sizeof(SgNBActivityNotification)]; char dummy33[sizeof(SgNBAdditionRequest)]; char dummy34[sizeof(SgNBChangeRequired)]; char dummy35[sizeof(SgNBCounterCheckRequest)]; char dummy36[sizeof(SgNBModificationRequest)]; char dummy37[sizeof(SgNBModificationRequired)]; char dummy38[sizeof(SgNBReconfigurationComplete)]; char dummy39[sizeof(SgNBReleaseRequest)]; char dummy40[sizeof(SgNBReleaseRequired)]; char dummy41[sizeof(UEContextRelease)]; char dummy42[sizeof(X2APMessageTransfer)]; char dummy43[sizeof(X2Release)]; char dummy44[sizeof(X2RemovalRequest)]; char dummy45[sizeof(X2SetupRequest)]; }; asn::variant var; size_t type {0}; }; struct SuccessfulOutcome_t : asn::typefield { ~SuccessfulOutcome_t() {clear();} size_t get_index() const {return type;} HandoverRequestAcknowledge& select_id_handoverPreparation() { return set(1); } HandoverRequestAcknowledge const* get_id_handoverPreparation() const { return get(1); } ResetResponse& select_id_reset() { return set(2); } ResetResponse const* get_id_reset() const { return get(2); } X2SetupResponse& select_id_x2Setup() { return set(3); } X2SetupResponse const* get_id_x2Setup() const { return get(3); } ResourceStatusResponse& select_id_resourceStatusReportingInitiation() { return set(4); } ResourceStatusResponse const* get_id_resourceStatusReportingInitiation() const { return get(4); } ENBConfigurationUpdateAcknowledge& select_id_eNBConfigurationUpdate() { return set(5); } ENBConfigurationUpdateAcknowledge const* get_id_eNBConfigurationUpdate() const { return get(5); } MobilityChangeAcknowledge& select_id_mobilitySettingsChange() { return set(6); } MobilityChangeAcknowledge const* get_id_mobilitySettingsChange() const { return get(6); } CellActivationResponse& select_id_cellActivation() { return set(7); } CellActivationResponse const* get_id_cellActivation() const { return get(7); } SeNBAdditionRequestAcknowledge& select_id_seNBAdditionPreparation() { return set(8); } SeNBAdditionRequestAcknowledge const* get_id_seNBAdditionPreparation() const { return get(8); } SeNBModificationRequestAcknowledge& select_id_meNBinitiatedSeNBModificationPreparation() { return set(9); } SeNBModificationRequestAcknowledge const* get_id_meNBinitiatedSeNBModificationPreparation() const { return get(9); } SeNBModificationConfirm& select_id_seNBinitiatedSeNBModification() { return set(10); } SeNBModificationConfirm const* get_id_seNBinitiatedSeNBModification() const { return get(10); } SeNBReleaseConfirm& select_id_seNBinitiatedSeNBRelease() { return set(11); } SeNBReleaseConfirm const* get_id_seNBinitiatedSeNBRelease() const { return get(11); } X2RemovalResponse& select_id_x2Removal() { return set(12); } X2RemovalResponse const* get_id_x2Removal() const { return get(12); } RetrieveUEContextResponse& select_id_retrieveUEContext() { return set(13); } RetrieveUEContextResponse const* get_id_retrieveUEContext() const { return get(13); } SgNBAdditionRequestAcknowledge& select_id_sgNBAdditionPreparation() { return set(14); } SgNBAdditionRequestAcknowledge const* get_id_sgNBAdditionPreparation() const { return get(14); } SgNBModificationRequestAcknowledge& select_id_meNBinitiatedSgNBModificationPreparation() { return set(15); } SgNBModificationRequestAcknowledge const* get_id_meNBinitiatedSgNBModificationPreparation() const { return get(15); } SgNBModificationConfirm& select_id_sgNBinitiatedSgNBModification() { return set(16); } SgNBModificationConfirm const* get_id_sgNBinitiatedSgNBModification() const { return get(16); } SgNBReleaseRequestAcknowledge& select_id_meNBinitiatedSgNBRelease() { return set(17); } SgNBReleaseRequestAcknowledge const* get_id_meNBinitiatedSgNBRelease() const { return get(17); } SgNBReleaseConfirm& select_id_sgNBinitiatedSgNBRelease() { return set(18); } SgNBReleaseConfirm const* get_id_sgNBinitiatedSgNBRelease() const { return get(18); } SgNBChangeConfirm& select_id_sgNBChange() { return set(19); } SgNBChangeConfirm const* get_id_sgNBChange() const { return get(19); } ENDCX2SetupResponse& select_id_endcX2Setup() { return set(20); } ENDCX2SetupResponse const* get_id_endcX2Setup() const { return get(20); } ENDCConfigurationUpdateAcknowledge& select_id_endcConfigurationUpdate() { return set(21); } ENDCConfigurationUpdateAcknowledge const* get_id_endcConfigurationUpdate() const { return get(21); } ENDCCellActivationResponse& select_id_endcCellActivation() { return set(22); } ENDCCellActivationResponse const* get_id_endcCellActivation() const { return get(22); } ENDCPartialResetConfirm& select_id_endcPartialReset() { return set(23); } ENDCPartialResetConfirm const* get_id_endcPartialReset() const { return get(23); } EUTRANRCellResourceCoordinationResponse& select_id_eUTRANRCellResourceCoordination() { return set(24); } EUTRANRCellResourceCoordinationResponse const* get_id_eUTRANRCellResourceCoordination() const { return get(24); } ENDCX2RemovalResponse& select_id_endcX2Removal() { return set(25); } ENDCX2RemovalResponse const* get_id_endcX2Removal() const { return get(25); } bool is_unknown() const { return type == 46; } void clear() { switch(type) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; case 7: var.destroy(); break; case 8: var.destroy(); break; case 9: var.destroy(); break; case 10: var.destroy(); break; case 11: var.destroy(); break; case 12: var.destroy(); break; case 13: var.destroy(); break; case 14: var.destroy(); break; case 15: var.destroy(); break; case 16: var.destroy(); break; case 17: var.destroy(); break; case 18: var.destroy(); break; case 19: var.destroy(); break; case 20: var.destroy(); break; case 21: var.destroy(); break; case 22: var.destroy(); break; case 23: var.destroy(); break; case 24: var.destroy(); break; case 25: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); v.template operator()(7); v.template operator()(8); v.template operator()(9); v.template operator()(10); v.template operator()(11); v.template operator()(12); v.template operator()(13); v.template operator()(14); v.template operator()(15); v.template operator()(16); v.template operator()(17); v.template operator()(18); v.template operator()(19); v.template operator()(20); v.template operator()(21); v.template operator()(22); v.template operator()(23); v.template operator()(24); v.template operator()(25); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_handoverPreparation()); return true; case 2: v(select_id_reset()); return true; case 3: v(select_id_x2Setup()); return true; case 4: v(select_id_resourceStatusReportingInitiation()); return true; case 5: v(select_id_eNBConfigurationUpdate()); return true; case 6: v(select_id_mobilitySettingsChange()); return true; case 7: v(select_id_cellActivation()); return true; case 8: v(select_id_seNBAdditionPreparation()); return true; case 9: v(select_id_meNBinitiatedSeNBModificationPreparation()); return true; case 10: v(select_id_seNBinitiatedSeNBModification()); return true; case 11: v(select_id_seNBinitiatedSeNBRelease()); return true; case 12: v(select_id_x2Removal()); return true; case 13: v(select_id_retrieveUEContext()); return true; case 14: v(select_id_sgNBAdditionPreparation()); return true; case 15: v(select_id_meNBinitiatedSgNBModificationPreparation()); return true; case 16: v(select_id_sgNBinitiatedSgNBModification()); return true; case 17: v(select_id_meNBinitiatedSgNBRelease()); return true; case 18: v(select_id_sgNBinitiatedSgNBRelease()); return true; case 19: v(select_id_sgNBChange()); return true; case 20: v(select_id_endcX2Setup()); return true; case 21: v(select_id_endcConfigurationUpdate()); return true; case 22: v(select_id_endcCellActivation()); return true; case 23: v(select_id_endcPartialReset()); return true; case 24: v(select_id_eUTRANRCellResourceCoordination()); return true; case 25: v(select_id_endcX2Removal()); return true; case 46: if(type != 46) {clear(); asn::base::set();} type = 46; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 2: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; case 7: v(var.as()); return true; case 8: v(var.as()); return true; case 9: v(var.as()); return true; case 10: v(var.as()); return true; case 11: v(var.as()); return true; case 12: v(var.as()); return true; case 13: v(var.as()); return true; case 14: v(var.as()); return true; case 15: v(var.as()); return true; case 16: v(var.as()); return true; case 17: v(var.as()); return true; case 18: v(var.as()); return true; case 19: v(var.as()); return true; case 20: v(var.as()); return true; case 21: v(var.as()); return true; case 22: v(var.as()); return true; case 23: v(var.as()); return true; case 24: v(var.as()); return true; case 25: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CellActivationResponse)]; char dummy2[sizeof(ENBConfigurationUpdateAcknowledge)]; char dummy3[sizeof(ENDCCellActivationResponse)]; char dummy4[sizeof(ENDCConfigurationUpdateAcknowledge)]; char dummy5[sizeof(ENDCPartialResetConfirm)]; char dummy6[sizeof(ENDCX2RemovalResponse)]; char dummy7[sizeof(ENDCX2SetupResponse)]; char dummy8[sizeof(EUTRANRCellResourceCoordinationResponse)]; char dummy9[sizeof(HandoverRequestAcknowledge)]; char dummy10[sizeof(MobilityChangeAcknowledge)]; char dummy11[sizeof(ResetResponse)]; char dummy12[sizeof(ResourceStatusResponse)]; char dummy13[sizeof(RetrieveUEContextResponse)]; char dummy14[sizeof(SeNBAdditionRequestAcknowledge)]; char dummy15[sizeof(SeNBModificationConfirm)]; char dummy16[sizeof(SeNBModificationRequestAcknowledge)]; char dummy17[sizeof(SeNBReleaseConfirm)]; char dummy18[sizeof(SgNBAdditionRequestAcknowledge)]; char dummy19[sizeof(SgNBChangeConfirm)]; char dummy20[sizeof(SgNBModificationConfirm)]; char dummy21[sizeof(SgNBModificationRequestAcknowledge)]; char dummy22[sizeof(SgNBReleaseConfirm)]; char dummy23[sizeof(SgNBReleaseRequestAcknowledge)]; char dummy24[sizeof(X2RemovalResponse)]; char dummy25[sizeof(X2SetupResponse)]; }; asn::variant var; size_t type {0}; }; struct UnsuccessfulOutcome_t : asn::typefield { ~UnsuccessfulOutcome_t() {clear();} size_t get_index() const {return type;} HandoverPreparationFailure& select_id_handoverPreparation() { return set(1); } HandoverPreparationFailure const* get_id_handoverPreparation() const { return get(1); } X2SetupFailure& select_id_x2Setup() { return set(3); } X2SetupFailure const* get_id_x2Setup() const { return get(3); } ResourceStatusFailure& select_id_resourceStatusReportingInitiation() { return set(4); } ResourceStatusFailure const* get_id_resourceStatusReportingInitiation() const { return get(4); } ENBConfigurationUpdateFailure& select_id_eNBConfigurationUpdate() { return set(5); } ENBConfigurationUpdateFailure const* get_id_eNBConfigurationUpdate() const { return get(5); } MobilityChangeFailure& select_id_mobilitySettingsChange() { return set(6); } MobilityChangeFailure const* get_id_mobilitySettingsChange() const { return get(6); } CellActivationFailure& select_id_cellActivation() { return set(7); } CellActivationFailure const* get_id_cellActivation() const { return get(7); } SeNBAdditionRequestReject& select_id_seNBAdditionPreparation() { return set(8); } SeNBAdditionRequestReject const* get_id_seNBAdditionPreparation() const { return get(8); } SeNBModificationRequestReject& select_id_meNBinitiatedSeNBModificationPreparation() { return set(9); } SeNBModificationRequestReject const* get_id_meNBinitiatedSeNBModificationPreparation() const { return get(9); } SeNBModificationRefuse& select_id_seNBinitiatedSeNBModification() { return set(10); } SeNBModificationRefuse const* get_id_seNBinitiatedSeNBModification() const { return get(10); } X2RemovalFailure& select_id_x2Removal() { return set(12); } X2RemovalFailure const* get_id_x2Removal() const { return get(12); } RetrieveUEContextFailure& select_id_retrieveUEContext() { return set(13); } RetrieveUEContextFailure const* get_id_retrieveUEContext() const { return get(13); } SgNBAdditionRequestReject& select_id_sgNBAdditionPreparation() { return set(14); } SgNBAdditionRequestReject const* get_id_sgNBAdditionPreparation() const { return get(14); } SgNBModificationRequestReject& select_id_meNBinitiatedSgNBModificationPreparation() { return set(15); } SgNBModificationRequestReject const* get_id_meNBinitiatedSgNBModificationPreparation() const { return get(15); } SgNBModificationRefuse& select_id_sgNBinitiatedSgNBModification() { return set(16); } SgNBModificationRefuse const* get_id_sgNBinitiatedSgNBModification() const { return get(16); } SgNBReleaseRequestReject& select_id_meNBinitiatedSgNBRelease() { return set(17); } SgNBReleaseRequestReject const* get_id_meNBinitiatedSgNBRelease() const { return get(17); } SgNBChangeRefuse& select_id_sgNBChange() { return set(19); } SgNBChangeRefuse const* get_id_sgNBChange() const { return get(19); } ENDCX2SetupFailure& select_id_endcX2Setup() { return set(20); } ENDCX2SetupFailure const* get_id_endcX2Setup() const { return get(20); } ENDCConfigurationUpdateFailure& select_id_endcConfigurationUpdate() { return set(21); } ENDCConfigurationUpdateFailure const* get_id_endcConfigurationUpdate() const { return get(21); } ENDCCellActivationFailure& select_id_endcCellActivation() { return set(22); } ENDCCellActivationFailure const* get_id_endcCellActivation() const { return get(22); } ENDCX2RemovalFailure& select_id_endcX2Removal() { return set(25); } ENDCX2RemovalFailure const* get_id_endcX2Removal() const { return get(25); } bool is_unknown() const { return type == 46; } void clear() { switch(type) { case 1: var.destroy(); break; case 3: var.destroy(); break; case 4: var.destroy(); break; case 5: var.destroy(); break; case 6: var.destroy(); break; case 7: var.destroy(); break; case 8: var.destroy(); break; case 9: var.destroy(); break; case 10: var.destroy(); break; case 12: var.destroy(); break; case 13: var.destroy(); break; case 14: var.destroy(); break; case 15: var.destroy(); break; case 16: var.destroy(); break; case 17: var.destroy(); break; case 19: var.destroy(); break; case 20: var.destroy(); break; case 21: var.destroy(); break; case 22: var.destroy(); break; case 25: var.destroy(); break; } type = 0; ref_nested().clear(); } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(3); v.template operator()(4); v.template operator()(5); v.template operator()(6); v.template operator()(7); v.template operator()(8); v.template operator()(9); v.template operator()(10); v.template operator()(12); v.template operator()(13); v.template operator()(14); v.template operator()(15); v.template operator()(16); v.template operator()(17); v.template operator()(19); v.template operator()(20); v.template operator()(21); v.template operator()(22); v.template operator()(25); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: v(select_id_handoverPreparation()); return true; case 3: v(select_id_x2Setup()); return true; case 4: v(select_id_resourceStatusReportingInitiation()); return true; case 5: v(select_id_eNBConfigurationUpdate()); return true; case 6: v(select_id_mobilitySettingsChange()); return true; case 7: v(select_id_cellActivation()); return true; case 8: v(select_id_seNBAdditionPreparation()); return true; case 9: v(select_id_meNBinitiatedSeNBModificationPreparation()); return true; case 10: v(select_id_seNBinitiatedSeNBModification()); return true; case 12: v(select_id_x2Removal()); return true; case 13: v(select_id_retrieveUEContext()); return true; case 14: v(select_id_sgNBAdditionPreparation()); return true; case 15: v(select_id_meNBinitiatedSgNBModificationPreparation()); return true; case 16: v(select_id_sgNBinitiatedSgNBModification()); return true; case 17: v(select_id_meNBinitiatedSgNBRelease()); return true; case 19: v(select_id_sgNBChange()); return true; case 20: v(select_id_endcX2Setup()); return true; case 21: v(select_id_endcConfigurationUpdate()); return true; case 22: v(select_id_endcCellActivation()); return true; case 25: v(select_id_endcX2Removal()); return true; case 46: if(type != 46) {clear(); asn::base::set();} type = 46; return true; } return false; } template bool encode(size_t index, V& v) const { if(index != type) return false; switch(type) { case 1: v(var.as()); return true; case 3: v(var.as()); return true; case 4: v(var.as()); return true; case 5: v(var.as()); return true; case 6: v(var.as()); return true; case 7: v(var.as()); return true; case 8: v(var.as()); return true; case 9: v(var.as()); return true; case 10: v(var.as()); return true; case 12: v(var.as()); return true; case 13: v(var.as()); return true; case 14: v(var.as()); return true; case 15: v(var.as()); return true; case 16: v(var.as()); return true; case 17: v(var.as()); return true; case 19: v(var.as()); return true; case 20: v(var.as()); return true; case 21: v(var.as()); return true; case 22: v(var.as()); return true; case 25: v(var.as()); return true; } return false; } private: template T& set(size_t index) {if(type != index) {clear(); type = index; return var.build();} return var.as();} template T const* get(size_t index) const {if(type == index) {return &var.as();} return nullptr;} union union_type { char dummy1[sizeof(CellActivationFailure)]; char dummy2[sizeof(ENBConfigurationUpdateFailure)]; char dummy3[sizeof(ENDCCellActivationFailure)]; char dummy4[sizeof(ENDCConfigurationUpdateFailure)]; char dummy5[sizeof(ENDCX2RemovalFailure)]; char dummy6[sizeof(ENDCX2SetupFailure)]; char dummy7[sizeof(HandoverPreparationFailure)]; char dummy8[sizeof(MobilityChangeFailure)]; char dummy9[sizeof(ResourceStatusFailure)]; char dummy10[sizeof(RetrieveUEContextFailure)]; char dummy11[sizeof(SeNBAdditionRequestReject)]; char dummy12[sizeof(SeNBModificationRefuse)]; char dummy13[sizeof(SeNBModificationRequestReject)]; char dummy14[sizeof(SgNBAdditionRequestReject)]; char dummy15[sizeof(SgNBChangeRefuse)]; char dummy16[sizeof(SgNBModificationRefuse)]; char dummy17[sizeof(SgNBModificationRequestReject)]; char dummy18[sizeof(SgNBReleaseRequestReject)]; char dummy19[sizeof(X2RemovalFailure)]; char dummy20[sizeof(X2SetupFailure)]; }; asn::variant var; size_t type {0}; }; struct procedureCode_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 46; } void clear() {type = 0;} void select_id_handoverPreparation() { set(id_handoverPreparation); type=1;} void select_id_reset() { set(id_reset); type=2;} void select_id_x2Setup() { set(id_x2Setup); type=3;} void select_id_resourceStatusReportingInitiation() { set(id_resourceStatusReportingInitiation); type=4;} void select_id_eNBConfigurationUpdate() { set(id_eNBConfigurationUpdate); type=5;} void select_id_mobilitySettingsChange() { set(id_mobilitySettingsChange); type=6;} void select_id_cellActivation() { set(id_cellActivation); type=7;} void select_id_seNBAdditionPreparation() { set(id_seNBAdditionPreparation); type=8;} void select_id_meNBinitiatedSeNBModificationPreparation() { set(id_meNBinitiatedSeNBModificationPreparation); type=9;} void select_id_seNBinitiatedSeNBModification() { set(id_seNBinitiatedSeNBModification); type=10;} void select_id_seNBinitiatedSeNBRelease() { set(id_seNBinitiatedSeNBRelease); type=11;} void select_id_x2Removal() { set(id_x2Removal); type=12;} void select_id_retrieveUEContext() { set(id_retrieveUEContext); type=13;} void select_id_sgNBAdditionPreparation() { set(id_sgNBAdditionPreparation); type=14;} void select_id_meNBinitiatedSgNBModificationPreparation() { set(id_meNBinitiatedSgNBModificationPreparation); type=15;} void select_id_sgNBinitiatedSgNBModification() { set(id_sgNBinitiatedSgNBModification); type=16;} void select_id_meNBinitiatedSgNBRelease() { set(id_meNBinitiatedSgNBRelease); type=17;} void select_id_sgNBinitiatedSgNBRelease() { set(id_sgNBinitiatedSgNBRelease); type=18;} void select_id_sgNBChange() { set(id_sgNBChange); type=19;} void select_id_endcX2Setup() { set(id_endcX2Setup); type=20;} void select_id_endcConfigurationUpdate() { set(id_endcConfigurationUpdate); type=21;} void select_id_endcCellActivation() { set(id_endcCellActivation); type=22;} void select_id_endcPartialReset() { set(id_endcPartialReset); type=23;} void select_id_eUTRANRCellResourceCoordination() { set(id_eUTRANRCellResourceCoordination); type=24;} void select_id_endcX2Removal() { set(id_endcX2Removal); type=25;} void select_id_snStatusTransfer() { set(id_snStatusTransfer); type=26;} void select_id_uEContextRelease() { set(id_uEContextRelease); type=27;} void select_id_handoverCancel() { set(id_handoverCancel); type=28;} void select_id_errorIndication() { set(id_errorIndication); type=29;} void select_id_resourceStatusReporting() { set(id_resourceStatusReporting); type=30;} void select_id_loadIndication() { set(id_loadIndication); type=31;} void select_id_privateMessage() { set(id_privateMessage); type=32;} void select_id_rLFIndication() { set(id_rLFIndication); type=33;} void select_id_handoverReport() { set(id_handoverReport); type=34;} void select_id_x2Release() { set(id_x2Release); type=35;} void select_id_x2APMessageTransfer() { set(id_x2APMessageTransfer); type=36;} void select_id_seNBReconfigurationCompletion() { set(id_seNBReconfigurationCompletion); type=37;} void select_id_meNBinitiatedSeNBRelease() { set(id_meNBinitiatedSeNBRelease); type=38;} void select_id_seNBCounterCheck() { set(id_seNBCounterCheck); type=39;} void select_id_sgNBReconfigurationCompletion() { set(id_sgNBReconfigurationCompletion); type=40;} void select_id_sgNBCounterCheck() { set(id_sgNBCounterCheck); type=41;} void select_id_rRCTransfer() { set(id_rRCTransfer); type=42;} void select_id_secondaryRATDataUsageReport() { set(id_secondaryRATDataUsageReport); type=43;} void select_id_SgNBActivityNotification() { set(id_SgNBActivityNotification); type=44;} void select_id_dataForwardingAddressIndication() { set(id_dataForwardingAddressIndication); type=45;} X2AP_ELEMENTARY_PROCEDURE::procedureCode_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(id_handoverPreparation)) { type = 1; return true; } else if(equal(id_reset)) { type = 2; return true; } else if(equal(id_x2Setup)) { type = 3; return true; } else if(equal(id_resourceStatusReportingInitiation)) { type = 4; return true; } else if(equal(id_eNBConfigurationUpdate)) { type = 5; return true; } else if(equal(id_mobilitySettingsChange)) { type = 6; return true; } else if(equal(id_cellActivation)) { type = 7; return true; } else if(equal(id_seNBAdditionPreparation)) { type = 8; return true; } else if(equal(id_meNBinitiatedSeNBModificationPreparation)) { type = 9; return true; } else if(equal(id_seNBinitiatedSeNBModification)) { type = 10; return true; } else if(equal(id_seNBinitiatedSeNBRelease)) { type = 11; return true; } else if(equal(id_x2Removal)) { type = 12; return true; } else if(equal(id_retrieveUEContext)) { type = 13; return true; } else if(equal(id_sgNBAdditionPreparation)) { type = 14; return true; } else if(equal(id_meNBinitiatedSgNBModificationPreparation)) { type = 15; return true; } else if(equal(id_sgNBinitiatedSgNBModification)) { type = 16; return true; } else if(equal(id_meNBinitiatedSgNBRelease)) { type = 17; return true; } else if(equal(id_sgNBinitiatedSgNBRelease)) { type = 18; return true; } else if(equal(id_sgNBChange)) { type = 19; return true; } else if(equal(id_endcX2Setup)) { type = 20; return true; } else if(equal(id_endcConfigurationUpdate)) { type = 21; return true; } else if(equal(id_endcCellActivation)) { type = 22; return true; } else if(equal(id_endcPartialReset)) { type = 23; return true; } else if(equal(id_eUTRANRCellResourceCoordination)) { type = 24; return true; } else if(equal(id_endcX2Removal)) { type = 25; return true; } else if(equal(id_snStatusTransfer)) { type = 26; return true; } else if(equal(id_uEContextRelease)) { type = 27; return true; } else if(equal(id_handoverCancel)) { type = 28; return true; } else if(equal(id_errorIndication)) { type = 29; return true; } else if(equal(id_resourceStatusReporting)) { type = 30; return true; } else if(equal(id_loadIndication)) { type = 31; return true; } else if(equal(id_privateMessage)) { type = 32; return true; } else if(equal(id_rLFIndication)) { type = 33; return true; } else if(equal(id_handoverReport)) { type = 34; return true; } else if(equal(id_x2Release)) { type = 35; return true; } else if(equal(id_x2APMessageTransfer)) { type = 36; return true; } else if(equal(id_seNBReconfigurationCompletion)) { type = 37; return true; } else if(equal(id_meNBinitiatedSeNBRelease)) { type = 38; return true; } else if(equal(id_seNBCounterCheck)) { type = 39; return true; } else if(equal(id_sgNBReconfigurationCompletion)) { type = 40; return true; } else if(equal(id_sgNBCounterCheck)) { type = 41; return true; } else if(equal(id_rRCTransfer)) { type = 42; return true; } else if(equal(id_secondaryRATDataUsageReport)) { type = 43; return true; } else if(equal(id_SgNBActivityNotification)) { type = 44; return true; } else if(equal(id_dataForwardingAddressIndication)) { type = 45; return true; } else { type = 46; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(id_handoverPreparation);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(id_reset);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(id_x2Setup);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(id_resourceStatusReportingInitiation);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(id_eNBConfigurationUpdate);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(id_mobilitySettingsChange);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(id_cellActivation);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(id_seNBAdditionPreparation);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(id_meNBinitiatedSeNBModificationPreparation);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(id_seNBinitiatedSeNBModification);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(id_seNBinitiatedSeNBRelease);} return false; case 12: type = 12; if(v(ref_nested())) { return equal(id_x2Removal);} return false; case 13: type = 13; if(v(ref_nested())) { return equal(id_retrieveUEContext);} return false; case 14: type = 14; if(v(ref_nested())) { return equal(id_sgNBAdditionPreparation);} return false; case 15: type = 15; if(v(ref_nested())) { return equal(id_meNBinitiatedSgNBModificationPreparation);} return false; case 16: type = 16; if(v(ref_nested())) { return equal(id_sgNBinitiatedSgNBModification);} return false; case 17: type = 17; if(v(ref_nested())) { return equal(id_meNBinitiatedSgNBRelease);} return false; case 18: type = 18; if(v(ref_nested())) { return equal(id_sgNBinitiatedSgNBRelease);} return false; case 19: type = 19; if(v(ref_nested())) { return equal(id_sgNBChange);} return false; case 20: type = 20; if(v(ref_nested())) { return equal(id_endcX2Setup);} return false; case 21: type = 21; if(v(ref_nested())) { return equal(id_endcConfigurationUpdate);} return false; case 22: type = 22; if(v(ref_nested())) { return equal(id_endcCellActivation);} return false; case 23: type = 23; if(v(ref_nested())) { return equal(id_endcPartialReset);} return false; case 24: type = 24; if(v(ref_nested())) { return equal(id_eUTRANRCellResourceCoordination);} return false; case 25: type = 25; if(v(ref_nested())) { return equal(id_endcX2Removal);} return false; case 26: type = 26; if(v(ref_nested())) { return equal(id_snStatusTransfer);} return false; case 27: type = 27; if(v(ref_nested())) { return equal(id_uEContextRelease);} return false; case 28: type = 28; if(v(ref_nested())) { return equal(id_handoverCancel);} return false; case 29: type = 29; if(v(ref_nested())) { return equal(id_errorIndication);} return false; case 30: type = 30; if(v(ref_nested())) { return equal(id_resourceStatusReporting);} return false; case 31: type = 31; if(v(ref_nested())) { return equal(id_loadIndication);} return false; case 32: type = 32; if(v(ref_nested())) { return equal(id_privateMessage);} return false; case 33: type = 33; if(v(ref_nested())) { return equal(id_rLFIndication);} return false; case 34: type = 34; if(v(ref_nested())) { return equal(id_handoverReport);} return false; case 35: type = 35; if(v(ref_nested())) { return equal(id_x2Release);} return false; case 36: type = 36; if(v(ref_nested())) { return equal(id_x2APMessageTransfer);} return false; case 37: type = 37; if(v(ref_nested())) { return equal(id_seNBReconfigurationCompletion);} return false; case 38: type = 38; if(v(ref_nested())) { return equal(id_meNBinitiatedSeNBRelease);} return false; case 39: type = 39; if(v(ref_nested())) { return equal(id_seNBCounterCheck);} return false; case 40: type = 40; if(v(ref_nested())) { return equal(id_sgNBReconfigurationCompletion);} return false; case 41: type = 41; if(v(ref_nested())) { return equal(id_sgNBCounterCheck);} return false; case 42: type = 42; if(v(ref_nested())) { return equal(id_rRCTransfer);} return false; case 43: type = 43; if(v(ref_nested())) { return equal(id_secondaryRATDataUsageReport);} return false; case 44: type = 44; if(v(ref_nested())) { return equal(id_SgNBActivityNotification);} return false; case 45: type = 45; if(v(ref_nested())) { return equal(id_dataForwardingAddressIndication);} return false; case 46: type = 46; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; struct criticality_t : asn::fixedtypefield { size_t get_index() const {return type;} bool is_unknown() const { return type == 46; } void clear() {type = 0;} void select_id_handoverPreparation() { set(reject); type=1;} void select_id_reset() { set(reject); type=2;} void select_id_x2Setup() { set(reject); type=3;} void select_id_resourceStatusReportingInitiation() { set(reject); type=4;} void select_id_eNBConfigurationUpdate() { set(reject); type=5;} void select_id_mobilitySettingsChange() { set(reject); type=6;} void select_id_cellActivation() { set(reject); type=7;} void select_id_seNBAdditionPreparation() { set(reject); type=8;} void select_id_meNBinitiatedSeNBModificationPreparation() { set(reject); type=9;} void select_id_seNBinitiatedSeNBModification() { set(reject); type=10;} void select_id_seNBinitiatedSeNBRelease() { set(reject); type=11;} void select_id_x2Removal() { set(reject); type=12;} void select_id_retrieveUEContext() { set(reject); type=13;} void select_id_sgNBAdditionPreparation() { set(reject); type=14;} void select_id_meNBinitiatedSgNBModificationPreparation() { set(reject); type=15;} void select_id_sgNBinitiatedSgNBModification() { set(reject); type=16;} void select_id_meNBinitiatedSgNBRelease() { set(ignore); type=17;} void select_id_sgNBinitiatedSgNBRelease() { set(reject); type=18;} void select_id_sgNBChange() { set(reject); type=19;} void select_id_endcX2Setup() { set(reject); type=20;} void select_id_endcConfigurationUpdate() { set(reject); type=21;} void select_id_endcCellActivation() { set(reject); type=22;} void select_id_endcPartialReset() { set(reject); type=23;} void select_id_eUTRANRCellResourceCoordination() { set(reject); type=24;} void select_id_endcX2Removal() { set(reject); type=25;} void select_id_snStatusTransfer() { set(ignore); type=26;} void select_id_uEContextRelease() { set(ignore); type=27;} void select_id_handoverCancel() { set(ignore); type=28;} void select_id_errorIndication() { set(ignore); type=29;} void select_id_resourceStatusReporting() { set(ignore); type=30;} void select_id_loadIndication() { set(ignore); type=31;} void select_id_privateMessage() { set(ignore); type=32;} void select_id_rLFIndication() { set(ignore); type=33;} void select_id_handoverReport() { set(ignore); type=34;} void select_id_x2Release() { set(reject); type=35;} void select_id_x2APMessageTransfer() { set(reject); type=36;} void select_id_seNBReconfigurationCompletion() { set(ignore); type=37;} void select_id_meNBinitiatedSeNBRelease() { set(ignore); type=38;} void select_id_seNBCounterCheck() { set(reject); type=39;} void select_id_sgNBReconfigurationCompletion() { set(ignore); type=40;} void select_id_sgNBCounterCheck() { set(reject); type=41;} void select_id_rRCTransfer() { set(reject); type=42;} void select_id_secondaryRATDataUsageReport() { set(reject); type=43;} void select_id_SgNBActivityNotification() { set(reject); type=44;} void select_id_dataForwardingAddressIndication() { set(ignore); type=45;} X2AP_ELEMENTARY_PROCEDURE::criticality_t const& ref_value() const {return ref_nested();} template bool decode(V& v) { clear(); if(!v(ref_nested())) return false; if(equal(reject)) { type = 1; return true; } else if(equal(reject)) { type = 2; return true; } else if(equal(reject)) { type = 3; return true; } else if(equal(reject)) { type = 4; return true; } else if(equal(reject)) { type = 5; return true; } else if(equal(reject)) { type = 6; return true; } else if(equal(reject)) { type = 7; return true; } else if(equal(reject)) { type = 8; return true; } else if(equal(reject)) { type = 9; return true; } else if(equal(reject)) { type = 10; return true; } else if(equal(reject)) { type = 11; return true; } else if(equal(reject)) { type = 12; return true; } else if(equal(reject)) { type = 13; return true; } else if(equal(reject)) { type = 14; return true; } else if(equal(reject)) { type = 15; return true; } else if(equal(reject)) { type = 16; return true; } else if(equal(ignore)) { type = 17; return true; } else if(equal(reject)) { type = 18; return true; } else if(equal(reject)) { type = 19; return true; } else if(equal(reject)) { type = 20; return true; } else if(equal(reject)) { type = 21; return true; } else if(equal(reject)) { type = 22; return true; } else if(equal(reject)) { type = 23; return true; } else if(equal(reject)) { type = 24; return true; } else if(equal(reject)) { type = 25; return true; } else if(equal(ignore)) { type = 26; return true; } else if(equal(ignore)) { type = 27; return true; } else if(equal(ignore)) { type = 28; return true; } else if(equal(ignore)) { type = 29; return true; } else if(equal(ignore)) { type = 30; return true; } else if(equal(ignore)) { type = 31; return true; } else if(equal(ignore)) { type = 32; return true; } else if(equal(ignore)) { type = 33; return true; } else if(equal(ignore)) { type = 34; return true; } else if(equal(reject)) { type = 35; return true; } else if(equal(reject)) { type = 36; return true; } else if(equal(ignore)) { type = 37; return true; } else if(equal(ignore)) { type = 38; return true; } else if(equal(reject)) { type = 39; return true; } else if(equal(ignore)) { type = 40; return true; } else if(equal(reject)) { type = 41; return true; } else if(equal(reject)) { type = 42; return true; } else if(equal(reject)) { type = 43; return true; } else if(equal(reject)) { type = 44; return true; } else if(equal(ignore)) { type = 45; return true; } else { type = 46; return true;} return false; } template bool encode(V& v) const { return v(ref_nested()); } protected: template bool decode(size_t index, V& v) { clear(); switch(index) { case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false; case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false; case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false; case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false; case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false; case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false; case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false; case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false; case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false; case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false; case 11: type = 11; if(v(ref_nested())) { return equal(reject);} return false; case 12: type = 12; if(v(ref_nested())) { return equal(reject);} return false; case 13: type = 13; if(v(ref_nested())) { return equal(reject);} return false; case 14: type = 14; if(v(ref_nested())) { return equal(reject);} return false; case 15: type = 15; if(v(ref_nested())) { return equal(reject);} return false; case 16: type = 16; if(v(ref_nested())) { return equal(reject);} return false; case 17: type = 17; if(v(ref_nested())) { return equal(ignore);} return false; case 18: type = 18; if(v(ref_nested())) { return equal(reject);} return false; case 19: type = 19; if(v(ref_nested())) { return equal(reject);} return false; case 20: type = 20; if(v(ref_nested())) { return equal(reject);} return false; case 21: type = 21; if(v(ref_nested())) { return equal(reject);} return false; case 22: type = 22; if(v(ref_nested())) { return equal(reject);} return false; case 23: type = 23; if(v(ref_nested())) { return equal(reject);} return false; case 24: type = 24; if(v(ref_nested())) { return equal(reject);} return false; case 25: type = 25; if(v(ref_nested())) { return equal(reject);} return false; case 26: type = 26; if(v(ref_nested())) { return equal(ignore);} return false; case 27: type = 27; if(v(ref_nested())) { return equal(ignore);} return false; case 28: type = 28; if(v(ref_nested())) { return equal(ignore);} return false; case 29: type = 29; if(v(ref_nested())) { return equal(ignore);} return false; case 30: type = 30; if(v(ref_nested())) { return equal(ignore);} return false; case 31: type = 31; if(v(ref_nested())) { return equal(ignore);} return false; case 32: type = 32; if(v(ref_nested())) { return equal(ignore);} return false; case 33: type = 33; if(v(ref_nested())) { return equal(ignore);} return false; case 34: type = 34; if(v(ref_nested())) { return equal(ignore);} return false; case 35: type = 35; if(v(ref_nested())) { return equal(reject);} return false; case 36: type = 36; if(v(ref_nested())) { return equal(reject);} return false; case 37: type = 37; if(v(ref_nested())) { return equal(ignore);} return false; case 38: type = 38; if(v(ref_nested())) { return equal(ignore);} return false; case 39: type = 39; if(v(ref_nested())) { return equal(reject);} return false; case 40: type = 40; if(v(ref_nested())) { return equal(ignore);} return false; case 41: type = 41; if(v(ref_nested())) { return equal(reject);} return false; case 42: type = 42; if(v(ref_nested())) { return equal(reject);} return false; case 43: type = 43; if(v(ref_nested())) { return equal(reject);} return false; case 44: type = 44; if(v(ref_nested())) { return equal(reject);} return false; case 45: type = 45; if(v(ref_nested())) { return equal(ignore);} return false; case 46: type = 46; return v(ref_nested()); ref_nested().clear(); } return false; } template bool encode(size_t index, V& v) const { if(index != type) {return false;} return v(ref_nested()); } private: size_t type {0}; }; }; /* InitiatingMessage ::= SEQUENCE { procedureCode X2AP-ELEMENTARY-PROCEDURE.&procedureCode ({X2AP-ELEMENTARY-PROCEDURES}), criticality X2AP-ELEMENTARY-PROCEDURE.&criticality ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), value X2AP-ELEMENTARY-PROCEDURE.&InitiatingMessage ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) } */ struct InitiatingMessage : asn::sequence<3, 0, false, 0> { static constexpr const char* name() {return "InitiatingMessage";} using parent_t = asn::sequence<3, 0, false, 0>; struct procedureCode_t : X2AP_ELEMENTARY_PROCEDURES::procedureCode_t { static constexpr const char* name() {return "procedureCode_t";} using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::procedureCode_t; template bool decode(V& v, InitiatingMessage const& c) { return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); }; template bool encode(V& v, InitiatingMessage const& c) const { return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); }; }; procedureCode_t& ref_procedureCode() {return procedureCode;} procedureCode_t const& ref_procedureCode() const {return procedureCode;} struct criticality_t : X2AP_ELEMENTARY_PROCEDURES::criticality_t { static constexpr const char* name() {return "criticality_t";} using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::criticality_t; template bool decode(V& v, InitiatingMessage const& c) { return X2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); }; template bool encode(V& v, InitiatingMessage const& c) const { return X2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); }; }; criticality_t& ref_criticality() {return criticality;} criticality_t const& ref_criticality() const {return criticality;} struct value_t : X2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t { static constexpr const char* name() {return "value_t";} using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t; template bool decode(V& v, InitiatingMessage const& c) { return X2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t::decode(c.procedureCode.get_index(), v); }; template bool encode(V& v, InitiatingMessage const& c) const { return X2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t::encode(c.procedureCode.get_index(), v); }; }; value_t& ref_value() {return value;} value_t const& ref_value() const {return value;} template void decode(V& v) { v(procedureCode); v(criticality); v(value); }; template void encode(V& v) const { v(procedureCode); v(criticality); v(value); }; void clear() { procedureCode.clear(); criticality.clear(); value.clear(); }; private: procedureCode_t procedureCode; criticality_t criticality; value_t value; }; /* SuccessfulOutcome ::= SEQUENCE { procedureCode X2AP-ELEMENTARY-PROCEDURE.&procedureCode ({X2AP-ELEMENTARY-PROCEDURES}), criticality X2AP-ELEMENTARY-PROCEDURE.&criticality ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), value X2AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) } */ struct SuccessfulOutcome : asn::sequence<3, 0, false, 0> { static constexpr const char* name() {return "SuccessfulOutcome";} using parent_t = asn::sequence<3, 0, false, 0>; struct procedureCode_t : X2AP_ELEMENTARY_PROCEDURES::procedureCode_t { static constexpr const char* name() {return "procedureCode_t";} using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::procedureCode_t; template bool decode(V& v, SuccessfulOutcome const& c) { return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); }; template bool encode(V& v, SuccessfulOutcome const& c) const { return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); }; }; procedureCode_t& ref_procedureCode() {return procedureCode;} procedureCode_t const& ref_procedureCode() const {return procedureCode;} struct criticality_t : X2AP_ELEMENTARY_PROCEDURES::criticality_t { static constexpr const char* name() {return "criticality_t";} using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::criticality_t; template bool decode(V& v, SuccessfulOutcome const& c) { return X2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); }; template bool encode(V& v, SuccessfulOutcome const& c) const { return X2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); }; }; criticality_t& ref_criticality() {return criticality;} criticality_t const& ref_criticality() const {return criticality;} struct value_t : X2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t { static constexpr const char* name() {return "value_t";} using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t; template bool decode(V& v, SuccessfulOutcome const& c) { return X2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t::decode(c.procedureCode.get_index(), v); }; template bool encode(V& v, SuccessfulOutcome const& c) const { return X2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t::encode(c.procedureCode.get_index(), v); }; }; value_t& ref_value() {return value;} value_t const& ref_value() const {return value;} template void decode(V& v) { v(procedureCode); v(criticality); v(value); }; template void encode(V& v) const { v(procedureCode); v(criticality); v(value); }; void clear() { procedureCode.clear(); criticality.clear(); value.clear(); }; private: procedureCode_t procedureCode; criticality_t criticality; value_t value; }; /* UnsuccessfulOutcome ::= SEQUENCE { procedureCode X2AP-ELEMENTARY-PROCEDURE.&procedureCode ({X2AP-ELEMENTARY-PROCEDURES}), criticality X2AP-ELEMENTARY-PROCEDURE.&criticality ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}), value X2AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}) } */ struct UnsuccessfulOutcome : asn::sequence<3, 0, false, 0> { static constexpr const char* name() {return "UnsuccessfulOutcome";} using parent_t = asn::sequence<3, 0, false, 0>; struct procedureCode_t : X2AP_ELEMENTARY_PROCEDURES::procedureCode_t { static constexpr const char* name() {return "procedureCode_t";} using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::procedureCode_t; template bool decode(V& v, UnsuccessfulOutcome const& c) { return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v); }; template bool encode(V& v, UnsuccessfulOutcome const& c) const { return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v); }; }; procedureCode_t& ref_procedureCode() {return procedureCode;} procedureCode_t const& ref_procedureCode() const {return procedureCode;} struct criticality_t : X2AP_ELEMENTARY_PROCEDURES::criticality_t { static constexpr const char* name() {return "criticality_t";} using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::criticality_t; template bool decode(V& v, UnsuccessfulOutcome const& c) { return X2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v); }; template bool encode(V& v, UnsuccessfulOutcome const& c) const { return X2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v); }; }; criticality_t& ref_criticality() {return criticality;} criticality_t const& ref_criticality() const {return criticality;} struct value_t : X2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t { static constexpr const char* name() {return "value_t";} using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t; template bool decode(V& v, UnsuccessfulOutcome const& c) { return X2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t::decode(c.procedureCode.get_index(), v); }; template bool encode(V& v, UnsuccessfulOutcome const& c) const { return X2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t::encode(c.procedureCode.get_index(), v); }; }; value_t& ref_value() {return value;} value_t const& ref_value() const {return value;} template void decode(V& v) { v(procedureCode); v(criticality); v(value); }; template void encode(V& v) const { v(procedureCode); v(criticality); v(value); }; void clear() { procedureCode.clear(); criticality.clear(); value.clear(); }; private: procedureCode_t procedureCode; criticality_t criticality; value_t value; }; /* X2AP-PDU ::= CHOICE { initiatingMessage InitiatingMessage, successfulOutcome SuccessfulOutcome, unsuccessfulOutcome UnsuccessfulOutcome, ... } */ struct X2AP_PDU : asn::choice<3, 0, true> { static constexpr const char* name() {return "X2AP-PDU";} using parent_t = asn::choice<3, 0, true>; index_type get_index() const {return index;} bool is_unknown() const {return index == 4;} void set_unknown() { set_index(4); } ~X2AP_PDU() {clear();} struct initiatingMessage_t : InitiatingMessage { static constexpr const char* name() {return "initiatingMessage_t";} using parent_t = InitiatingMessage; }; struct successfulOutcome_t : SuccessfulOutcome { static constexpr const char* name() {return "successfulOutcome_t";} using parent_t = SuccessfulOutcome; }; struct unsuccessfulOutcome_t : UnsuccessfulOutcome { static constexpr const char* name() {return "unsuccessfulOutcome_t";} using parent_t = UnsuccessfulOutcome; }; void clear() { switch(get_index()) { case 1: var.destroy(); break; case 2: var.destroy(); break; case 3: var.destroy(); break; } index = 0; base::clear(); } template bool decode(size_t idx, V& v) { clear(); switch(idx) { case 1: set_index(1); return v(var.build()); case 2: set_index(2); return v(var.build()); case 3: set_index(3); return v(var.build()); } return false; } template bool encode(V& v) const { switch(get_index()) { case 1: return v(var.as()); case 2: return v(var.as()); case 3: return v(var.as()); } return false; } template static inline void enumerate(V& v) { v.template operator()(1); v.template operator()(2); v.template operator()(3); } initiatingMessage_t& select_initiatingMessage() { if(get_index() != 1) { clear(); set_index(1); return var.build();} return var.as();} initiatingMessage_t const* get_initiatingMessage() const { if(get_index() == 1) { return &var.as();} return nullptr; } successfulOutcome_t& select_successfulOutcome() { if(get_index() != 2) { clear(); set_index(2); return var.build();} return var.as();} successfulOutcome_t const* get_successfulOutcome() const { if(get_index() == 2) { return &var.as();} return nullptr; } unsuccessfulOutcome_t& select_unsuccessfulOutcome() { if(get_index() != 3) { clear(); set_index(3); return var.build();} return var.as();} unsuccessfulOutcome_t const* get_unsuccessfulOutcome() const { if(get_index() == 3) { return &var.as();} return nullptr; } private: void set_index(index_type i) {index = i; base::set();} union union_type { char dummy1[sizeof(initiatingMessage_t)]; char dummy2[sizeof(successfulOutcome_t)]; char dummy3[sizeof(unsuccessfulOutcome_t)]; }; asn::variant var; index_type index {0}; };