• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /**
2  * Copyright (c) 2024 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
11  * either express or implied. See the License for the specific language governing permissions and limitations under the
12  * License.
13  */
14 
15 #include <cassert>
16 #include <cstdint>
17 #include "libabckit/include/c/abckit.h"
18 #include "libabckit/include/c/extensions/arkts/metadata_arkts.h"
19 
20 #include "libabckit/src/macros.h"
21 #include "scoped_timer.h"
22 
23 #include "libabckit/src/metadata_inspect_impl.h"
24 #include "libabckit/src/adapter_dynamic/metadata_modify_dynamic.h"
25 #include "libabckit/src/adapter_static/metadata_modify_static.h"
26 
27 // CC-OFFNXT(G.PRE.02) code readability
28 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
29 #define LIBABCKIT_CHECK_SAME_TARGET(target1, target2)                  \
30     if ((target1) != (target2)) {                                      \
31         libabckit::statuses::SetLastError(ABCKIT_STATUS_WRONG_TARGET); \
32         /* CC-OFFNXT(G.PRE.05) code generation */                      \
33         return nullptr;                                                \
34     }
35 
36 // CC-OFFNXT(G.PRE.02) code readability
37 // NOLINTNEXTLINE(cppcoreguidelines-macro-usage)
38 #define LIBABCKIT_CHECK_SAME_TARGET_VOID(target1, target2)             \
39     if ((target1) != (target2)) {                                      \
40         libabckit::statuses::SetLastError(ABCKIT_STATUS_WRONG_TARGET); \
41         /* CC-OFFNXT(G.PRE.05) code generation */                      \
42         return;                                                        \
43     }
44 
45 namespace libabckit {
46 
47 // ========================================
48 // File
49 // ========================================
50 
FileAddExternalModuleArktsV1(AbckitFile * file,const struct AbckitArktsV1ExternalModuleCreateParams * params)51 extern "C" AbckitArktsModule *FileAddExternalModuleArktsV1(AbckitFile *file,
52                                                            const struct AbckitArktsV1ExternalModuleCreateParams *params)
53 {
54     LIBABCKIT_CLEAR_LAST_ERROR;
55     LIBABCKIT_IMPLEMENTED;
56     LIBABCKIT_TIME_EXEC;
57 
58     LIBABCKIT_BAD_ARGUMENT(file, nullptr);
59     LIBABCKIT_BAD_ARGUMENT(params, nullptr);
60     LIBABCKIT_BAD_ARGUMENT(params->name, nullptr);
61 
62     switch (file->frontend) {
63         case Mode::DYNAMIC:
64             return FileAddExternalArkTsV1Module(file, params);
65         case Mode::STATIC:
66             statuses::SetLastError(ABCKIT_STATUS_UNSUPPORTED);
67             return nullptr;
68         default:
69             LIBABCKIT_UNREACHABLE;
70     }
71 }
72 
73 // ========================================
74 // Module
75 // ========================================
76 
ModuleAddImportFromArktsV1ToArktsV1(AbckitArktsModule * importing,AbckitArktsModule * imported,const AbckitArktsImportFromDynamicModuleCreateParams * params)77 extern "C" AbckitArktsImportDescriptor *ModuleAddImportFromArktsV1ToArktsV1(
78     AbckitArktsModule *importing, AbckitArktsModule *imported,
79     const AbckitArktsImportFromDynamicModuleCreateParams *params)
80 {
81     LIBABCKIT_CLEAR_LAST_ERROR;
82     LIBABCKIT_IMPLEMENTED;
83     LIBABCKIT_TIME_EXEC;
84 
85     LIBABCKIT_BAD_ARGUMENT(importing, nullptr);
86     LIBABCKIT_BAD_ARGUMENT(imported, nullptr);
87 
88     LIBABCKIT_BAD_ARGUMENT(params, nullptr);
89     LIBABCKIT_BAD_ARGUMENT(params->name, nullptr);
90     LIBABCKIT_BAD_ARGUMENT(params->alias, nullptr);
91 
92     LIBABCKIT_INTERNAL_ERROR(importing->core, nullptr);
93     LIBABCKIT_INTERNAL_ERROR(imported->core, nullptr);
94 
95     if (importing->core->target != ABCKIT_TARGET_ARK_TS_V1) {
96         statuses::SetLastError(ABCKIT_STATUS_WRONG_TARGET);
97         return nullptr;
98     }
99 
100     LIBABCKIT_CHECK_SAME_TARGET(importing->core->target, imported->core->target);
101 
102     return ModuleAddImportFromDynamicModuleDynamic(importing->core, imported->core, params);
103 }
104 
ModuleAddImportFromArktsV2ToArktsV2(AbckitArktsModule *,AbckitArktsModule *,const AbckitArktsImportFromDynamicModuleCreateParams *)105 extern "C" AbckitArktsImportDescriptor *ModuleAddImportFromArktsV2ToArktsV2(
106     AbckitArktsModule * /*importing*/, AbckitArktsModule * /*imported*/,
107     const AbckitArktsImportFromDynamicModuleCreateParams * /*params*/)
108 {
109     LIBABCKIT_CLEAR_LAST_ERROR;
110     LIBABCKIT_IMPLEMENTED;
111     LIBABCKIT_TIME_EXEC;
112 
113     statuses::SetLastError(ABCKIT_STATUS_UNSUPPORTED);
114     return nullptr;
115 }
116 
ModuleRemoveImport(AbckitArktsModule * m,AbckitArktsImportDescriptor * i)117 extern "C" void ModuleRemoveImport(AbckitArktsModule *m, AbckitArktsImportDescriptor *i)
118 {
119     LIBABCKIT_CLEAR_LAST_ERROR;
120     LIBABCKIT_IMPLEMENTED;
121     LIBABCKIT_TIME_EXEC;
122 
123     LIBABCKIT_BAD_ARGUMENT_VOID(m)
124     LIBABCKIT_BAD_ARGUMENT_VOID(i)
125 
126     LIBABCKIT_INTERNAL_ERROR_VOID(m->core);
127     LIBABCKIT_INTERNAL_ERROR_VOID(i->core);
128 
129     auto mt = m->core->target;
130     auto it = i->core->importingModule->target;
131 
132     LIBABCKIT_CHECK_SAME_TARGET_VOID(mt, it);
133 
134     switch (mt) {
135         case ABCKIT_TARGET_ARK_TS_V1:
136             return ModuleRemoveImportDynamic(m->core, i);
137         case ABCKIT_TARGET_ARK_TS_V2:
138             statuses::SetLastError(ABCKIT_STATUS_UNSUPPORTED);
139             return;
140         default:
141             LIBABCKIT_UNREACHABLE;
142     }
143 }
144 
ModuleAddExportFromArktsV1ToArktsV1(AbckitArktsModule * exporting,AbckitArktsModule * exported,const AbckitArktsDynamicModuleExportCreateParams * params)145 extern "C" AbckitArktsExportDescriptor *ModuleAddExportFromArktsV1ToArktsV1(
146     AbckitArktsModule *exporting, AbckitArktsModule *exported, const AbckitArktsDynamicModuleExportCreateParams *params)
147 {
148     LIBABCKIT_CLEAR_LAST_ERROR;
149     LIBABCKIT_IMPLEMENTED;
150     LIBABCKIT_TIME_EXEC;
151 
152     LIBABCKIT_BAD_ARGUMENT(exporting, nullptr);
153     LIBABCKIT_BAD_ARGUMENT(exported, nullptr);
154     LIBABCKIT_BAD_ARGUMENT(params, nullptr);
155     LIBABCKIT_BAD_ARGUMENT(params->name, nullptr);
156 
157     LIBABCKIT_INTERNAL_ERROR(exporting->core, nullptr);
158     LIBABCKIT_INTERNAL_ERROR(exported->core, nullptr);
159 
160     if (exporting->core->target != ABCKIT_TARGET_ARK_TS_V1) {
161         statuses::SetLastError(ABCKIT_STATUS_WRONG_TARGET);
162         return nullptr;
163     }
164 
165     LIBABCKIT_CHECK_SAME_TARGET(exporting->core->target, exported->core->target);
166 
167     return DynamicModuleAddExportDynamic(exporting->core, exported->core, params);
168 }
169 
ModuleAddExportFromArktsV2ToArktsV2(AbckitArktsModule *,AbckitArktsModule *,const AbckitArktsDynamicModuleExportCreateParams *)170 extern "C" AbckitArktsExportDescriptor *ModuleAddExportFromArktsV2ToArktsV2(
171     AbckitArktsModule * /*exporting*/ /* assert(exporting.target === AbckitTarget_ArkTS_v2) */,
172     AbckitArktsModule * /*exported*/ /* assert(exporting.target === AbckitTarget_ArkTS_v2) */,
173     const AbckitArktsDynamicModuleExportCreateParams * /*params*/)
174 {
175     LIBABCKIT_CLEAR_LAST_ERROR;
176     LIBABCKIT_IMPLEMENTED;
177     LIBABCKIT_TIME_EXEC;
178 
179     statuses::SetLastError(ABCKIT_STATUS_UNSUPPORTED);
180     return nullptr;
181 }
182 
ModuleRemoveExport(AbckitArktsModule * m,AbckitArktsExportDescriptor * e)183 extern "C" void ModuleRemoveExport(AbckitArktsModule *m, AbckitArktsExportDescriptor *e)
184 {
185     LIBABCKIT_CLEAR_LAST_ERROR;
186     LIBABCKIT_IMPLEMENTED;
187     LIBABCKIT_TIME_EXEC;
188 
189     LIBABCKIT_BAD_ARGUMENT_VOID(m)
190     LIBABCKIT_BAD_ARGUMENT_VOID(e)
191 
192     LIBABCKIT_INTERNAL_ERROR_VOID(m->core);
193     LIBABCKIT_INTERNAL_ERROR_VOID(e->core);
194 
195     auto mt = m->core->target;
196     auto et = e->core->exportingModule->target;
197 
198     LIBABCKIT_CHECK_SAME_TARGET_VOID(mt, et);
199 
200     switch (mt) {
201         case ABCKIT_TARGET_ARK_TS_V1:
202             return ModuleRemoveExportDynamic(m->core, e);
203         case ABCKIT_TARGET_ARK_TS_V2:
204             statuses::SetLastError(ABCKIT_STATUS_UNSUPPORTED);
205             return;
206         default:
207             LIBABCKIT_UNREACHABLE;
208     }
209 }
210 
ModuleAddAnnotationInterface(AbckitArktsModule * m,const AbckitArktsAnnotationInterfaceCreateParams * params)211 extern "C" AbckitArktsAnnotationInterface *ModuleAddAnnotationInterface(
212     AbckitArktsModule *m, const AbckitArktsAnnotationInterfaceCreateParams *params)
213 {
214     LIBABCKIT_CLEAR_LAST_ERROR;
215     LIBABCKIT_IMPLEMENTED;
216     LIBABCKIT_TIME_EXEC;
217 
218     LIBABCKIT_BAD_ARGUMENT(m, nullptr);
219     LIBABCKIT_BAD_ARGUMENT(params, nullptr);
220     LIBABCKIT_BAD_ARGUMENT(params->name, nullptr);
221 
222     LIBABCKIT_INTERNAL_ERROR(m->core, nullptr);
223 
224     switch (m->core->target) {
225         case ABCKIT_TARGET_ARK_TS_V1:
226             return ModuleAddAnnotationInterfaceDynamic(m->core, params);
227         case ABCKIT_TARGET_ARK_TS_V2:
228             statuses::SetLastError(ABCKIT_STATUS_UNSUPPORTED);
229             return nullptr;
230         default:
231             LIBABCKIT_UNREACHABLE;
232     }
233 }
234 
235 // ========================================
236 // Class
237 // ========================================
238 
ClassAddAnnotation(AbckitArktsClass * klass,const AbckitArktsAnnotationCreateParams * params)239 extern "C" AbckitArktsAnnotation *ClassAddAnnotation(AbckitArktsClass *klass,
240                                                      const AbckitArktsAnnotationCreateParams *params)
241 {
242     LIBABCKIT_CLEAR_LAST_ERROR;
243     LIBABCKIT_IMPLEMENTED;
244     LIBABCKIT_TIME_EXEC;
245 
246     LIBABCKIT_BAD_ARGUMENT(klass, nullptr);
247     LIBABCKIT_BAD_ARGUMENT(params, nullptr);
248     LIBABCKIT_BAD_ARGUMENT(params->ai, nullptr);
249 
250     LIBABCKIT_INTERNAL_ERROR(klass->core, nullptr);
251     LIBABCKIT_INTERNAL_ERROR(params->ai->core, nullptr);
252 
253     auto kt = klass->core->owningModule->target;
254     auto at = params->ai->core->owningModule->target;
255 
256     LIBABCKIT_CHECK_SAME_TARGET(kt, at);
257 
258     switch (kt) {
259         case ABCKIT_TARGET_ARK_TS_V1:
260             return ClassAddAnnotationDynamic(klass->core, params);
261         case ABCKIT_TARGET_ARK_TS_V2:
262             statuses::SetLastError(ABCKIT_STATUS_UNSUPPORTED);
263             return nullptr;
264         default:
265             LIBABCKIT_UNREACHABLE;
266     }
267 }
268 
ClassRemoveAnnotation(AbckitArktsClass * klass,AbckitArktsAnnotation * anno)269 extern "C" void ClassRemoveAnnotation(AbckitArktsClass *klass, AbckitArktsAnnotation *anno)
270 {
271     LIBABCKIT_CLEAR_LAST_ERROR;
272     LIBABCKIT_IMPLEMENTED;
273     LIBABCKIT_TIME_EXEC;
274 
275     LIBABCKIT_BAD_ARGUMENT_VOID(klass);
276     LIBABCKIT_BAD_ARGUMENT_VOID(anno);
277 
278     LIBABCKIT_INTERNAL_ERROR_VOID(klass->core);
279     LIBABCKIT_INTERNAL_ERROR_VOID(anno->core);
280 
281     auto kt = klass->core->owningModule->target;
282     auto at = anno->core->ai->owningModule->target;
283 
284     LIBABCKIT_CHECK_SAME_TARGET_VOID(kt, at);
285 
286     switch (kt) {
287         case ABCKIT_TARGET_ARK_TS_V1:
288             return ClassRemoveAnnotationDynamic(klass->core, anno->core);
289         case ABCKIT_TARGET_ARK_TS_V2:
290             statuses::SetLastError(ABCKIT_STATUS_UNSUPPORTED);
291             return;
292         default:
293             LIBABCKIT_UNREACHABLE;
294     }
295 }
296 
297 // ========================================
298 // AnnotationInterface
299 // ========================================
300 
AnnotationInterfaceAddField(AbckitArktsAnnotationInterface * ai,const AbckitArktsAnnotationInterfaceFieldCreateParams * params)301 extern "C" AbckitArktsAnnotationInterfaceField *AnnotationInterfaceAddField(
302     AbckitArktsAnnotationInterface *ai, const AbckitArktsAnnotationInterfaceFieldCreateParams *params)
303 {
304     LIBABCKIT_CLEAR_LAST_ERROR;
305     LIBABCKIT_IMPLEMENTED;
306     LIBABCKIT_TIME_EXEC;
307 
308     LIBABCKIT_BAD_ARGUMENT(ai, nullptr);
309 
310     LIBABCKIT_BAD_ARGUMENT(params, nullptr);
311     LIBABCKIT_BAD_ARGUMENT(params->name, nullptr);
312     LIBABCKIT_BAD_ARGUMENT(params->type, nullptr);
313 
314     LIBABCKIT_INTERNAL_ERROR(ai->core, nullptr);
315 
316     switch (ai->core->owningModule->target) {
317         case ABCKIT_TARGET_ARK_TS_V1:
318             return AnnotationInterfaceAddFieldDynamic(ai->core, params);
319         case ABCKIT_TARGET_ARK_TS_V2:
320             statuses::SetLastError(ABCKIT_STATUS_UNSUPPORTED);
321             return nullptr;
322         default:
323             LIBABCKIT_UNREACHABLE;
324     }
325 }
326 
AnnotationInterfaceRemoveField(AbckitArktsAnnotationInterface * ai,AbckitArktsAnnotationInterfaceField * field)327 extern "C" void AnnotationInterfaceRemoveField(AbckitArktsAnnotationInterface *ai,
328                                                AbckitArktsAnnotationInterfaceField *field)
329 {
330     LIBABCKIT_CLEAR_LAST_ERROR;
331     LIBABCKIT_IMPLEMENTED;
332     LIBABCKIT_TIME_EXEC;
333 
334     LIBABCKIT_BAD_ARGUMENT_VOID(ai);
335     LIBABCKIT_BAD_ARGUMENT_VOID(field);
336 
337     LIBABCKIT_INTERNAL_ERROR_VOID(ai->core);
338     LIBABCKIT_INTERNAL_ERROR_VOID(field->core);
339 
340     switch (ai->core->owningModule->target) {
341         case ABCKIT_TARGET_ARK_TS_V1:
342             return AnnotationInterfaceRemoveFieldDynamic(ai->core, field->core);
343         case ABCKIT_TARGET_ARK_TS_V2:
344             statuses::SetLastError(ABCKIT_STATUS_UNSUPPORTED);
345             return;
346         default:
347             LIBABCKIT_UNREACHABLE;
348     }
349 }
350 
351 // ========================================
352 // Function
353 // ========================================
354 
FunctionAddAnnotation(AbckitArktsFunction * function,const AbckitArktsAnnotationCreateParams * params)355 extern "C" AbckitArktsAnnotation *FunctionAddAnnotation(AbckitArktsFunction *function,
356                                                         const AbckitArktsAnnotationCreateParams *params)
357 {
358     LIBABCKIT_CLEAR_LAST_ERROR;
359     LIBABCKIT_IMPLEMENTED;
360     LIBABCKIT_TIME_EXEC;
361 
362     LIBABCKIT_BAD_ARGUMENT(function, nullptr);
363     LIBABCKIT_BAD_ARGUMENT(params, nullptr);
364 
365     LIBABCKIT_INTERNAL_ERROR(function->core, nullptr);
366     LIBABCKIT_INTERNAL_ERROR(params->ai->core, nullptr);
367 
368     auto ft = function->core->owningModule->target;
369     auto at = params->ai->core->owningModule->target;
370 
371     LIBABCKIT_CHECK_SAME_TARGET(ft, at);
372 
373     switch (ft) {
374         case ABCKIT_TARGET_ARK_TS_V1:
375             return FunctionAddAnnotationDynamic(function->core, params);
376         case ABCKIT_TARGET_ARK_TS_V2:
377             statuses::SetLastError(ABCKIT_STATUS_UNSUPPORTED);
378             return nullptr;
379         default:
380             LIBABCKIT_UNREACHABLE;
381     }
382 }
383 
FunctionRemoveAnnotation(AbckitArktsFunction * function,AbckitArktsAnnotation * anno)384 extern "C" void FunctionRemoveAnnotation(AbckitArktsFunction *function, AbckitArktsAnnotation *anno)
385 {
386     LIBABCKIT_CLEAR_LAST_ERROR;
387     LIBABCKIT_IMPLEMENTED;
388     LIBABCKIT_TIME_EXEC;
389 
390     LIBABCKIT_BAD_ARGUMENT_VOID(function);
391     LIBABCKIT_BAD_ARGUMENT_VOID(anno);
392 
393     LIBABCKIT_INTERNAL_ERROR_VOID(function->core);
394     LIBABCKIT_INTERNAL_ERROR_VOID(anno->core);
395 
396     auto ft = function->core->owningModule->target;
397     auto at = anno->core->ai->owningModule->target;
398 
399     LIBABCKIT_CHECK_SAME_TARGET_VOID(ft, at);
400 
401     switch (ft) {
402         case ABCKIT_TARGET_ARK_TS_V1:
403             return FunctionRemoveAnnotationDynamic(function->core, anno->core);
404         case ABCKIT_TARGET_ARK_TS_V2:
405             statuses::SetLastError(ABCKIT_STATUS_UNSUPPORTED);
406             return;
407         default:
408             LIBABCKIT_UNREACHABLE;
409     }
410 }
411 
412 // ========================================
413 // Annotation
414 // ========================================
415 
AnnotationAddAnnotationElement(AbckitArktsAnnotation * anno,AbckitArktsAnnotationElementCreateParams * params)416 extern "C" AbckitArktsAnnotationElement *AnnotationAddAnnotationElement(
417     AbckitArktsAnnotation *anno, AbckitArktsAnnotationElementCreateParams *params)
418 {
419     LIBABCKIT_CLEAR_LAST_ERROR;
420     LIBABCKIT_IMPLEMENTED;
421     LIBABCKIT_TIME_EXEC;
422 
423     LIBABCKIT_BAD_ARGUMENT(anno, nullptr);
424 
425     LIBABCKIT_BAD_ARGUMENT(params, nullptr);
426     LIBABCKIT_BAD_ARGUMENT(params->name, nullptr);
427     LIBABCKIT_BAD_ARGUMENT(params->value, nullptr);
428 
429     LIBABCKIT_INTERNAL_ERROR(anno->core, nullptr);
430     AbckitCoreModule *module = anno->core->ai->owningModule;
431 
432     LIBABCKIT_INTERNAL_ERROR(module, nullptr);
433     LIBABCKIT_INTERNAL_ERROR(module->file, nullptr);
434 
435     switch (module->target) {
436         case ABCKIT_TARGET_ARK_TS_V1:
437             return AnnotationAddAnnotationElementDynamic(anno->core, params);
438         case ABCKIT_TARGET_ARK_TS_V2:
439             statuses::SetLastError(ABCKIT_STATUS_UNSUPPORTED);
440             return nullptr;
441         default:
442             LIBABCKIT_UNREACHABLE;
443     }
444 }
445 
AnnotationRemoveAnnotationElement(AbckitArktsAnnotation * anno,AbckitArktsAnnotationElement * elem)446 extern "C" void AnnotationRemoveAnnotationElement(AbckitArktsAnnotation *anno, AbckitArktsAnnotationElement *elem)
447 {
448     LIBABCKIT_CLEAR_LAST_ERROR;
449     LIBABCKIT_IMPLEMENTED;
450     LIBABCKIT_TIME_EXEC;
451 
452     LIBABCKIT_BAD_ARGUMENT_VOID(anno);
453     LIBABCKIT_BAD_ARGUMENT_VOID(elem);
454 
455     LIBABCKIT_INTERNAL_ERROR_VOID(anno->core->ai);
456 
457     AbckitCoreModule *module = anno->core->ai->owningModule;
458 
459     LIBABCKIT_INTERNAL_ERROR_VOID(module);
460     LIBABCKIT_INTERNAL_ERROR_VOID(module->file);
461 
462     switch (module->target) {
463         case ABCKIT_TARGET_ARK_TS_V1:
464             return AnnotationRemoveAnnotationElementDynamic(anno->core, elem->core);
465         case ABCKIT_TARGET_ARK_TS_V2:
466             statuses::SetLastError(ABCKIT_STATUS_UNSUPPORTED);
467             return;
468         default:
469             LIBABCKIT_UNREACHABLE;
470     }
471 }
472 
473 // ========================================
474 // Type
475 // ========================================
476 
477 // ========================================
478 // Value
479 // ========================================
480 
481 // ========================================
482 // String
483 // ========================================
484 
485 // ========================================
486 // LiteralArray
487 // ========================================
488 
489 AbckitArktsModifyApi g_arktsModifyApiImpl = {
490 
491     // ========================================
492     // File
493     // ========================================
494 
495     FileAddExternalModuleArktsV1,
496 
497     // ========================================
498     // Module
499     // ========================================
500 
501     ModuleAddImportFromArktsV1ToArktsV1, ModuleRemoveImport, ModuleAddExportFromArktsV1ToArktsV1, ModuleRemoveExport,
502     ModuleAddAnnotationInterface,
503 
504     // ========================================
505     // Class
506     // ========================================
507 
508     ClassAddAnnotation, ClassRemoveAnnotation,
509 
510     // ========================================
511     // AnnotationInterface
512     // ========================================
513 
514     AnnotationInterfaceAddField, AnnotationInterfaceRemoveField,
515 
516     // ========================================
517     // Function
518     // ========================================
519 
520     FunctionAddAnnotation, FunctionRemoveAnnotation,
521 
522     // ========================================
523     // Annotation
524     // ========================================
525 
526     AnnotationAddAnnotationElement, AnnotationRemoveAnnotationElement,
527 
528     // ========================================
529     // Type
530     // ========================================
531 
532     // ========================================
533     // Value
534     // ========================================
535 
536     // ========================================
537     // String
538     // ========================================
539 
540     // ========================================
541     // LiteralArray
542     // ========================================
543 
544     // ========================================
545     // LiteralArray
546     // ========================================
547 };
548 
549 }  // namespace libabckit
550 
551 #ifdef ABCKIT_ENABLE_MOCK_IMPLEMENTATION
552 #include "./mock/abckit_mock.h"
553 #endif
554 
AbckitGetArktsModifyApiImpl(AbckitApiVersion version)555 extern "C" AbckitArktsModifyApi const *AbckitGetArktsModifyApiImpl(AbckitApiVersion version)
556 {
557 #ifdef ABCKIT_ENABLE_MOCK_IMPLEMENTATION
558     return AbckitGetMockArktsModifyApiImpl(version);
559 #endif
560     switch (version) {
561         case ABCKIT_VERSION_RELEASE_1_0_0:
562             return &libabckit::g_arktsModifyApiImpl;
563         default:
564             libabckit::statuses::SetLastError(ABCKIT_STATUS_UNKNOWN_API_VERSION);
565             return nullptr;
566     }
567 }
568