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)39taihe::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)58int32_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);