X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?p=sim%2Fe2-interface.git;a=blobdiff_plain;f=e2sim%2Fe2apv1sim%2Fe2sim%2Fsrc%2FASN1%2Fgenerated%2FX2AP-PDU-Descriptions.hpp;fp=e2sim%2Fe2apv1sim%2Fe2sim%2Fsrc%2FASN1%2Fgenerated%2FX2AP-PDU-Descriptions.hpp;h=5fbef0465f227b1339b8c3e76c7123ec0ceb4859;hp=0000000000000000000000000000000000000000;hb=3ebf932d23dcbec9ed19f4a51f9d00a0a54f5124;hpb=6896318f2b4ff01b4a88b16019c3dc93b0b693f5 diff --git a/e2sim/e2apv1sim/e2sim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp b/e2sim/e2apv1sim/e2sim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp new file mode 100644 index 0000000..5fbef04 --- /dev/null +++ b/e2sim/e2apv1sim/e2sim/src/ASN1/generated/X2AP-PDU-Descriptions.hpp @@ -0,0 +1,1537 @@ +/***************************************************************************** +# 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}; +};