Enhanced SIM for E2AP v1 for TS UC
[sim/e2-interface.git] / e2sim / e2apv1sim / src / ASN1 / generated / X2AP-PDU-Descriptions.hpp
1 /*****************************************************************************
2 # Copyright 2019 AT&T Intellectual Property                                  *
3 #                                                                            *
4 # Licensed under the Apache License, Version 2.0 (the "License");            *
5 # you may not use this file except in compliance with the License.           *
6 # You may obtain a copy of the License at                                    *
7 #                                                                            *
8 #      http://www.apache.org/licenses/LICENSE-2.0                            *
9 #                                                                            *
10 # Unless required by applicable law or agreed to in writing, software        *
11 # distributed under the License is distributed on an "AS IS" BASIS,          *
12 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   *
13 # See the License for the specific language governing permissions and        *
14 # limitations under the License.                                             *
15 #                                                                            *
16 ******************************************************************************/
17
18 #pragma once
19
20 #include "asn/asn.hpp"
21 static_assert(ASN_API_VERSION_MAJOR == 5, "re-generate the ASN parser's code using 'make regen-asn' (do not use -j option)");
22
23 #include "X2AP-CommonDataTypes.hpp"
24 #include "X2AP-PDU-Contents.hpp"
25 #include "X2AP-Constants.hpp"
26
27 /*
28 X2AP-ELEMENTARY-PROCEDURE ::= CLASS {
29         &InitiatingMessage                              ,
30         &SuccessfulOutcome                              OPTIONAL,
31         &UnsuccessfulOutcome                            OPTIONAL,
32         &procedureCode                  ProcedureCode   UNIQUE,
33         &criticality                    Criticality     DEFAULT ignore
34 }
35 WITH SYNTAX {
36         INITIATING MESSAGE              &InitiatingMessage
37         [SUCCESSFUL OUTCOME             &SuccessfulOutcome]
38         [UNSUCCESSFUL OUTCOME           &UnsuccessfulOutcome]
39         PROCEDURE CODE                  &procedureCode
40         [CRITICALITY                    &criticality]
41 }
42 */
43
44 struct X2AP_ELEMENTARY_PROCEDURE
45 {
46         struct procedureCode_t : ProcedureCode
47         {
48                 static constexpr const char* name() {return "procedureCode_t";}
49                 using parent_t = ProcedureCode;
50
51         };
52         struct criticality_t : Criticality
53         {
54                 static constexpr const char* name() {return "criticality_t";}
55                 using parent_t = Criticality;
56
57         };
58
59 };
60 /*
61 X2AP-ELEMENTARY-PROCEDURES X2AP-ELEMENTARY-PROCEDURE ::= {
62         X2AP-ELEMENTARY-PROCEDURES-CLASS-1                      |
63         X2AP-ELEMENTARY-PROCEDURES-CLASS-2                      ,
64         ...
65 }
66 */
67
68 struct X2AP_ELEMENTARY_PROCEDURES
69 {
70         struct InitiatingMessage_t : asn::typefield<true>
71         {
72                 ~InitiatingMessage_t()  {clear();}
73                 size_t get_index() const {return type;}
74                 HandoverRequest& select_id_handoverPreparation() { return set<HandoverRequest>(1); }
75                 HandoverRequest const* get_id_handoverPreparation() const { return get<HandoverRequest>(1); }
76                 ResetRequest& select_id_reset() { return set<ResetRequest>(2); }
77                 ResetRequest const* get_id_reset() const { return get<ResetRequest>(2); }
78                 X2SetupRequest& select_id_x2Setup() { return set<X2SetupRequest>(3); }
79                 X2SetupRequest const* get_id_x2Setup() const { return get<X2SetupRequest>(3); }
80                 ResourceStatusRequest& select_id_resourceStatusReportingInitiation() { return set<ResourceStatusRequest>(4); }
81                 ResourceStatusRequest const* get_id_resourceStatusReportingInitiation() const { return get<ResourceStatusRequest>(4); }
82                 ENBConfigurationUpdate& select_id_eNBConfigurationUpdate() { return set<ENBConfigurationUpdate>(5); }
83                 ENBConfigurationUpdate const* get_id_eNBConfigurationUpdate() const { return get<ENBConfigurationUpdate>(5); }
84                 MobilityChangeRequest& select_id_mobilitySettingsChange() { return set<MobilityChangeRequest>(6); }
85                 MobilityChangeRequest const* get_id_mobilitySettingsChange() const { return get<MobilityChangeRequest>(6); }
86                 CellActivationRequest& select_id_cellActivation() { return set<CellActivationRequest>(7); }
87                 CellActivationRequest const* get_id_cellActivation() const { return get<CellActivationRequest>(7); }
88                 SeNBAdditionRequest& select_id_seNBAdditionPreparation() { return set<SeNBAdditionRequest>(8); }
89                 SeNBAdditionRequest const* get_id_seNBAdditionPreparation() const { return get<SeNBAdditionRequest>(8); }
90                 SeNBModificationRequest& select_id_meNBinitiatedSeNBModificationPreparation() { return set<SeNBModificationRequest>(9); }
91                 SeNBModificationRequest const* get_id_meNBinitiatedSeNBModificationPreparation() const { return get<SeNBModificationRequest>(9); }
92                 SeNBModificationRequired& select_id_seNBinitiatedSeNBModification() { return set<SeNBModificationRequired>(10); }
93                 SeNBModificationRequired const* get_id_seNBinitiatedSeNBModification() const { return get<SeNBModificationRequired>(10); }
94                 SeNBReleaseRequired& select_id_seNBinitiatedSeNBRelease() { return set<SeNBReleaseRequired>(11); }
95                 SeNBReleaseRequired const* get_id_seNBinitiatedSeNBRelease() const { return get<SeNBReleaseRequired>(11); }
96                 X2RemovalRequest& select_id_x2Removal() { return set<X2RemovalRequest>(12); }
97                 X2RemovalRequest const* get_id_x2Removal() const { return get<X2RemovalRequest>(12); }
98                 RetrieveUEContextRequest& select_id_retrieveUEContext() { return set<RetrieveUEContextRequest>(13); }
99                 RetrieveUEContextRequest const* get_id_retrieveUEContext() const { return get<RetrieveUEContextRequest>(13); }
100                 SgNBAdditionRequest& select_id_sgNBAdditionPreparation() { return set<SgNBAdditionRequest>(14); }
101                 SgNBAdditionRequest const* get_id_sgNBAdditionPreparation() const { return get<SgNBAdditionRequest>(14); }
102                 SgNBModificationRequest& select_id_meNBinitiatedSgNBModificationPreparation() { return set<SgNBModificationRequest>(15); }
103                 SgNBModificationRequest const* get_id_meNBinitiatedSgNBModificationPreparation() const { return get<SgNBModificationRequest>(15); }
104                 SgNBModificationRequired& select_id_sgNBinitiatedSgNBModification() { return set<SgNBModificationRequired>(16); }
105                 SgNBModificationRequired const* get_id_sgNBinitiatedSgNBModification() const { return get<SgNBModificationRequired>(16); }
106                 SgNBReleaseRequest& select_id_meNBinitiatedSgNBRelease() { return set<SgNBReleaseRequest>(17); }
107                 SgNBReleaseRequest const* get_id_meNBinitiatedSgNBRelease() const { return get<SgNBReleaseRequest>(17); }
108                 SgNBReleaseRequired& select_id_sgNBinitiatedSgNBRelease() { return set<SgNBReleaseRequired>(18); }
109                 SgNBReleaseRequired const* get_id_sgNBinitiatedSgNBRelease() const { return get<SgNBReleaseRequired>(18); }
110                 SgNBChangeRequired& select_id_sgNBChange() { return set<SgNBChangeRequired>(19); }
111                 SgNBChangeRequired const* get_id_sgNBChange() const { return get<SgNBChangeRequired>(19); }
112                 ENDCX2SetupRequest& select_id_endcX2Setup() { return set<ENDCX2SetupRequest>(20); }
113                 ENDCX2SetupRequest const* get_id_endcX2Setup() const { return get<ENDCX2SetupRequest>(20); }
114                 ENDCConfigurationUpdate& select_id_endcConfigurationUpdate() { return set<ENDCConfigurationUpdate>(21); }
115                 ENDCConfigurationUpdate const* get_id_endcConfigurationUpdate() const { return get<ENDCConfigurationUpdate>(21); }
116                 ENDCCellActivationRequest& select_id_endcCellActivation() { return set<ENDCCellActivationRequest>(22); }
117                 ENDCCellActivationRequest const* get_id_endcCellActivation() const { return get<ENDCCellActivationRequest>(22); }
118                 ENDCPartialResetRequired& select_id_endcPartialReset() { return set<ENDCPartialResetRequired>(23); }
119                 ENDCPartialResetRequired const* get_id_endcPartialReset() const { return get<ENDCPartialResetRequired>(23); }
120                 EUTRANRCellResourceCoordinationRequest& select_id_eUTRANRCellResourceCoordination() { return set<EUTRANRCellResourceCoordinationRequest>(24); }
121                 EUTRANRCellResourceCoordinationRequest const* get_id_eUTRANRCellResourceCoordination() const { return get<EUTRANRCellResourceCoordinationRequest>(24); }
122                 ENDCX2RemovalRequest& select_id_endcX2Removal() { return set<ENDCX2RemovalRequest>(25); }
123                 ENDCX2RemovalRequest const* get_id_endcX2Removal() const { return get<ENDCX2RemovalRequest>(25); }
124                 SNStatusTransfer& select_id_snStatusTransfer() { return set<SNStatusTransfer>(26); }
125                 SNStatusTransfer const* get_id_snStatusTransfer() const { return get<SNStatusTransfer>(26); }
126                 UEContextRelease& select_id_uEContextRelease() { return set<UEContextRelease>(27); }
127                 UEContextRelease const* get_id_uEContextRelease() const { return get<UEContextRelease>(27); }
128                 HandoverCancel& select_id_handoverCancel() { return set<HandoverCancel>(28); }
129                 HandoverCancel const* get_id_handoverCancel() const { return get<HandoverCancel>(28); }
130                 ErrorIndication& select_id_errorIndication() { return set<ErrorIndication>(29); }
131                 ErrorIndication const* get_id_errorIndication() const { return get<ErrorIndication>(29); }
132                 ResourceStatusUpdate& select_id_resourceStatusReporting() { return set<ResourceStatusUpdate>(30); }
133                 ResourceStatusUpdate const* get_id_resourceStatusReporting() const { return get<ResourceStatusUpdate>(30); }
134                 LoadInformation& select_id_loadIndication() { return set<LoadInformation>(31); }
135                 LoadInformation const* get_id_loadIndication() const { return get<LoadInformation>(31); }
136                 PrivateMessage& select_id_privateMessage() { return set<PrivateMessage>(32); }
137                 PrivateMessage const* get_id_privateMessage() const { return get<PrivateMessage>(32); }
138                 RLFIndication& select_id_rLFIndication() { return set<RLFIndication>(33); }
139                 RLFIndication const* get_id_rLFIndication() const { return get<RLFIndication>(33); }
140                 HandoverReport& select_id_handoverReport() { return set<HandoverReport>(34); }
141                 HandoverReport const* get_id_handoverReport() const { return get<HandoverReport>(34); }
142                 X2Release& select_id_x2Release() { return set<X2Release>(35); }
143                 X2Release const* get_id_x2Release() const { return get<X2Release>(35); }
144                 X2APMessageTransfer& select_id_x2APMessageTransfer() { return set<X2APMessageTransfer>(36); }
145                 X2APMessageTransfer const* get_id_x2APMessageTransfer() const { return get<X2APMessageTransfer>(36); }
146                 SeNBReconfigurationComplete& select_id_seNBReconfigurationCompletion() { return set<SeNBReconfigurationComplete>(37); }
147                 SeNBReconfigurationComplete const* get_id_seNBReconfigurationCompletion() const { return get<SeNBReconfigurationComplete>(37); }
148                 SeNBReleaseRequest& select_id_meNBinitiatedSeNBRelease() { return set<SeNBReleaseRequest>(38); }
149                 SeNBReleaseRequest const* get_id_meNBinitiatedSeNBRelease() const { return get<SeNBReleaseRequest>(38); }
150                 SeNBCounterCheckRequest& select_id_seNBCounterCheck() { return set<SeNBCounterCheckRequest>(39); }
151                 SeNBCounterCheckRequest const* get_id_seNBCounterCheck() const { return get<SeNBCounterCheckRequest>(39); }
152                 SgNBReconfigurationComplete& select_id_sgNBReconfigurationCompletion() { return set<SgNBReconfigurationComplete>(40); }
153                 SgNBReconfigurationComplete const* get_id_sgNBReconfigurationCompletion() const { return get<SgNBReconfigurationComplete>(40); }
154                 SgNBCounterCheckRequest& select_id_sgNBCounterCheck() { return set<SgNBCounterCheckRequest>(41); }
155                 SgNBCounterCheckRequest const* get_id_sgNBCounterCheck() const { return get<SgNBCounterCheckRequest>(41); }
156                 RRCTransfer& select_id_rRCTransfer() { return set<RRCTransfer>(42); }
157                 RRCTransfer const* get_id_rRCTransfer() const { return get<RRCTransfer>(42); }
158                 SecondaryRATDataUsageReport& select_id_secondaryRATDataUsageReport() { return set<SecondaryRATDataUsageReport>(43); }
159                 SecondaryRATDataUsageReport const* get_id_secondaryRATDataUsageReport() const { return get<SecondaryRATDataUsageReport>(43); }
160                 SgNBActivityNotification& select_id_SgNBActivityNotification() { return set<SgNBActivityNotification>(44); }
161                 SgNBActivityNotification const* get_id_SgNBActivityNotification() const { return get<SgNBActivityNotification>(44); }
162                 DataForwardingAddressIndication& select_id_dataForwardingAddressIndication() { return set<DataForwardingAddressIndication>(45); }
163                 DataForwardingAddressIndication const* get_id_dataForwardingAddressIndication() const { return get<DataForwardingAddressIndication>(45); }
164                 bool is_unknown() const { return type == 46; }
165                 void clear()
166                 {
167                         switch(type)
168                         {
169                         case 1: var.destroy<HandoverRequest>(); break;
170                         case 2: var.destroy<ResetRequest>(); break;
171                         case 3: var.destroy<X2SetupRequest>(); break;
172                         case 4: var.destroy<ResourceStatusRequest>(); break;
173                         case 5: var.destroy<ENBConfigurationUpdate>(); break;
174                         case 6: var.destroy<MobilityChangeRequest>(); break;
175                         case 7: var.destroy<CellActivationRequest>(); break;
176                         case 8: var.destroy<SeNBAdditionRequest>(); break;
177                         case 9: var.destroy<SeNBModificationRequest>(); break;
178                         case 10: var.destroy<SeNBModificationRequired>(); break;
179                         case 11: var.destroy<SeNBReleaseRequired>(); break;
180                         case 12: var.destroy<X2RemovalRequest>(); break;
181                         case 13: var.destroy<RetrieveUEContextRequest>(); break;
182                         case 14: var.destroy<SgNBAdditionRequest>(); break;
183                         case 15: var.destroy<SgNBModificationRequest>(); break;
184                         case 16: var.destroy<SgNBModificationRequired>(); break;
185                         case 17: var.destroy<SgNBReleaseRequest>(); break;
186                         case 18: var.destroy<SgNBReleaseRequired>(); break;
187                         case 19: var.destroy<SgNBChangeRequired>(); break;
188                         case 20: var.destroy<ENDCX2SetupRequest>(); break;
189                         case 21: var.destroy<ENDCConfigurationUpdate>(); break;
190                         case 22: var.destroy<ENDCCellActivationRequest>(); break;
191                         case 23: var.destroy<ENDCPartialResetRequired>(); break;
192                         case 24: var.destroy<EUTRANRCellResourceCoordinationRequest>(); break;
193                         case 25: var.destroy<ENDCX2RemovalRequest>(); break;
194                         case 26: var.destroy<SNStatusTransfer>(); break;
195                         case 27: var.destroy<UEContextRelease>(); break;
196                         case 28: var.destroy<HandoverCancel>(); break;
197                         case 29: var.destroy<ErrorIndication>(); break;
198                         case 30: var.destroy<ResourceStatusUpdate>(); break;
199                         case 31: var.destroy<LoadInformation>(); break;
200                         case 32: var.destroy<PrivateMessage>(); break;
201                         case 33: var.destroy<RLFIndication>(); break;
202                         case 34: var.destroy<HandoverReport>(); break;
203                         case 35: var.destroy<X2Release>(); break;
204                         case 36: var.destroy<X2APMessageTransfer>(); break;
205                         case 37: var.destroy<SeNBReconfigurationComplete>(); break;
206                         case 38: var.destroy<SeNBReleaseRequest>(); break;
207                         case 39: var.destroy<SeNBCounterCheckRequest>(); break;
208                         case 40: var.destroy<SgNBReconfigurationComplete>(); break;
209                         case 41: var.destroy<SgNBCounterCheckRequest>(); break;
210                         case 42: var.destroy<RRCTransfer>(); break;
211                         case 43: var.destroy<SecondaryRATDataUsageReport>(); break;
212                         case 44: var.destroy<SgNBActivityNotification>(); break;
213                         case 45: var.destroy<DataForwardingAddressIndication>(); break;
214                         }
215                         type = 0; ref_nested().clear();
216                 }
217                 template<typename V> static inline void enumerate(V& v)
218                 {
219                         v.template operator()<HandoverRequest>(1);
220                         v.template operator()<ResetRequest>(2);
221                         v.template operator()<X2SetupRequest>(3);
222                         v.template operator()<ResourceStatusRequest>(4);
223                         v.template operator()<ENBConfigurationUpdate>(5);
224                         v.template operator()<MobilityChangeRequest>(6);
225                         v.template operator()<CellActivationRequest>(7);
226                         v.template operator()<SeNBAdditionRequest>(8);
227                         v.template operator()<SeNBModificationRequest>(9);
228                         v.template operator()<SeNBModificationRequired>(10);
229                         v.template operator()<SeNBReleaseRequired>(11);
230                         v.template operator()<X2RemovalRequest>(12);
231                         v.template operator()<RetrieveUEContextRequest>(13);
232                         v.template operator()<SgNBAdditionRequest>(14);
233                         v.template operator()<SgNBModificationRequest>(15);
234                         v.template operator()<SgNBModificationRequired>(16);
235                         v.template operator()<SgNBReleaseRequest>(17);
236                         v.template operator()<SgNBReleaseRequired>(18);
237                         v.template operator()<SgNBChangeRequired>(19);
238                         v.template operator()<ENDCX2SetupRequest>(20);
239                         v.template operator()<ENDCConfigurationUpdate>(21);
240                         v.template operator()<ENDCCellActivationRequest>(22);
241                         v.template operator()<ENDCPartialResetRequired>(23);
242                         v.template operator()<EUTRANRCellResourceCoordinationRequest>(24);
243                         v.template operator()<ENDCX2RemovalRequest>(25);
244                         v.template operator()<SNStatusTransfer>(26);
245                         v.template operator()<UEContextRelease>(27);
246                         v.template operator()<HandoverCancel>(28);
247                         v.template operator()<ErrorIndication>(29);
248                         v.template operator()<ResourceStatusUpdate>(30);
249                         v.template operator()<LoadInformation>(31);
250                         v.template operator()<PrivateMessage>(32);
251                         v.template operator()<RLFIndication>(33);
252                         v.template operator()<HandoverReport>(34);
253                         v.template operator()<X2Release>(35);
254                         v.template operator()<X2APMessageTransfer>(36);
255                         v.template operator()<SeNBReconfigurationComplete>(37);
256                         v.template operator()<SeNBReleaseRequest>(38);
257                         v.template operator()<SeNBCounterCheckRequest>(39);
258                         v.template operator()<SgNBReconfigurationComplete>(40);
259                         v.template operator()<SgNBCounterCheckRequest>(41);
260                         v.template operator()<RRCTransfer>(42);
261                         v.template operator()<SecondaryRATDataUsageReport>(43);
262                         v.template operator()<SgNBActivityNotification>(44);
263                         v.template operator()<DataForwardingAddressIndication>(45);
264
265                 }
266                 protected:
267                 template<typename V> bool decode(size_t index, V& v)
268                 {
269                         clear();
270                         switch(index)
271                         {
272                         case 1: v(select_id_handoverPreparation()); return true;
273                         case 2: v(select_id_reset()); return true;
274                         case 3: v(select_id_x2Setup()); return true;
275                         case 4: v(select_id_resourceStatusReportingInitiation()); return true;
276                         case 5: v(select_id_eNBConfigurationUpdate()); return true;
277                         case 6: v(select_id_mobilitySettingsChange()); return true;
278                         case 7: v(select_id_cellActivation()); return true;
279                         case 8: v(select_id_seNBAdditionPreparation()); return true;
280                         case 9: v(select_id_meNBinitiatedSeNBModificationPreparation()); return true;
281                         case 10: v(select_id_seNBinitiatedSeNBModification()); return true;
282                         case 11: v(select_id_seNBinitiatedSeNBRelease()); return true;
283                         case 12: v(select_id_x2Removal()); return true;
284                         case 13: v(select_id_retrieveUEContext()); return true;
285                         case 14: v(select_id_sgNBAdditionPreparation()); return true;
286                         case 15: v(select_id_meNBinitiatedSgNBModificationPreparation()); return true;
287                         case 16: v(select_id_sgNBinitiatedSgNBModification()); return true;
288                         case 17: v(select_id_meNBinitiatedSgNBRelease()); return true;
289                         case 18: v(select_id_sgNBinitiatedSgNBRelease()); return true;
290                         case 19: v(select_id_sgNBChange()); return true;
291                         case 20: v(select_id_endcX2Setup()); return true;
292                         case 21: v(select_id_endcConfigurationUpdate()); return true;
293                         case 22: v(select_id_endcCellActivation()); return true;
294                         case 23: v(select_id_endcPartialReset()); return true;
295                         case 24: v(select_id_eUTRANRCellResourceCoordination()); return true;
296                         case 25: v(select_id_endcX2Removal()); return true;
297                         case 26: v(select_id_snStatusTransfer()); return true;
298                         case 27: v(select_id_uEContextRelease()); return true;
299                         case 28: v(select_id_handoverCancel()); return true;
300                         case 29: v(select_id_errorIndication()); return true;
301                         case 30: v(select_id_resourceStatusReporting()); return true;
302                         case 31: v(select_id_loadIndication()); return true;
303                         case 32: v(select_id_privateMessage()); return true;
304                         case 33: v(select_id_rLFIndication()); return true;
305                         case 34: v(select_id_handoverReport()); return true;
306                         case 35: v(select_id_x2Release()); return true;
307                         case 36: v(select_id_x2APMessageTransfer()); return true;
308                         case 37: v(select_id_seNBReconfigurationCompletion()); return true;
309                         case 38: v(select_id_meNBinitiatedSeNBRelease()); return true;
310                         case 39: v(select_id_seNBCounterCheck()); return true;
311                         case 40: v(select_id_sgNBReconfigurationCompletion()); return true;
312                         case 41: v(select_id_sgNBCounterCheck()); return true;
313                         case 42: v(select_id_rRCTransfer()); return true;
314                         case 43: v(select_id_secondaryRATDataUsageReport()); return true;
315                         case 44: v(select_id_SgNBActivityNotification()); return true;
316                         case 45: v(select_id_dataForwardingAddressIndication()); return true;
317                         case 46: if(type != 46) {clear(); asn::base::set();} type = 46; return true;
318                         }
319                         return false;
320
321                 }
322                 template<typename V> bool encode(size_t index, V& v) const
323                 {
324                         if(index != type) return false;
325                         switch(type)
326                         {
327                         case 1: v(var.as<HandoverRequest>()); return true;
328                         case 2: v(var.as<ResetRequest>()); return true;
329                         case 3: v(var.as<X2SetupRequest>()); return true;
330                         case 4: v(var.as<ResourceStatusRequest>()); return true;
331                         case 5: v(var.as<ENBConfigurationUpdate>()); return true;
332                         case 6: v(var.as<MobilityChangeRequest>()); return true;
333                         case 7: v(var.as<CellActivationRequest>()); return true;
334                         case 8: v(var.as<SeNBAdditionRequest>()); return true;
335                         case 9: v(var.as<SeNBModificationRequest>()); return true;
336                         case 10: v(var.as<SeNBModificationRequired>()); return true;
337                         case 11: v(var.as<SeNBReleaseRequired>()); return true;
338                         case 12: v(var.as<X2RemovalRequest>()); return true;
339                         case 13: v(var.as<RetrieveUEContextRequest>()); return true;
340                         case 14: v(var.as<SgNBAdditionRequest>()); return true;
341                         case 15: v(var.as<SgNBModificationRequest>()); return true;
342                         case 16: v(var.as<SgNBModificationRequired>()); return true;
343                         case 17: v(var.as<SgNBReleaseRequest>()); return true;
344                         case 18: v(var.as<SgNBReleaseRequired>()); return true;
345                         case 19: v(var.as<SgNBChangeRequired>()); return true;
346                         case 20: v(var.as<ENDCX2SetupRequest>()); return true;
347                         case 21: v(var.as<ENDCConfigurationUpdate>()); return true;
348                         case 22: v(var.as<ENDCCellActivationRequest>()); return true;
349                         case 23: v(var.as<ENDCPartialResetRequired>()); return true;
350                         case 24: v(var.as<EUTRANRCellResourceCoordinationRequest>()); return true;
351                         case 25: v(var.as<ENDCX2RemovalRequest>()); return true;
352                         case 26: v(var.as<SNStatusTransfer>()); return true;
353                         case 27: v(var.as<UEContextRelease>()); return true;
354                         case 28: v(var.as<HandoverCancel>()); return true;
355                         case 29: v(var.as<ErrorIndication>()); return true;
356                         case 30: v(var.as<ResourceStatusUpdate>()); return true;
357                         case 31: v(var.as<LoadInformation>()); return true;
358                         case 32: v(var.as<PrivateMessage>()); return true;
359                         case 33: v(var.as<RLFIndication>()); return true;
360                         case 34: v(var.as<HandoverReport>()); return true;
361                         case 35: v(var.as<X2Release>()); return true;
362                         case 36: v(var.as<X2APMessageTransfer>()); return true;
363                         case 37: v(var.as<SeNBReconfigurationComplete>()); return true;
364                         case 38: v(var.as<SeNBReleaseRequest>()); return true;
365                         case 39: v(var.as<SeNBCounterCheckRequest>()); return true;
366                         case 40: v(var.as<SgNBReconfigurationComplete>()); return true;
367                         case 41: v(var.as<SgNBCounterCheckRequest>()); return true;
368                         case 42: v(var.as<RRCTransfer>()); return true;
369                         case 43: v(var.as<SecondaryRATDataUsageReport>()); return true;
370                         case 44: v(var.as<SgNBActivityNotification>()); return true;
371                         case 45: v(var.as<DataForwardingAddressIndication>()); return true;
372                         }
373                         return false;
374
375                 }
376                 private:
377                 template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
378                 template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
379                 union union_type
380                 {
381                         char dummy1[sizeof(CellActivationRequest)];
382                         char dummy2[sizeof(DataForwardingAddressIndication)];
383                         char dummy3[sizeof(ENBConfigurationUpdate)];
384                         char dummy4[sizeof(ENDCCellActivationRequest)];
385                         char dummy5[sizeof(ENDCConfigurationUpdate)];
386                         char dummy6[sizeof(ENDCPartialResetRequired)];
387                         char dummy7[sizeof(ENDCX2RemovalRequest)];
388                         char dummy8[sizeof(ENDCX2SetupRequest)];
389                         char dummy9[sizeof(EUTRANRCellResourceCoordinationRequest)];
390                         char dummy10[sizeof(ErrorIndication)];
391                         char dummy11[sizeof(HandoverCancel)];
392                         char dummy12[sizeof(HandoverReport)];
393                         char dummy13[sizeof(HandoverRequest)];
394                         char dummy14[sizeof(LoadInformation)];
395                         char dummy15[sizeof(MobilityChangeRequest)];
396                         char dummy16[sizeof(PrivateMessage)];
397                         char dummy17[sizeof(RLFIndication)];
398                         char dummy18[sizeof(RRCTransfer)];
399                         char dummy19[sizeof(ResetRequest)];
400                         char dummy20[sizeof(ResourceStatusRequest)];
401                         char dummy21[sizeof(ResourceStatusUpdate)];
402                         char dummy22[sizeof(RetrieveUEContextRequest)];
403                         char dummy23[sizeof(SNStatusTransfer)];
404                         char dummy24[sizeof(SeNBAdditionRequest)];
405                         char dummy25[sizeof(SeNBCounterCheckRequest)];
406                         char dummy26[sizeof(SeNBModificationRequest)];
407                         char dummy27[sizeof(SeNBModificationRequired)];
408                         char dummy28[sizeof(SeNBReconfigurationComplete)];
409                         char dummy29[sizeof(SeNBReleaseRequest)];
410                         char dummy30[sizeof(SeNBReleaseRequired)];
411                         char dummy31[sizeof(SecondaryRATDataUsageReport)];
412                         char dummy32[sizeof(SgNBActivityNotification)];
413                         char dummy33[sizeof(SgNBAdditionRequest)];
414                         char dummy34[sizeof(SgNBChangeRequired)];
415                         char dummy35[sizeof(SgNBCounterCheckRequest)];
416                         char dummy36[sizeof(SgNBModificationRequest)];
417                         char dummy37[sizeof(SgNBModificationRequired)];
418                         char dummy38[sizeof(SgNBReconfigurationComplete)];
419                         char dummy39[sizeof(SgNBReleaseRequest)];
420                         char dummy40[sizeof(SgNBReleaseRequired)];
421                         char dummy41[sizeof(UEContextRelease)];
422                         char dummy42[sizeof(X2APMessageTransfer)];
423                         char dummy43[sizeof(X2Release)];
424                         char dummy44[sizeof(X2RemovalRequest)];
425                         char dummy45[sizeof(X2SetupRequest)];
426
427                 };
428                 asn::variant<sizeof(union_type)> var;
429                 size_t type {0};
430
431         };
432         struct SuccessfulOutcome_t : asn::typefield<true>
433         {
434                 ~SuccessfulOutcome_t()  {clear();}
435                 size_t get_index() const {return type;}
436                 HandoverRequestAcknowledge& select_id_handoverPreparation() { return set<HandoverRequestAcknowledge>(1); }
437                 HandoverRequestAcknowledge const* get_id_handoverPreparation() const { return get<HandoverRequestAcknowledge>(1); }
438                 ResetResponse& select_id_reset() { return set<ResetResponse>(2); }
439                 ResetResponse const* get_id_reset() const { return get<ResetResponse>(2); }
440                 X2SetupResponse& select_id_x2Setup() { return set<X2SetupResponse>(3); }
441                 X2SetupResponse const* get_id_x2Setup() const { return get<X2SetupResponse>(3); }
442                 ResourceStatusResponse& select_id_resourceStatusReportingInitiation() { return set<ResourceStatusResponse>(4); }
443                 ResourceStatusResponse const* get_id_resourceStatusReportingInitiation() const { return get<ResourceStatusResponse>(4); }
444                 ENBConfigurationUpdateAcknowledge& select_id_eNBConfigurationUpdate() { return set<ENBConfigurationUpdateAcknowledge>(5); }
445                 ENBConfigurationUpdateAcknowledge const* get_id_eNBConfigurationUpdate() const { return get<ENBConfigurationUpdateAcknowledge>(5); }
446                 MobilityChangeAcknowledge& select_id_mobilitySettingsChange() { return set<MobilityChangeAcknowledge>(6); }
447                 MobilityChangeAcknowledge const* get_id_mobilitySettingsChange() const { return get<MobilityChangeAcknowledge>(6); }
448                 CellActivationResponse& select_id_cellActivation() { return set<CellActivationResponse>(7); }
449                 CellActivationResponse const* get_id_cellActivation() const { return get<CellActivationResponse>(7); }
450                 SeNBAdditionRequestAcknowledge& select_id_seNBAdditionPreparation() { return set<SeNBAdditionRequestAcknowledge>(8); }
451                 SeNBAdditionRequestAcknowledge const* get_id_seNBAdditionPreparation() const { return get<SeNBAdditionRequestAcknowledge>(8); }
452                 SeNBModificationRequestAcknowledge& select_id_meNBinitiatedSeNBModificationPreparation() { return set<SeNBModificationRequestAcknowledge>(9); }
453                 SeNBModificationRequestAcknowledge const* get_id_meNBinitiatedSeNBModificationPreparation() const { return get<SeNBModificationRequestAcknowledge>(9); }
454                 SeNBModificationConfirm& select_id_seNBinitiatedSeNBModification() { return set<SeNBModificationConfirm>(10); }
455                 SeNBModificationConfirm const* get_id_seNBinitiatedSeNBModification() const { return get<SeNBModificationConfirm>(10); }
456                 SeNBReleaseConfirm& select_id_seNBinitiatedSeNBRelease() { return set<SeNBReleaseConfirm>(11); }
457                 SeNBReleaseConfirm const* get_id_seNBinitiatedSeNBRelease() const { return get<SeNBReleaseConfirm>(11); }
458                 X2RemovalResponse& select_id_x2Removal() { return set<X2RemovalResponse>(12); }
459                 X2RemovalResponse const* get_id_x2Removal() const { return get<X2RemovalResponse>(12); }
460                 RetrieveUEContextResponse& select_id_retrieveUEContext() { return set<RetrieveUEContextResponse>(13); }
461                 RetrieveUEContextResponse const* get_id_retrieveUEContext() const { return get<RetrieveUEContextResponse>(13); }
462                 SgNBAdditionRequestAcknowledge& select_id_sgNBAdditionPreparation() { return set<SgNBAdditionRequestAcknowledge>(14); }
463                 SgNBAdditionRequestAcknowledge const* get_id_sgNBAdditionPreparation() const { return get<SgNBAdditionRequestAcknowledge>(14); }
464                 SgNBModificationRequestAcknowledge& select_id_meNBinitiatedSgNBModificationPreparation() { return set<SgNBModificationRequestAcknowledge>(15); }
465                 SgNBModificationRequestAcknowledge const* get_id_meNBinitiatedSgNBModificationPreparation() const { return get<SgNBModificationRequestAcknowledge>(15); }
466                 SgNBModificationConfirm& select_id_sgNBinitiatedSgNBModification() { return set<SgNBModificationConfirm>(16); }
467                 SgNBModificationConfirm const* get_id_sgNBinitiatedSgNBModification() const { return get<SgNBModificationConfirm>(16); }
468                 SgNBReleaseRequestAcknowledge& select_id_meNBinitiatedSgNBRelease() { return set<SgNBReleaseRequestAcknowledge>(17); }
469                 SgNBReleaseRequestAcknowledge const* get_id_meNBinitiatedSgNBRelease() const { return get<SgNBReleaseRequestAcknowledge>(17); }
470                 SgNBReleaseConfirm& select_id_sgNBinitiatedSgNBRelease() { return set<SgNBReleaseConfirm>(18); }
471                 SgNBReleaseConfirm const* get_id_sgNBinitiatedSgNBRelease() const { return get<SgNBReleaseConfirm>(18); }
472                 SgNBChangeConfirm& select_id_sgNBChange() { return set<SgNBChangeConfirm>(19); }
473                 SgNBChangeConfirm const* get_id_sgNBChange() const { return get<SgNBChangeConfirm>(19); }
474                 ENDCX2SetupResponse& select_id_endcX2Setup() { return set<ENDCX2SetupResponse>(20); }
475                 ENDCX2SetupResponse const* get_id_endcX2Setup() const { return get<ENDCX2SetupResponse>(20); }
476                 ENDCConfigurationUpdateAcknowledge& select_id_endcConfigurationUpdate() { return set<ENDCConfigurationUpdateAcknowledge>(21); }
477                 ENDCConfigurationUpdateAcknowledge const* get_id_endcConfigurationUpdate() const { return get<ENDCConfigurationUpdateAcknowledge>(21); }
478                 ENDCCellActivationResponse& select_id_endcCellActivation() { return set<ENDCCellActivationResponse>(22); }
479                 ENDCCellActivationResponse const* get_id_endcCellActivation() const { return get<ENDCCellActivationResponse>(22); }
480                 ENDCPartialResetConfirm& select_id_endcPartialReset() { return set<ENDCPartialResetConfirm>(23); }
481                 ENDCPartialResetConfirm const* get_id_endcPartialReset() const { return get<ENDCPartialResetConfirm>(23); }
482                 EUTRANRCellResourceCoordinationResponse& select_id_eUTRANRCellResourceCoordination() { return set<EUTRANRCellResourceCoordinationResponse>(24); }
483                 EUTRANRCellResourceCoordinationResponse const* get_id_eUTRANRCellResourceCoordination() const { return get<EUTRANRCellResourceCoordinationResponse>(24); }
484                 ENDCX2RemovalResponse& select_id_endcX2Removal() { return set<ENDCX2RemovalResponse>(25); }
485                 ENDCX2RemovalResponse const* get_id_endcX2Removal() const { return get<ENDCX2RemovalResponse>(25); }
486                 bool is_unknown() const { return type == 46; }
487                 void clear()
488                 {
489                         switch(type)
490                         {
491                         case 1: var.destroy<HandoverRequestAcknowledge>(); break;
492                         case 2: var.destroy<ResetResponse>(); break;
493                         case 3: var.destroy<X2SetupResponse>(); break;
494                         case 4: var.destroy<ResourceStatusResponse>(); break;
495                         case 5: var.destroy<ENBConfigurationUpdateAcknowledge>(); break;
496                         case 6: var.destroy<MobilityChangeAcknowledge>(); break;
497                         case 7: var.destroy<CellActivationResponse>(); break;
498                         case 8: var.destroy<SeNBAdditionRequestAcknowledge>(); break;
499                         case 9: var.destroy<SeNBModificationRequestAcknowledge>(); break;
500                         case 10: var.destroy<SeNBModificationConfirm>(); break;
501                         case 11: var.destroy<SeNBReleaseConfirm>(); break;
502                         case 12: var.destroy<X2RemovalResponse>(); break;
503                         case 13: var.destroy<RetrieveUEContextResponse>(); break;
504                         case 14: var.destroy<SgNBAdditionRequestAcknowledge>(); break;
505                         case 15: var.destroy<SgNBModificationRequestAcknowledge>(); break;
506                         case 16: var.destroy<SgNBModificationConfirm>(); break;
507                         case 17: var.destroy<SgNBReleaseRequestAcknowledge>(); break;
508                         case 18: var.destroy<SgNBReleaseConfirm>(); break;
509                         case 19: var.destroy<SgNBChangeConfirm>(); break;
510                         case 20: var.destroy<ENDCX2SetupResponse>(); break;
511                         case 21: var.destroy<ENDCConfigurationUpdateAcknowledge>(); break;
512                         case 22: var.destroy<ENDCCellActivationResponse>(); break;
513                         case 23: var.destroy<ENDCPartialResetConfirm>(); break;
514                         case 24: var.destroy<EUTRANRCellResourceCoordinationResponse>(); break;
515                         case 25: var.destroy<ENDCX2RemovalResponse>(); break;
516                         }
517                         type = 0; ref_nested().clear();
518                 }
519                 template<typename V> static inline void enumerate(V& v)
520                 {
521                         v.template operator()<HandoverRequestAcknowledge>(1);
522                         v.template operator()<ResetResponse>(2);
523                         v.template operator()<X2SetupResponse>(3);
524                         v.template operator()<ResourceStatusResponse>(4);
525                         v.template operator()<ENBConfigurationUpdateAcknowledge>(5);
526                         v.template operator()<MobilityChangeAcknowledge>(6);
527                         v.template operator()<CellActivationResponse>(7);
528                         v.template operator()<SeNBAdditionRequestAcknowledge>(8);
529                         v.template operator()<SeNBModificationRequestAcknowledge>(9);
530                         v.template operator()<SeNBModificationConfirm>(10);
531                         v.template operator()<SeNBReleaseConfirm>(11);
532                         v.template operator()<X2RemovalResponse>(12);
533                         v.template operator()<RetrieveUEContextResponse>(13);
534                         v.template operator()<SgNBAdditionRequestAcknowledge>(14);
535                         v.template operator()<SgNBModificationRequestAcknowledge>(15);
536                         v.template operator()<SgNBModificationConfirm>(16);
537                         v.template operator()<SgNBReleaseRequestAcknowledge>(17);
538                         v.template operator()<SgNBReleaseConfirm>(18);
539                         v.template operator()<SgNBChangeConfirm>(19);
540                         v.template operator()<ENDCX2SetupResponse>(20);
541                         v.template operator()<ENDCConfigurationUpdateAcknowledge>(21);
542                         v.template operator()<ENDCCellActivationResponse>(22);
543                         v.template operator()<ENDCPartialResetConfirm>(23);
544                         v.template operator()<EUTRANRCellResourceCoordinationResponse>(24);
545                         v.template operator()<ENDCX2RemovalResponse>(25);
546
547                 }
548                 protected:
549                 template<typename V> bool decode(size_t index, V& v)
550                 {
551                         clear();
552                         switch(index)
553                         {
554                         case 1: v(select_id_handoverPreparation()); return true;
555                         case 2: v(select_id_reset()); return true;
556                         case 3: v(select_id_x2Setup()); return true;
557                         case 4: v(select_id_resourceStatusReportingInitiation()); return true;
558                         case 5: v(select_id_eNBConfigurationUpdate()); return true;
559                         case 6: v(select_id_mobilitySettingsChange()); return true;
560                         case 7: v(select_id_cellActivation()); return true;
561                         case 8: v(select_id_seNBAdditionPreparation()); return true;
562                         case 9: v(select_id_meNBinitiatedSeNBModificationPreparation()); return true;
563                         case 10: v(select_id_seNBinitiatedSeNBModification()); return true;
564                         case 11: v(select_id_seNBinitiatedSeNBRelease()); return true;
565                         case 12: v(select_id_x2Removal()); return true;
566                         case 13: v(select_id_retrieveUEContext()); return true;
567                         case 14: v(select_id_sgNBAdditionPreparation()); return true;
568                         case 15: v(select_id_meNBinitiatedSgNBModificationPreparation()); return true;
569                         case 16: v(select_id_sgNBinitiatedSgNBModification()); return true;
570                         case 17: v(select_id_meNBinitiatedSgNBRelease()); return true;
571                         case 18: v(select_id_sgNBinitiatedSgNBRelease()); return true;
572                         case 19: v(select_id_sgNBChange()); return true;
573                         case 20: v(select_id_endcX2Setup()); return true;
574                         case 21: v(select_id_endcConfigurationUpdate()); return true;
575                         case 22: v(select_id_endcCellActivation()); return true;
576                         case 23: v(select_id_endcPartialReset()); return true;
577                         case 24: v(select_id_eUTRANRCellResourceCoordination()); return true;
578                         case 25: v(select_id_endcX2Removal()); return true;
579                         case 46: if(type != 46) {clear(); asn::base::set();} type = 46; return true;
580                         }
581                         return false;
582
583                 }
584                 template<typename V> bool encode(size_t index, V& v) const
585                 {
586                         if(index != type) return false;
587                         switch(type)
588                         {
589                         case 1: v(var.as<HandoverRequestAcknowledge>()); return true;
590                         case 2: v(var.as<ResetResponse>()); return true;
591                         case 3: v(var.as<X2SetupResponse>()); return true;
592                         case 4: v(var.as<ResourceStatusResponse>()); return true;
593                         case 5: v(var.as<ENBConfigurationUpdateAcknowledge>()); return true;
594                         case 6: v(var.as<MobilityChangeAcknowledge>()); return true;
595                         case 7: v(var.as<CellActivationResponse>()); return true;
596                         case 8: v(var.as<SeNBAdditionRequestAcknowledge>()); return true;
597                         case 9: v(var.as<SeNBModificationRequestAcknowledge>()); return true;
598                         case 10: v(var.as<SeNBModificationConfirm>()); return true;
599                         case 11: v(var.as<SeNBReleaseConfirm>()); return true;
600                         case 12: v(var.as<X2RemovalResponse>()); return true;
601                         case 13: v(var.as<RetrieveUEContextResponse>()); return true;
602                         case 14: v(var.as<SgNBAdditionRequestAcknowledge>()); return true;
603                         case 15: v(var.as<SgNBModificationRequestAcknowledge>()); return true;
604                         case 16: v(var.as<SgNBModificationConfirm>()); return true;
605                         case 17: v(var.as<SgNBReleaseRequestAcknowledge>()); return true;
606                         case 18: v(var.as<SgNBReleaseConfirm>()); return true;
607                         case 19: v(var.as<SgNBChangeConfirm>()); return true;
608                         case 20: v(var.as<ENDCX2SetupResponse>()); return true;
609                         case 21: v(var.as<ENDCConfigurationUpdateAcknowledge>()); return true;
610                         case 22: v(var.as<ENDCCellActivationResponse>()); return true;
611                         case 23: v(var.as<ENDCPartialResetConfirm>()); return true;
612                         case 24: v(var.as<EUTRANRCellResourceCoordinationResponse>()); return true;
613                         case 25: v(var.as<ENDCX2RemovalResponse>()); return true;
614                         }
615                         return false;
616
617                 }
618                 private:
619                 template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
620                 template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
621                 union union_type
622                 {
623                         char dummy1[sizeof(CellActivationResponse)];
624                         char dummy2[sizeof(ENBConfigurationUpdateAcknowledge)];
625                         char dummy3[sizeof(ENDCCellActivationResponse)];
626                         char dummy4[sizeof(ENDCConfigurationUpdateAcknowledge)];
627                         char dummy5[sizeof(ENDCPartialResetConfirm)];
628                         char dummy6[sizeof(ENDCX2RemovalResponse)];
629                         char dummy7[sizeof(ENDCX2SetupResponse)];
630                         char dummy8[sizeof(EUTRANRCellResourceCoordinationResponse)];
631                         char dummy9[sizeof(HandoverRequestAcknowledge)];
632                         char dummy10[sizeof(MobilityChangeAcknowledge)];
633                         char dummy11[sizeof(ResetResponse)];
634                         char dummy12[sizeof(ResourceStatusResponse)];
635                         char dummy13[sizeof(RetrieveUEContextResponse)];
636                         char dummy14[sizeof(SeNBAdditionRequestAcknowledge)];
637                         char dummy15[sizeof(SeNBModificationConfirm)];
638                         char dummy16[sizeof(SeNBModificationRequestAcknowledge)];
639                         char dummy17[sizeof(SeNBReleaseConfirm)];
640                         char dummy18[sizeof(SgNBAdditionRequestAcknowledge)];
641                         char dummy19[sizeof(SgNBChangeConfirm)];
642                         char dummy20[sizeof(SgNBModificationConfirm)];
643                         char dummy21[sizeof(SgNBModificationRequestAcknowledge)];
644                         char dummy22[sizeof(SgNBReleaseConfirm)];
645                         char dummy23[sizeof(SgNBReleaseRequestAcknowledge)];
646                         char dummy24[sizeof(X2RemovalResponse)];
647                         char dummy25[sizeof(X2SetupResponse)];
648
649                 };
650                 asn::variant<sizeof(union_type)> var;
651                 size_t type {0};
652
653         };
654         struct UnsuccessfulOutcome_t : asn::typefield<true>
655         {
656                 ~UnsuccessfulOutcome_t()        {clear();}
657                 size_t get_index() const {return type;}
658                 HandoverPreparationFailure& select_id_handoverPreparation() { return set<HandoverPreparationFailure>(1); }
659                 HandoverPreparationFailure const* get_id_handoverPreparation() const { return get<HandoverPreparationFailure>(1); }
660                 X2SetupFailure& select_id_x2Setup() { return set<X2SetupFailure>(3); }
661                 X2SetupFailure const* get_id_x2Setup() const { return get<X2SetupFailure>(3); }
662                 ResourceStatusFailure& select_id_resourceStatusReportingInitiation() { return set<ResourceStatusFailure>(4); }
663                 ResourceStatusFailure const* get_id_resourceStatusReportingInitiation() const { return get<ResourceStatusFailure>(4); }
664                 ENBConfigurationUpdateFailure& select_id_eNBConfigurationUpdate() { return set<ENBConfigurationUpdateFailure>(5); }
665                 ENBConfigurationUpdateFailure const* get_id_eNBConfigurationUpdate() const { return get<ENBConfigurationUpdateFailure>(5); }
666                 MobilityChangeFailure& select_id_mobilitySettingsChange() { return set<MobilityChangeFailure>(6); }
667                 MobilityChangeFailure const* get_id_mobilitySettingsChange() const { return get<MobilityChangeFailure>(6); }
668                 CellActivationFailure& select_id_cellActivation() { return set<CellActivationFailure>(7); }
669                 CellActivationFailure const* get_id_cellActivation() const { return get<CellActivationFailure>(7); }
670                 SeNBAdditionRequestReject& select_id_seNBAdditionPreparation() { return set<SeNBAdditionRequestReject>(8); }
671                 SeNBAdditionRequestReject const* get_id_seNBAdditionPreparation() const { return get<SeNBAdditionRequestReject>(8); }
672                 SeNBModificationRequestReject& select_id_meNBinitiatedSeNBModificationPreparation() { return set<SeNBModificationRequestReject>(9); }
673                 SeNBModificationRequestReject const* get_id_meNBinitiatedSeNBModificationPreparation() const { return get<SeNBModificationRequestReject>(9); }
674                 SeNBModificationRefuse& select_id_seNBinitiatedSeNBModification() { return set<SeNBModificationRefuse>(10); }
675                 SeNBModificationRefuse const* get_id_seNBinitiatedSeNBModification() const { return get<SeNBModificationRefuse>(10); }
676                 X2RemovalFailure& select_id_x2Removal() { return set<X2RemovalFailure>(12); }
677                 X2RemovalFailure const* get_id_x2Removal() const { return get<X2RemovalFailure>(12); }
678                 RetrieveUEContextFailure& select_id_retrieveUEContext() { return set<RetrieveUEContextFailure>(13); }
679                 RetrieveUEContextFailure const* get_id_retrieveUEContext() const { return get<RetrieveUEContextFailure>(13); }
680                 SgNBAdditionRequestReject& select_id_sgNBAdditionPreparation() { return set<SgNBAdditionRequestReject>(14); }
681                 SgNBAdditionRequestReject const* get_id_sgNBAdditionPreparation() const { return get<SgNBAdditionRequestReject>(14); }
682                 SgNBModificationRequestReject& select_id_meNBinitiatedSgNBModificationPreparation() { return set<SgNBModificationRequestReject>(15); }
683                 SgNBModificationRequestReject const* get_id_meNBinitiatedSgNBModificationPreparation() const { return get<SgNBModificationRequestReject>(15); }
684                 SgNBModificationRefuse& select_id_sgNBinitiatedSgNBModification() { return set<SgNBModificationRefuse>(16); }
685                 SgNBModificationRefuse const* get_id_sgNBinitiatedSgNBModification() const { return get<SgNBModificationRefuse>(16); }
686                 SgNBReleaseRequestReject& select_id_meNBinitiatedSgNBRelease() { return set<SgNBReleaseRequestReject>(17); }
687                 SgNBReleaseRequestReject const* get_id_meNBinitiatedSgNBRelease() const { return get<SgNBReleaseRequestReject>(17); }
688                 SgNBChangeRefuse& select_id_sgNBChange() { return set<SgNBChangeRefuse>(19); }
689                 SgNBChangeRefuse const* get_id_sgNBChange() const { return get<SgNBChangeRefuse>(19); }
690                 ENDCX2SetupFailure& select_id_endcX2Setup() { return set<ENDCX2SetupFailure>(20); }
691                 ENDCX2SetupFailure const* get_id_endcX2Setup() const { return get<ENDCX2SetupFailure>(20); }
692                 ENDCConfigurationUpdateFailure& select_id_endcConfigurationUpdate() { return set<ENDCConfigurationUpdateFailure>(21); }
693                 ENDCConfigurationUpdateFailure const* get_id_endcConfigurationUpdate() const { return get<ENDCConfigurationUpdateFailure>(21); }
694                 ENDCCellActivationFailure& select_id_endcCellActivation() { return set<ENDCCellActivationFailure>(22); }
695                 ENDCCellActivationFailure const* get_id_endcCellActivation() const { return get<ENDCCellActivationFailure>(22); }
696                 ENDCX2RemovalFailure& select_id_endcX2Removal() { return set<ENDCX2RemovalFailure>(25); }
697                 ENDCX2RemovalFailure const* get_id_endcX2Removal() const { return get<ENDCX2RemovalFailure>(25); }
698                 bool is_unknown() const { return type == 46; }
699                 void clear()
700                 {
701                         switch(type)
702                         {
703                         case 1: var.destroy<HandoverPreparationFailure>(); break;
704                         case 3: var.destroy<X2SetupFailure>(); break;
705                         case 4: var.destroy<ResourceStatusFailure>(); break;
706                         case 5: var.destroy<ENBConfigurationUpdateFailure>(); break;
707                         case 6: var.destroy<MobilityChangeFailure>(); break;
708                         case 7: var.destroy<CellActivationFailure>(); break;
709                         case 8: var.destroy<SeNBAdditionRequestReject>(); break;
710                         case 9: var.destroy<SeNBModificationRequestReject>(); break;
711                         case 10: var.destroy<SeNBModificationRefuse>(); break;
712                         case 12: var.destroy<X2RemovalFailure>(); break;
713                         case 13: var.destroy<RetrieveUEContextFailure>(); break;
714                         case 14: var.destroy<SgNBAdditionRequestReject>(); break;
715                         case 15: var.destroy<SgNBModificationRequestReject>(); break;
716                         case 16: var.destroy<SgNBModificationRefuse>(); break;
717                         case 17: var.destroy<SgNBReleaseRequestReject>(); break;
718                         case 19: var.destroy<SgNBChangeRefuse>(); break;
719                         case 20: var.destroy<ENDCX2SetupFailure>(); break;
720                         case 21: var.destroy<ENDCConfigurationUpdateFailure>(); break;
721                         case 22: var.destroy<ENDCCellActivationFailure>(); break;
722                         case 25: var.destroy<ENDCX2RemovalFailure>(); break;
723                         }
724                         type = 0; ref_nested().clear();
725                 }
726                 template<typename V> static inline void enumerate(V& v)
727                 {
728                         v.template operator()<HandoverPreparationFailure>(1);
729                         v.template operator()<X2SetupFailure>(3);
730                         v.template operator()<ResourceStatusFailure>(4);
731                         v.template operator()<ENBConfigurationUpdateFailure>(5);
732                         v.template operator()<MobilityChangeFailure>(6);
733                         v.template operator()<CellActivationFailure>(7);
734                         v.template operator()<SeNBAdditionRequestReject>(8);
735                         v.template operator()<SeNBModificationRequestReject>(9);
736                         v.template operator()<SeNBModificationRefuse>(10);
737                         v.template operator()<X2RemovalFailure>(12);
738                         v.template operator()<RetrieveUEContextFailure>(13);
739                         v.template operator()<SgNBAdditionRequestReject>(14);
740                         v.template operator()<SgNBModificationRequestReject>(15);
741                         v.template operator()<SgNBModificationRefuse>(16);
742                         v.template operator()<SgNBReleaseRequestReject>(17);
743                         v.template operator()<SgNBChangeRefuse>(19);
744                         v.template operator()<ENDCX2SetupFailure>(20);
745                         v.template operator()<ENDCConfigurationUpdateFailure>(21);
746                         v.template operator()<ENDCCellActivationFailure>(22);
747                         v.template operator()<ENDCX2RemovalFailure>(25);
748
749                 }
750                 protected:
751                 template<typename V> bool decode(size_t index, V& v)
752                 {
753                         clear();
754                         switch(index)
755                         {
756                         case 1: v(select_id_handoverPreparation()); return true;
757                         case 3: v(select_id_x2Setup()); return true;
758                         case 4: v(select_id_resourceStatusReportingInitiation()); return true;
759                         case 5: v(select_id_eNBConfigurationUpdate()); return true;
760                         case 6: v(select_id_mobilitySettingsChange()); return true;
761                         case 7: v(select_id_cellActivation()); return true;
762                         case 8: v(select_id_seNBAdditionPreparation()); return true;
763                         case 9: v(select_id_meNBinitiatedSeNBModificationPreparation()); return true;
764                         case 10: v(select_id_seNBinitiatedSeNBModification()); return true;
765                         case 12: v(select_id_x2Removal()); return true;
766                         case 13: v(select_id_retrieveUEContext()); return true;
767                         case 14: v(select_id_sgNBAdditionPreparation()); return true;
768                         case 15: v(select_id_meNBinitiatedSgNBModificationPreparation()); return true;
769                         case 16: v(select_id_sgNBinitiatedSgNBModification()); return true;
770                         case 17: v(select_id_meNBinitiatedSgNBRelease()); return true;
771                         case 19: v(select_id_sgNBChange()); return true;
772                         case 20: v(select_id_endcX2Setup()); return true;
773                         case 21: v(select_id_endcConfigurationUpdate()); return true;
774                         case 22: v(select_id_endcCellActivation()); return true;
775                         case 25: v(select_id_endcX2Removal()); return true;
776                         case 46: if(type != 46) {clear(); asn::base::set();} type = 46; return true;
777                         }
778                         return false;
779
780                 }
781                 template<typename V> bool encode(size_t index, V& v) const
782                 {
783                         if(index != type) return false;
784                         switch(type)
785                         {
786                         case 1: v(var.as<HandoverPreparationFailure>()); return true;
787                         case 3: v(var.as<X2SetupFailure>()); return true;
788                         case 4: v(var.as<ResourceStatusFailure>()); return true;
789                         case 5: v(var.as<ENBConfigurationUpdateFailure>()); return true;
790                         case 6: v(var.as<MobilityChangeFailure>()); return true;
791                         case 7: v(var.as<CellActivationFailure>()); return true;
792                         case 8: v(var.as<SeNBAdditionRequestReject>()); return true;
793                         case 9: v(var.as<SeNBModificationRequestReject>()); return true;
794                         case 10: v(var.as<SeNBModificationRefuse>()); return true;
795                         case 12: v(var.as<X2RemovalFailure>()); return true;
796                         case 13: v(var.as<RetrieveUEContextFailure>()); return true;
797                         case 14: v(var.as<SgNBAdditionRequestReject>()); return true;
798                         case 15: v(var.as<SgNBModificationRequestReject>()); return true;
799                         case 16: v(var.as<SgNBModificationRefuse>()); return true;
800                         case 17: v(var.as<SgNBReleaseRequestReject>()); return true;
801                         case 19: v(var.as<SgNBChangeRefuse>()); return true;
802                         case 20: v(var.as<ENDCX2SetupFailure>()); return true;
803                         case 21: v(var.as<ENDCConfigurationUpdateFailure>()); return true;
804                         case 22: v(var.as<ENDCCellActivationFailure>()); return true;
805                         case 25: v(var.as<ENDCX2RemovalFailure>()); return true;
806                         }
807                         return false;
808
809                 }
810                 private:
811                 template<class T> T& set(size_t index) {if(type != index) {clear(); type = index; return var.build<T>();} return var.as<T>();}
812                 template<class T> T const* get(size_t index) const {if(type == index) {return &var.as<T>();} return nullptr;}
813                 union union_type
814                 {
815                         char dummy1[sizeof(CellActivationFailure)];
816                         char dummy2[sizeof(ENBConfigurationUpdateFailure)];
817                         char dummy3[sizeof(ENDCCellActivationFailure)];
818                         char dummy4[sizeof(ENDCConfigurationUpdateFailure)];
819                         char dummy5[sizeof(ENDCX2RemovalFailure)];
820                         char dummy6[sizeof(ENDCX2SetupFailure)];
821                         char dummy7[sizeof(HandoverPreparationFailure)];
822                         char dummy8[sizeof(MobilityChangeFailure)];
823                         char dummy9[sizeof(ResourceStatusFailure)];
824                         char dummy10[sizeof(RetrieveUEContextFailure)];
825                         char dummy11[sizeof(SeNBAdditionRequestReject)];
826                         char dummy12[sizeof(SeNBModificationRefuse)];
827                         char dummy13[sizeof(SeNBModificationRequestReject)];
828                         char dummy14[sizeof(SgNBAdditionRequestReject)];
829                         char dummy15[sizeof(SgNBChangeRefuse)];
830                         char dummy16[sizeof(SgNBModificationRefuse)];
831                         char dummy17[sizeof(SgNBModificationRequestReject)];
832                         char dummy18[sizeof(SgNBReleaseRequestReject)];
833                         char dummy19[sizeof(X2RemovalFailure)];
834                         char dummy20[sizeof(X2SetupFailure)];
835
836                 };
837                 asn::variant<sizeof(union_type)> var;
838                 size_t type {0};
839
840         };
841         struct procedureCode_t : asn::fixedtypefield<X2AP_ELEMENTARY_PROCEDURE::procedureCode_t, true>
842         {
843                 size_t get_index() const {return type;}
844                 bool is_unknown() const { return type == 46; }
845                 void clear() {type = 0;}
846                 void select_id_handoverPreparation() { set(id_handoverPreparation); type=1;}
847                 void select_id_reset() { set(id_reset); type=2;}
848                 void select_id_x2Setup() { set(id_x2Setup); type=3;}
849                 void select_id_resourceStatusReportingInitiation() { set(id_resourceStatusReportingInitiation); type=4;}
850                 void select_id_eNBConfigurationUpdate() { set(id_eNBConfigurationUpdate); type=5;}
851                 void select_id_mobilitySettingsChange() { set(id_mobilitySettingsChange); type=6;}
852                 void select_id_cellActivation() { set(id_cellActivation); type=7;}
853                 void select_id_seNBAdditionPreparation() { set(id_seNBAdditionPreparation); type=8;}
854                 void select_id_meNBinitiatedSeNBModificationPreparation() { set(id_meNBinitiatedSeNBModificationPreparation); type=9;}
855                 void select_id_seNBinitiatedSeNBModification() { set(id_seNBinitiatedSeNBModification); type=10;}
856                 void select_id_seNBinitiatedSeNBRelease() { set(id_seNBinitiatedSeNBRelease); type=11;}
857                 void select_id_x2Removal() { set(id_x2Removal); type=12;}
858                 void select_id_retrieveUEContext() { set(id_retrieveUEContext); type=13;}
859                 void select_id_sgNBAdditionPreparation() { set(id_sgNBAdditionPreparation); type=14;}
860                 void select_id_meNBinitiatedSgNBModificationPreparation() { set(id_meNBinitiatedSgNBModificationPreparation); type=15;}
861                 void select_id_sgNBinitiatedSgNBModification() { set(id_sgNBinitiatedSgNBModification); type=16;}
862                 void select_id_meNBinitiatedSgNBRelease() { set(id_meNBinitiatedSgNBRelease); type=17;}
863                 void select_id_sgNBinitiatedSgNBRelease() { set(id_sgNBinitiatedSgNBRelease); type=18;}
864                 void select_id_sgNBChange() { set(id_sgNBChange); type=19;}
865                 void select_id_endcX2Setup() { set(id_endcX2Setup); type=20;}
866                 void select_id_endcConfigurationUpdate() { set(id_endcConfigurationUpdate); type=21;}
867                 void select_id_endcCellActivation() { set(id_endcCellActivation); type=22;}
868                 void select_id_endcPartialReset() { set(id_endcPartialReset); type=23;}
869                 void select_id_eUTRANRCellResourceCoordination() { set(id_eUTRANRCellResourceCoordination); type=24;}
870                 void select_id_endcX2Removal() { set(id_endcX2Removal); type=25;}
871                 void select_id_snStatusTransfer() { set(id_snStatusTransfer); type=26;}
872                 void select_id_uEContextRelease() { set(id_uEContextRelease); type=27;}
873                 void select_id_handoverCancel() { set(id_handoverCancel); type=28;}
874                 void select_id_errorIndication() { set(id_errorIndication); type=29;}
875                 void select_id_resourceStatusReporting() { set(id_resourceStatusReporting); type=30;}
876                 void select_id_loadIndication() { set(id_loadIndication); type=31;}
877                 void select_id_privateMessage() { set(id_privateMessage); type=32;}
878                 void select_id_rLFIndication() { set(id_rLFIndication); type=33;}
879                 void select_id_handoverReport() { set(id_handoverReport); type=34;}
880                 void select_id_x2Release() { set(id_x2Release); type=35;}
881                 void select_id_x2APMessageTransfer() { set(id_x2APMessageTransfer); type=36;}
882                 void select_id_seNBReconfigurationCompletion() { set(id_seNBReconfigurationCompletion); type=37;}
883                 void select_id_meNBinitiatedSeNBRelease() { set(id_meNBinitiatedSeNBRelease); type=38;}
884                 void select_id_seNBCounterCheck() { set(id_seNBCounterCheck); type=39;}
885                 void select_id_sgNBReconfigurationCompletion() { set(id_sgNBReconfigurationCompletion); type=40;}
886                 void select_id_sgNBCounterCheck() { set(id_sgNBCounterCheck); type=41;}
887                 void select_id_rRCTransfer() { set(id_rRCTransfer); type=42;}
888                 void select_id_secondaryRATDataUsageReport() { set(id_secondaryRATDataUsageReport); type=43;}
889                 void select_id_SgNBActivityNotification() { set(id_SgNBActivityNotification); type=44;}
890                 void select_id_dataForwardingAddressIndication() { set(id_dataForwardingAddressIndication); type=45;}
891                 X2AP_ELEMENTARY_PROCEDURE::procedureCode_t const& ref_value() const {return ref_nested();}
892                 template<typename V>  bool decode(V& v)
893                 {
894                         clear();
895                         if(!v(ref_nested())) return false;
896                         if(equal(id_handoverPreparation)) { type = 1; return true; }
897                         else if(equal(id_reset)) { type = 2; return true; }
898                         else if(equal(id_x2Setup)) { type = 3; return true; }
899                         else if(equal(id_resourceStatusReportingInitiation)) { type = 4; return true; }
900                         else if(equal(id_eNBConfigurationUpdate)) { type = 5; return true; }
901                         else if(equal(id_mobilitySettingsChange)) { type = 6; return true; }
902                         else if(equal(id_cellActivation)) { type = 7; return true; }
903                         else if(equal(id_seNBAdditionPreparation)) { type = 8; return true; }
904                         else if(equal(id_meNBinitiatedSeNBModificationPreparation)) { type = 9; return true; }
905                         else if(equal(id_seNBinitiatedSeNBModification)) { type = 10; return true; }
906                         else if(equal(id_seNBinitiatedSeNBRelease)) { type = 11; return true; }
907                         else if(equal(id_x2Removal)) { type = 12; return true; }
908                         else if(equal(id_retrieveUEContext)) { type = 13; return true; }
909                         else if(equal(id_sgNBAdditionPreparation)) { type = 14; return true; }
910                         else if(equal(id_meNBinitiatedSgNBModificationPreparation)) { type = 15; return true; }
911                         else if(equal(id_sgNBinitiatedSgNBModification)) { type = 16; return true; }
912                         else if(equal(id_meNBinitiatedSgNBRelease)) { type = 17; return true; }
913                         else if(equal(id_sgNBinitiatedSgNBRelease)) { type = 18; return true; }
914                         else if(equal(id_sgNBChange)) { type = 19; return true; }
915                         else if(equal(id_endcX2Setup)) { type = 20; return true; }
916                         else if(equal(id_endcConfigurationUpdate)) { type = 21; return true; }
917                         else if(equal(id_endcCellActivation)) { type = 22; return true; }
918                         else if(equal(id_endcPartialReset)) { type = 23; return true; }
919                         else if(equal(id_eUTRANRCellResourceCoordination)) { type = 24; return true; }
920                         else if(equal(id_endcX2Removal)) { type = 25; return true; }
921                         else if(equal(id_snStatusTransfer)) { type = 26; return true; }
922                         else if(equal(id_uEContextRelease)) { type = 27; return true; }
923                         else if(equal(id_handoverCancel)) { type = 28; return true; }
924                         else if(equal(id_errorIndication)) { type = 29; return true; }
925                         else if(equal(id_resourceStatusReporting)) { type = 30; return true; }
926                         else if(equal(id_loadIndication)) { type = 31; return true; }
927                         else if(equal(id_privateMessage)) { type = 32; return true; }
928                         else if(equal(id_rLFIndication)) { type = 33; return true; }
929                         else if(equal(id_handoverReport)) { type = 34; return true; }
930                         else if(equal(id_x2Release)) { type = 35; return true; }
931                         else if(equal(id_x2APMessageTransfer)) { type = 36; return true; }
932                         else if(equal(id_seNBReconfigurationCompletion)) { type = 37; return true; }
933                         else if(equal(id_meNBinitiatedSeNBRelease)) { type = 38; return true; }
934                         else if(equal(id_seNBCounterCheck)) { type = 39; return true; }
935                         else if(equal(id_sgNBReconfigurationCompletion)) { type = 40; return true; }
936                         else if(equal(id_sgNBCounterCheck)) { type = 41; return true; }
937                         else if(equal(id_rRCTransfer)) { type = 42; return true; }
938                         else if(equal(id_secondaryRATDataUsageReport)) { type = 43; return true; }
939                         else if(equal(id_SgNBActivityNotification)) { type = 44; return true; }
940                         else if(equal(id_dataForwardingAddressIndication)) { type = 45; return true; }
941                         else { type = 46; return true;}
942                         return false;
943
944                 }
945                 template<typename V> bool encode(V& v) const
946                 {
947                         return v(ref_nested());
948
949                 }
950                 protected:
951                 template<typename V>  bool decode(size_t index, V& v)
952                 {
953                         clear();
954                         switch(index)
955                         {
956                         case 1: type = 1; if(v(ref_nested())) { return equal(id_handoverPreparation);} return false;
957                         case 2: type = 2; if(v(ref_nested())) { return equal(id_reset);} return false;
958                         case 3: type = 3; if(v(ref_nested())) { return equal(id_x2Setup);} return false;
959                         case 4: type = 4; if(v(ref_nested())) { return equal(id_resourceStatusReportingInitiation);} return false;
960                         case 5: type = 5; if(v(ref_nested())) { return equal(id_eNBConfigurationUpdate);} return false;
961                         case 6: type = 6; if(v(ref_nested())) { return equal(id_mobilitySettingsChange);} return false;
962                         case 7: type = 7; if(v(ref_nested())) { return equal(id_cellActivation);} return false;
963                         case 8: type = 8; if(v(ref_nested())) { return equal(id_seNBAdditionPreparation);} return false;
964                         case 9: type = 9; if(v(ref_nested())) { return equal(id_meNBinitiatedSeNBModificationPreparation);} return false;
965                         case 10: type = 10; if(v(ref_nested())) { return equal(id_seNBinitiatedSeNBModification);} return false;
966                         case 11: type = 11; if(v(ref_nested())) { return equal(id_seNBinitiatedSeNBRelease);} return false;
967                         case 12: type = 12; if(v(ref_nested())) { return equal(id_x2Removal);} return false;
968                         case 13: type = 13; if(v(ref_nested())) { return equal(id_retrieveUEContext);} return false;
969                         case 14: type = 14; if(v(ref_nested())) { return equal(id_sgNBAdditionPreparation);} return false;
970                         case 15: type = 15; if(v(ref_nested())) { return equal(id_meNBinitiatedSgNBModificationPreparation);} return false;
971                         case 16: type = 16; if(v(ref_nested())) { return equal(id_sgNBinitiatedSgNBModification);} return false;
972                         case 17: type = 17; if(v(ref_nested())) { return equal(id_meNBinitiatedSgNBRelease);} return false;
973                         case 18: type = 18; if(v(ref_nested())) { return equal(id_sgNBinitiatedSgNBRelease);} return false;
974                         case 19: type = 19; if(v(ref_nested())) { return equal(id_sgNBChange);} return false;
975                         case 20: type = 20; if(v(ref_nested())) { return equal(id_endcX2Setup);} return false;
976                         case 21: type = 21; if(v(ref_nested())) { return equal(id_endcConfigurationUpdate);} return false;
977                         case 22: type = 22; if(v(ref_nested())) { return equal(id_endcCellActivation);} return false;
978                         case 23: type = 23; if(v(ref_nested())) { return equal(id_endcPartialReset);} return false;
979                         case 24: type = 24; if(v(ref_nested())) { return equal(id_eUTRANRCellResourceCoordination);} return false;
980                         case 25: type = 25; if(v(ref_nested())) { return equal(id_endcX2Removal);} return false;
981                         case 26: type = 26; if(v(ref_nested())) { return equal(id_snStatusTransfer);} return false;
982                         case 27: type = 27; if(v(ref_nested())) { return equal(id_uEContextRelease);} return false;
983                         case 28: type = 28; if(v(ref_nested())) { return equal(id_handoverCancel);} return false;
984                         case 29: type = 29; if(v(ref_nested())) { return equal(id_errorIndication);} return false;
985                         case 30: type = 30; if(v(ref_nested())) { return equal(id_resourceStatusReporting);} return false;
986                         case 31: type = 31; if(v(ref_nested())) { return equal(id_loadIndication);} return false;
987                         case 32: type = 32; if(v(ref_nested())) { return equal(id_privateMessage);} return false;
988                         case 33: type = 33; if(v(ref_nested())) { return equal(id_rLFIndication);} return false;
989                         case 34: type = 34; if(v(ref_nested())) { return equal(id_handoverReport);} return false;
990                         case 35: type = 35; if(v(ref_nested())) { return equal(id_x2Release);} return false;
991                         case 36: type = 36; if(v(ref_nested())) { return equal(id_x2APMessageTransfer);} return false;
992                         case 37: type = 37; if(v(ref_nested())) { return equal(id_seNBReconfigurationCompletion);} return false;
993                         case 38: type = 38; if(v(ref_nested())) { return equal(id_meNBinitiatedSeNBRelease);} return false;
994                         case 39: type = 39; if(v(ref_nested())) { return equal(id_seNBCounterCheck);} return false;
995                         case 40: type = 40; if(v(ref_nested())) { return equal(id_sgNBReconfigurationCompletion);} return false;
996                         case 41: type = 41; if(v(ref_nested())) { return equal(id_sgNBCounterCheck);} return false;
997                         case 42: type = 42; if(v(ref_nested())) { return equal(id_rRCTransfer);} return false;
998                         case 43: type = 43; if(v(ref_nested())) { return equal(id_secondaryRATDataUsageReport);} return false;
999                         case 44: type = 44; if(v(ref_nested())) { return equal(id_SgNBActivityNotification);} return false;
1000                         case 45: type = 45; if(v(ref_nested())) { return equal(id_dataForwardingAddressIndication);} return false;
1001                         case 46: type = 46; return v(ref_nested());
1002                         ref_nested().clear();
1003                         }
1004                         return false;
1005
1006                 }
1007                 template<typename V> bool encode(size_t index, V& v) const
1008                 {
1009                         if(index != type) {return false;} return v(ref_nested());
1010
1011                 }
1012                 private:
1013                 size_t type {0};
1014
1015         };
1016         struct criticality_t : asn::fixedtypefield<X2AP_ELEMENTARY_PROCEDURE::criticality_t, true>
1017         {
1018                 size_t get_index() const {return type;}
1019                 bool is_unknown() const { return type == 46; }
1020                 void clear() {type = 0;}
1021                 void select_id_handoverPreparation() { set(reject); type=1;}
1022                 void select_id_reset() { set(reject); type=2;}
1023                 void select_id_x2Setup() { set(reject); type=3;}
1024                 void select_id_resourceStatusReportingInitiation() { set(reject); type=4;}
1025                 void select_id_eNBConfigurationUpdate() { set(reject); type=5;}
1026                 void select_id_mobilitySettingsChange() { set(reject); type=6;}
1027                 void select_id_cellActivation() { set(reject); type=7;}
1028                 void select_id_seNBAdditionPreparation() { set(reject); type=8;}
1029                 void select_id_meNBinitiatedSeNBModificationPreparation() { set(reject); type=9;}
1030                 void select_id_seNBinitiatedSeNBModification() { set(reject); type=10;}
1031                 void select_id_seNBinitiatedSeNBRelease() { set(reject); type=11;}
1032                 void select_id_x2Removal() { set(reject); type=12;}
1033                 void select_id_retrieveUEContext() { set(reject); type=13;}
1034                 void select_id_sgNBAdditionPreparation() { set(reject); type=14;}
1035                 void select_id_meNBinitiatedSgNBModificationPreparation() { set(reject); type=15;}
1036                 void select_id_sgNBinitiatedSgNBModification() { set(reject); type=16;}
1037                 void select_id_meNBinitiatedSgNBRelease() { set(ignore); type=17;}
1038                 void select_id_sgNBinitiatedSgNBRelease() { set(reject); type=18;}
1039                 void select_id_sgNBChange() { set(reject); type=19;}
1040                 void select_id_endcX2Setup() { set(reject); type=20;}
1041                 void select_id_endcConfigurationUpdate() { set(reject); type=21;}
1042                 void select_id_endcCellActivation() { set(reject); type=22;}
1043                 void select_id_endcPartialReset() { set(reject); type=23;}
1044                 void select_id_eUTRANRCellResourceCoordination() { set(reject); type=24;}
1045                 void select_id_endcX2Removal() { set(reject); type=25;}
1046                 void select_id_snStatusTransfer() { set(ignore); type=26;}
1047                 void select_id_uEContextRelease() { set(ignore); type=27;}
1048                 void select_id_handoverCancel() { set(ignore); type=28;}
1049                 void select_id_errorIndication() { set(ignore); type=29;}
1050                 void select_id_resourceStatusReporting() { set(ignore); type=30;}
1051                 void select_id_loadIndication() { set(ignore); type=31;}
1052                 void select_id_privateMessage() { set(ignore); type=32;}
1053                 void select_id_rLFIndication() { set(ignore); type=33;}
1054                 void select_id_handoverReport() { set(ignore); type=34;}
1055                 void select_id_x2Release() { set(reject); type=35;}
1056                 void select_id_x2APMessageTransfer() { set(reject); type=36;}
1057                 void select_id_seNBReconfigurationCompletion() { set(ignore); type=37;}
1058                 void select_id_meNBinitiatedSeNBRelease() { set(ignore); type=38;}
1059                 void select_id_seNBCounterCheck() { set(reject); type=39;}
1060                 void select_id_sgNBReconfigurationCompletion() { set(ignore); type=40;}
1061                 void select_id_sgNBCounterCheck() { set(reject); type=41;}
1062                 void select_id_rRCTransfer() { set(reject); type=42;}
1063                 void select_id_secondaryRATDataUsageReport() { set(reject); type=43;}
1064                 void select_id_SgNBActivityNotification() { set(reject); type=44;}
1065                 void select_id_dataForwardingAddressIndication() { set(ignore); type=45;}
1066                 X2AP_ELEMENTARY_PROCEDURE::criticality_t const& ref_value() const {return ref_nested();}
1067                 template<typename V>  bool decode(V& v)
1068                 {
1069                         clear();
1070                         if(!v(ref_nested())) return false;
1071                         if(equal(reject)) { type = 1; return true; }
1072                         else if(equal(reject)) { type = 2; return true; }
1073                         else if(equal(reject)) { type = 3; return true; }
1074                         else if(equal(reject)) { type = 4; return true; }
1075                         else if(equal(reject)) { type = 5; return true; }
1076                         else if(equal(reject)) { type = 6; return true; }
1077                         else if(equal(reject)) { type = 7; return true; }
1078                         else if(equal(reject)) { type = 8; return true; }
1079                         else if(equal(reject)) { type = 9; return true; }
1080                         else if(equal(reject)) { type = 10; return true; }
1081                         else if(equal(reject)) { type = 11; return true; }
1082                         else if(equal(reject)) { type = 12; return true; }
1083                         else if(equal(reject)) { type = 13; return true; }
1084                         else if(equal(reject)) { type = 14; return true; }
1085                         else if(equal(reject)) { type = 15; return true; }
1086                         else if(equal(reject)) { type = 16; return true; }
1087                         else if(equal(ignore)) { type = 17; return true; }
1088                         else if(equal(reject)) { type = 18; return true; }
1089                         else if(equal(reject)) { type = 19; return true; }
1090                         else if(equal(reject)) { type = 20; return true; }
1091                         else if(equal(reject)) { type = 21; return true; }
1092                         else if(equal(reject)) { type = 22; return true; }
1093                         else if(equal(reject)) { type = 23; return true; }
1094                         else if(equal(reject)) { type = 24; return true; }
1095                         else if(equal(reject)) { type = 25; return true; }
1096                         else if(equal(ignore)) { type = 26; return true; }
1097                         else if(equal(ignore)) { type = 27; return true; }
1098                         else if(equal(ignore)) { type = 28; return true; }
1099                         else if(equal(ignore)) { type = 29; return true; }
1100                         else if(equal(ignore)) { type = 30; return true; }
1101                         else if(equal(ignore)) { type = 31; return true; }
1102                         else if(equal(ignore)) { type = 32; return true; }
1103                         else if(equal(ignore)) { type = 33; return true; }
1104                         else if(equal(ignore)) { type = 34; return true; }
1105                         else if(equal(reject)) { type = 35; return true; }
1106                         else if(equal(reject)) { type = 36; return true; }
1107                         else if(equal(ignore)) { type = 37; return true; }
1108                         else if(equal(ignore)) { type = 38; return true; }
1109                         else if(equal(reject)) { type = 39; return true; }
1110                         else if(equal(ignore)) { type = 40; return true; }
1111                         else if(equal(reject)) { type = 41; return true; }
1112                         else if(equal(reject)) { type = 42; return true; }
1113                         else if(equal(reject)) { type = 43; return true; }
1114                         else if(equal(reject)) { type = 44; return true; }
1115                         else if(equal(ignore)) { type = 45; return true; }
1116                         else { type = 46; return true;}
1117                         return false;
1118
1119                 }
1120                 template<typename V> bool encode(V& v) const
1121                 {
1122                         return v(ref_nested());
1123
1124                 }
1125                 protected:
1126                 template<typename V>  bool decode(size_t index, V& v)
1127                 {
1128                         clear();
1129                         switch(index)
1130                         {
1131                         case 1: type = 1; if(v(ref_nested())) { return equal(reject);} return false;
1132                         case 2: type = 2; if(v(ref_nested())) { return equal(reject);} return false;
1133                         case 3: type = 3; if(v(ref_nested())) { return equal(reject);} return false;
1134                         case 4: type = 4; if(v(ref_nested())) { return equal(reject);} return false;
1135                         case 5: type = 5; if(v(ref_nested())) { return equal(reject);} return false;
1136                         case 6: type = 6; if(v(ref_nested())) { return equal(reject);} return false;
1137                         case 7: type = 7; if(v(ref_nested())) { return equal(reject);} return false;
1138                         case 8: type = 8; if(v(ref_nested())) { return equal(reject);} return false;
1139                         case 9: type = 9; if(v(ref_nested())) { return equal(reject);} return false;
1140                         case 10: type = 10; if(v(ref_nested())) { return equal(reject);} return false;
1141                         case 11: type = 11; if(v(ref_nested())) { return equal(reject);} return false;
1142                         case 12: type = 12; if(v(ref_nested())) { return equal(reject);} return false;
1143                         case 13: type = 13; if(v(ref_nested())) { return equal(reject);} return false;
1144                         case 14: type = 14; if(v(ref_nested())) { return equal(reject);} return false;
1145                         case 15: type = 15; if(v(ref_nested())) { return equal(reject);} return false;
1146                         case 16: type = 16; if(v(ref_nested())) { return equal(reject);} return false;
1147                         case 17: type = 17; if(v(ref_nested())) { return equal(ignore);} return false;
1148                         case 18: type = 18; if(v(ref_nested())) { return equal(reject);} return false;
1149                         case 19: type = 19; if(v(ref_nested())) { return equal(reject);} return false;
1150                         case 20: type = 20; if(v(ref_nested())) { return equal(reject);} return false;
1151                         case 21: type = 21; if(v(ref_nested())) { return equal(reject);} return false;
1152                         case 22: type = 22; if(v(ref_nested())) { return equal(reject);} return false;
1153                         case 23: type = 23; if(v(ref_nested())) { return equal(reject);} return false;
1154                         case 24: type = 24; if(v(ref_nested())) { return equal(reject);} return false;
1155                         case 25: type = 25; if(v(ref_nested())) { return equal(reject);} return false;
1156                         case 26: type = 26; if(v(ref_nested())) { return equal(ignore);} return false;
1157                         case 27: type = 27; if(v(ref_nested())) { return equal(ignore);} return false;
1158                         case 28: type = 28; if(v(ref_nested())) { return equal(ignore);} return false;
1159                         case 29: type = 29; if(v(ref_nested())) { return equal(ignore);} return false;
1160                         case 30: type = 30; if(v(ref_nested())) { return equal(ignore);} return false;
1161                         case 31: type = 31; if(v(ref_nested())) { return equal(ignore);} return false;
1162                         case 32: type = 32; if(v(ref_nested())) { return equal(ignore);} return false;
1163                         case 33: type = 33; if(v(ref_nested())) { return equal(ignore);} return false;
1164                         case 34: type = 34; if(v(ref_nested())) { return equal(ignore);} return false;
1165                         case 35: type = 35; if(v(ref_nested())) { return equal(reject);} return false;
1166                         case 36: type = 36; if(v(ref_nested())) { return equal(reject);} return false;
1167                         case 37: type = 37; if(v(ref_nested())) { return equal(ignore);} return false;
1168                         case 38: type = 38; if(v(ref_nested())) { return equal(ignore);} return false;
1169                         case 39: type = 39; if(v(ref_nested())) { return equal(reject);} return false;
1170                         case 40: type = 40; if(v(ref_nested())) { return equal(ignore);} return false;
1171                         case 41: type = 41; if(v(ref_nested())) { return equal(reject);} return false;
1172                         case 42: type = 42; if(v(ref_nested())) { return equal(reject);} return false;
1173                         case 43: type = 43; if(v(ref_nested())) { return equal(reject);} return false;
1174                         case 44: type = 44; if(v(ref_nested())) { return equal(reject);} return false;
1175                         case 45: type = 45; if(v(ref_nested())) { return equal(ignore);} return false;
1176                         case 46: type = 46; return v(ref_nested());
1177                         ref_nested().clear();
1178                         }
1179                         return false;
1180
1181                 }
1182                 template<typename V> bool encode(size_t index, V& v) const
1183                 {
1184                         if(index != type) {return false;} return v(ref_nested());
1185
1186                 }
1187                 private:
1188                 size_t type {0};
1189
1190         };
1191
1192 };
1193 /*
1194 InitiatingMessage ::= SEQUENCE {
1195         procedureCode   X2AP-ELEMENTARY-PROCEDURE.&procedureCode                ({X2AP-ELEMENTARY-PROCEDURES}),
1196         criticality             X2AP-ELEMENTARY-PROCEDURE.&criticality                  ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
1197         value                   X2AP-ELEMENTARY-PROCEDURE.&InitiatingMessage    ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode})
1198 }
1199 */
1200
1201 struct InitiatingMessage : asn::sequence<3, 0, false, 0>
1202 {
1203         static constexpr const char* name() {return "InitiatingMessage";}
1204         using parent_t = asn::sequence<3, 0, false, 0>;
1205         struct procedureCode_t : X2AP_ELEMENTARY_PROCEDURES::procedureCode_t
1206         {
1207                 static constexpr const char* name() {return "procedureCode_t";}
1208                 using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::procedureCode_t;
1209                 template<typename V>  bool decode(V& v, InitiatingMessage const& c)
1210                 {
1211                         return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v);
1212                 };
1213                 template<typename V>  bool encode(V& v, InitiatingMessage const& c) const
1214                 {
1215                         return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v);
1216                 };
1217         };
1218         procedureCode_t& ref_procedureCode() {return procedureCode;}
1219         procedureCode_t const& ref_procedureCode() const {return procedureCode;}
1220         struct criticality_t : X2AP_ELEMENTARY_PROCEDURES::criticality_t
1221         {
1222                 static constexpr const char* name() {return "criticality_t";}
1223                 using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::criticality_t;
1224                 template<typename V>  bool decode(V& v, InitiatingMessage const& c)
1225                 {
1226                         return X2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v);
1227                 };
1228                 template<typename V>  bool encode(V& v, InitiatingMessage const& c) const
1229                 {
1230                         return X2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v);
1231                 };
1232         };
1233         criticality_t& ref_criticality() {return criticality;}
1234         criticality_t const& ref_criticality() const {return criticality;}
1235         struct value_t : X2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t
1236         {
1237                 static constexpr const char* name() {return "value_t";}
1238                 using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t;
1239                 template<typename V>  bool decode(V& v, InitiatingMessage const& c)
1240                 {
1241                         return X2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t::decode(c.procedureCode.get_index(), v);
1242                 };
1243                 template<typename V>  bool encode(V& v, InitiatingMessage const& c) const
1244                 {
1245                         return X2AP_ELEMENTARY_PROCEDURES::InitiatingMessage_t::encode(c.procedureCode.get_index(), v);
1246                 };
1247         };
1248         value_t& ref_value() {return value;}
1249         value_t const& ref_value() const {return value;}
1250         template<typename V> void decode(V& v)
1251         {
1252                 v(procedureCode);
1253                 v(criticality);
1254                 v(value);
1255
1256         };
1257         template<typename V> void encode(V& v) const
1258         {
1259                 v(procedureCode);
1260                 v(criticality);
1261                 v(value);
1262
1263         };
1264         void clear()
1265         {
1266                 procedureCode.clear();
1267                 criticality.clear();
1268                 value.clear();
1269
1270         };
1271         private:
1272         procedureCode_t procedureCode;
1273         criticality_t   criticality;
1274         value_t value;
1275
1276 };
1277 /*
1278 SuccessfulOutcome ::= SEQUENCE {
1279         procedureCode   X2AP-ELEMENTARY-PROCEDURE.&procedureCode                ({X2AP-ELEMENTARY-PROCEDURES}),
1280         criticality             X2AP-ELEMENTARY-PROCEDURE.&criticality                  ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
1281         value                   X2AP-ELEMENTARY-PROCEDURE.&SuccessfulOutcome    ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode})
1282 }
1283 */
1284
1285 struct SuccessfulOutcome : asn::sequence<3, 0, false, 0>
1286 {
1287         static constexpr const char* name() {return "SuccessfulOutcome";}
1288         using parent_t = asn::sequence<3, 0, false, 0>;
1289         struct procedureCode_t : X2AP_ELEMENTARY_PROCEDURES::procedureCode_t
1290         {
1291                 static constexpr const char* name() {return "procedureCode_t";}
1292                 using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::procedureCode_t;
1293                 template<typename V>  bool decode(V& v, SuccessfulOutcome const& c)
1294                 {
1295                         return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v);
1296                 };
1297                 template<typename V>  bool encode(V& v, SuccessfulOutcome const& c) const
1298                 {
1299                         return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v);
1300                 };
1301         };
1302         procedureCode_t& ref_procedureCode() {return procedureCode;}
1303         procedureCode_t const& ref_procedureCode() const {return procedureCode;}
1304         struct criticality_t : X2AP_ELEMENTARY_PROCEDURES::criticality_t
1305         {
1306                 static constexpr const char* name() {return "criticality_t";}
1307                 using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::criticality_t;
1308                 template<typename V>  bool decode(V& v, SuccessfulOutcome const& c)
1309                 {
1310                         return X2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v);
1311                 };
1312                 template<typename V>  bool encode(V& v, SuccessfulOutcome const& c) const
1313                 {
1314                         return X2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v);
1315                 };
1316         };
1317         criticality_t& ref_criticality() {return criticality;}
1318         criticality_t const& ref_criticality() const {return criticality;}
1319         struct value_t : X2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t
1320         {
1321                 static constexpr const char* name() {return "value_t";}
1322                 using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t;
1323                 template<typename V>  bool decode(V& v, SuccessfulOutcome const& c)
1324                 {
1325                         return X2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t::decode(c.procedureCode.get_index(), v);
1326                 };
1327                 template<typename V>  bool encode(V& v, SuccessfulOutcome const& c) const
1328                 {
1329                         return X2AP_ELEMENTARY_PROCEDURES::SuccessfulOutcome_t::encode(c.procedureCode.get_index(), v);
1330                 };
1331         };
1332         value_t& ref_value() {return value;}
1333         value_t const& ref_value() const {return value;}
1334         template<typename V> void decode(V& v)
1335         {
1336                 v(procedureCode);
1337                 v(criticality);
1338                 v(value);
1339
1340         };
1341         template<typename V> void encode(V& v) const
1342         {
1343                 v(procedureCode);
1344                 v(criticality);
1345                 v(value);
1346
1347         };
1348         void clear()
1349         {
1350                 procedureCode.clear();
1351                 criticality.clear();
1352                 value.clear();
1353
1354         };
1355         private:
1356         procedureCode_t procedureCode;
1357         criticality_t   criticality;
1358         value_t value;
1359
1360 };
1361 /*
1362 UnsuccessfulOutcome ::= SEQUENCE {
1363         procedureCode   X2AP-ELEMENTARY-PROCEDURE.&procedureCode                ({X2AP-ELEMENTARY-PROCEDURES}),
1364         criticality             X2AP-ELEMENTARY-PROCEDURE.&criticality                  ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode}),
1365         value                   X2AP-ELEMENTARY-PROCEDURE.&UnsuccessfulOutcome  ({X2AP-ELEMENTARY-PROCEDURES}{@procedureCode})
1366 }
1367 */
1368
1369 struct UnsuccessfulOutcome : asn::sequence<3, 0, false, 0>
1370 {
1371         static constexpr const char* name() {return "UnsuccessfulOutcome";}
1372         using parent_t = asn::sequence<3, 0, false, 0>;
1373         struct procedureCode_t : X2AP_ELEMENTARY_PROCEDURES::procedureCode_t
1374         {
1375                 static constexpr const char* name() {return "procedureCode_t";}
1376                 using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::procedureCode_t;
1377                 template<typename V>  bool decode(V& v, UnsuccessfulOutcome const& c)
1378                 {
1379                         return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::decode(v);
1380                 };
1381                 template<typename V>  bool encode(V& v, UnsuccessfulOutcome const& c) const
1382                 {
1383                         return X2AP_ELEMENTARY_PROCEDURES::procedureCode_t::encode(v);
1384                 };
1385         };
1386         procedureCode_t& ref_procedureCode() {return procedureCode;}
1387         procedureCode_t const& ref_procedureCode() const {return procedureCode;}
1388         struct criticality_t : X2AP_ELEMENTARY_PROCEDURES::criticality_t
1389         {
1390                 static constexpr const char* name() {return "criticality_t";}
1391                 using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::criticality_t;
1392                 template<typename V>  bool decode(V& v, UnsuccessfulOutcome const& c)
1393                 {
1394                         return X2AP_ELEMENTARY_PROCEDURES::criticality_t::decode(c.procedureCode.get_index(), v);
1395                 };
1396                 template<typename V>  bool encode(V& v, UnsuccessfulOutcome const& c) const
1397                 {
1398                         return X2AP_ELEMENTARY_PROCEDURES::criticality_t::encode(c.procedureCode.get_index(), v);
1399                 };
1400         };
1401         criticality_t& ref_criticality() {return criticality;}
1402         criticality_t const& ref_criticality() const {return criticality;}
1403         struct value_t : X2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t
1404         {
1405                 static constexpr const char* name() {return "value_t";}
1406                 using parent_t = typename X2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t;
1407                 template<typename V>  bool decode(V& v, UnsuccessfulOutcome const& c)
1408                 {
1409                         return X2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t::decode(c.procedureCode.get_index(), v);
1410                 };
1411                 template<typename V>  bool encode(V& v, UnsuccessfulOutcome const& c) const
1412                 {
1413                         return X2AP_ELEMENTARY_PROCEDURES::UnsuccessfulOutcome_t::encode(c.procedureCode.get_index(), v);
1414                 };
1415         };
1416         value_t& ref_value() {return value;}
1417         value_t const& ref_value() const {return value;}
1418         template<typename V> void decode(V& v)
1419         {
1420                 v(procedureCode);
1421                 v(criticality);
1422                 v(value);
1423
1424         };
1425         template<typename V> void encode(V& v) const
1426         {
1427                 v(procedureCode);
1428                 v(criticality);
1429                 v(value);
1430
1431         };
1432         void clear()
1433         {
1434                 procedureCode.clear();
1435                 criticality.clear();
1436                 value.clear();
1437
1438         };
1439         private:
1440         procedureCode_t procedureCode;
1441         criticality_t   criticality;
1442         value_t value;
1443
1444 };
1445 /*
1446 X2AP-PDU ::= CHOICE {
1447         initiatingMessage       InitiatingMessage,
1448         successfulOutcome       SuccessfulOutcome,
1449         unsuccessfulOutcome     UnsuccessfulOutcome,
1450         ...
1451 }
1452 */
1453
1454 struct X2AP_PDU : asn::choice<3, 0, true>
1455 {
1456         static constexpr const char* name() {return "X2AP-PDU";}
1457         using parent_t = asn::choice<3, 0, true>;
1458         index_type get_index() const {return index;}
1459         bool is_unknown() const {return index == 4;}
1460         void set_unknown() { set_index(4);  }
1461         ~X2AP_PDU() {clear();}
1462         struct initiatingMessage_t : InitiatingMessage
1463         {
1464                 static constexpr const char* name() {return "initiatingMessage_t";}
1465                 using parent_t = InitiatingMessage;
1466
1467         };
1468         struct successfulOutcome_t : SuccessfulOutcome
1469         {
1470                 static constexpr const char* name() {return "successfulOutcome_t";}
1471                 using parent_t = SuccessfulOutcome;
1472
1473         };
1474         struct unsuccessfulOutcome_t : UnsuccessfulOutcome
1475         {
1476                 static constexpr const char* name() {return "unsuccessfulOutcome_t";}
1477                 using parent_t = UnsuccessfulOutcome;
1478
1479         };
1480         void clear()
1481         {
1482                 switch(get_index())
1483                 {
1484                 case 1: var.destroy<initiatingMessage_t>(); break;
1485                 case 2: var.destroy<successfulOutcome_t>(); break;
1486                 case 3: var.destroy<unsuccessfulOutcome_t>(); break;
1487                 }
1488                 index = 0;
1489                 base::clear();
1490         }
1491         template<typename V> bool decode(size_t idx, V& v)
1492         {
1493                 clear();
1494                 switch(idx)
1495                 {
1496                 case 1: set_index(1); return v(var.build<initiatingMessage_t>());
1497                 case 2: set_index(2); return v(var.build<successfulOutcome_t>());
1498                 case 3: set_index(3); return v(var.build<unsuccessfulOutcome_t>());
1499                 }
1500                 return false;
1501
1502         }
1503         template<typename V> bool encode(V& v) const
1504         {
1505                 switch(get_index())
1506                 {
1507                 case 1: return v(var.as<initiatingMessage_t>());
1508                 case 2: return v(var.as<successfulOutcome_t>());
1509                 case 3: return v(var.as<unsuccessfulOutcome_t>());
1510                 }
1511                 return false;
1512         }
1513         template<typename V> static inline void enumerate(V& v)
1514         {
1515                 v.template operator()<initiatingMessage_t>(1);
1516                 v.template operator()<successfulOutcome_t>(2);
1517                 v.template operator()<unsuccessfulOutcome_t>(3);
1518
1519         }
1520         initiatingMessage_t& select_initiatingMessage() { if(get_index() != 1) { clear(); set_index(1); return var.build<initiatingMessage_t>();} return var.as<initiatingMessage_t>();}
1521         initiatingMessage_t const* get_initiatingMessage() const { if(get_index() == 1) { return &var.as<initiatingMessage_t>();} return nullptr; }
1522         successfulOutcome_t& select_successfulOutcome() { if(get_index() != 2) { clear(); set_index(2); return var.build<successfulOutcome_t>();} return var.as<successfulOutcome_t>();}
1523         successfulOutcome_t const* get_successfulOutcome() const { if(get_index() == 2) { return &var.as<successfulOutcome_t>();} return nullptr; }
1524         unsuccessfulOutcome_t& select_unsuccessfulOutcome() { if(get_index() != 3) { clear(); set_index(3); return var.build<unsuccessfulOutcome_t>();} return var.as<unsuccessfulOutcome_t>();}
1525         unsuccessfulOutcome_t const* get_unsuccessfulOutcome() const { if(get_index() == 3) { return &var.as<unsuccessfulOutcome_t>();} return nullptr; }
1526         private:
1527         void set_index(index_type i) {index = i; base::set();}
1528         union union_type
1529         {
1530                 char dummy1[sizeof(initiatingMessage_t)];
1531                 char dummy2[sizeof(successfulOutcome_t)];
1532                 char dummy3[sizeof(unsuccessfulOutcome_t)];
1533
1534         };
1535         asn::variant<sizeof(union_type)>        var;
1536         index_type      index {0};
1537 };