• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 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,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #include <cstdint>
16 #include <iostream>
17 
18 #include "enum_test.impl.hpp"
19 #include "stdexcept"
20 #include "taihe/runtime.hpp"
21 #include "taihe/string.hpp"
22 // Please delete <stdexcept> include when you implement
23 using namespace taihe;
24 
25 namespace {
26 static constexpr std::size_t COLOR_COUNT = 3;
27 static constexpr std::size_t WEEKDAY_COUNT = 7;
28 static constexpr std::size_t NUMTYPEI8_COUNT = 3;
29 static constexpr std::size_t NUMTYPEI16_COUNT = 3;
30 static constexpr std::size_t NUMTYPEI32_COUNT = 3;
31 static constexpr std::size_t NUMTYPEI64_COUNT = 3;
32 static constexpr std::size_t BOOL_COUNT = 3;
33 
NextEnum(::enum_test::Color color)34 ::enum_test::Color NextEnum(::enum_test::Color color)
35 {
36     return (::enum_test::Color::key_t)(((int)color.get_key() + 1) % COLOR_COUNT);
37 }
38 
GetValueOfEnum(::enum_test::Color color)39 taihe::string GetValueOfEnum(::enum_test::Color color)
40 {
41     return color.get_value();
42 }
43 
fromValueToEnum(string_view name)44 ::enum_test::Color fromValueToEnum(string_view name)
45 {
46     auto color = ::enum_test::Color::from_value(name);
47     if (!color.is_valid()) {
48         set_business_error(1, "Invalid enum value");
49     }
50     return color;
51 }
52 
NextEnumWeekday(::enum_test::Weekday day)53 ::enum_test::Weekday NextEnumWeekday(::enum_test::Weekday day)
54 {
55     return (::enum_test::Weekday::key_t)(((int)day.get_key() + 1) % WEEKDAY_COUNT);
56 }
57 
GetValueOfEnumWeekday(::enum_test::Weekday day)58 int32_t GetValueOfEnumWeekday(::enum_test::Weekday day)
59 {
60     return day.get_value();
61 }
62 
fromValueToEnumWeekday(int day)63 ::enum_test::Weekday fromValueToEnumWeekday(int day)
64 {
65     auto weekday = ::enum_test::Weekday::from_value(day);
66     if (!weekday.is_valid()) {
67         set_business_error(1, "Invalid enum value");
68     }
69     return weekday;
70 }
71 
NextEnumI8(::enum_test::NumTypeI8 numTypei8)72 ::enum_test::NumTypeI8 NextEnumI8(::enum_test::NumTypeI8 numTypei8)
73 {
74     return (::enum_test::NumTypeI8::key_t)(((int)numTypei8.get_key() + 1) % NUMTYPEI8_COUNT);
75 }
76 
NextEnumI16(::enum_test::NumTypeI16 numTypeI16)77 ::enum_test::NumTypeI16 NextEnumI16(::enum_test::NumTypeI16 numTypeI16)
78 {
79     return (::enum_test::NumTypeI16::key_t)(((int)numTypeI16.get_key() + 1) % NUMTYPEI16_COUNT);
80 }
81 
NextEnumI32(::enum_test::NumTypeI32 numTypeI32)82 ::enum_test::NumTypeI32 NextEnumI32(::enum_test::NumTypeI32 numTypeI32)
83 {
84     return (::enum_test::NumTypeI32::key_t)(((int)numTypeI32.get_key() + 1) % NUMTYPEI32_COUNT);
85 }
86 
NextEnumI64(::enum_test::NumTypeI64 numTypeI64)87 ::enum_test::NumTypeI64 NextEnumI64(::enum_test::NumTypeI64 numTypeI64)
88 {
89     return (::enum_test::NumTypeI64::key_t)(((int)numTypeI64.get_key() + 1) % NUMTYPEI64_COUNT);
90 }
91 
NextEnumString(::enum_test::EnumString enumString)92 ::enum_test::EnumString NextEnumString(::enum_test::EnumString enumString)
93 {
94     return (::enum_test::EnumString::key_t)(((int)enumString.get_key() + 1) % BOOL_COUNT);
95 }
96 
97 }  // namespace
98 
99 TH_EXPORT_CPP_API_nextEnum(NextEnum);
100 TH_EXPORT_CPP_API_getValueOfEnum(GetValueOfEnum);
101 TH_EXPORT_CPP_API_fromValueToEnum(fromValueToEnum);
102 TH_EXPORT_CPP_API_nextEnumWeekday(NextEnumWeekday);
103 TH_EXPORT_CPP_API_getValueOfEnumWeekday(GetValueOfEnumWeekday);
104 TH_EXPORT_CPP_API_fromValueToEnumWeekday(fromValueToEnumWeekday);
105 TH_EXPORT_CPP_API_nextEnumI8(NextEnumI8);
106 TH_EXPORT_CPP_API_nextEnumI16(NextEnumI16);
107 TH_EXPORT_CPP_API_nextEnumI32(NextEnumI32);
108 TH_EXPORT_CPP_API_nextEnumI64(NextEnumI64);
109 TH_EXPORT_CPP_API_nextEnumString(NextEnumString);