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