133eb0b6dSopenharmony_ci/* 233eb0b6dSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd. 333eb0b6dSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 433eb0b6dSopenharmony_ci * you may not use this file except in compliance with the License. 533eb0b6dSopenharmony_ci * You may obtain a copy of the License at 633eb0b6dSopenharmony_ci * 733eb0b6dSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 833eb0b6dSopenharmony_ci * 933eb0b6dSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1033eb0b6dSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1133eb0b6dSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1233eb0b6dSopenharmony_ci * See the License for the specific language governing permissions and 1333eb0b6dSopenharmony_ci * limitations under the License. 1433eb0b6dSopenharmony_ci */ 1533eb0b6dSopenharmony_ci 1633eb0b6dSopenharmony_ci#include <cstddef> 1733eb0b6dSopenharmony_ci 1833eb0b6dSopenharmony_ci#include "napi/native_api.h" 1933eb0b6dSopenharmony_ci#include "napi/native_node_api.h" 2033eb0b6dSopenharmony_ci 2133eb0b6dSopenharmony_ciextern const char _binary_calc_js_start[]; 2233eb0b6dSopenharmony_ciextern const char _binary_calc_js_end[]; 2333eb0b6dSopenharmony_ci 2433eb0b6dSopenharmony_ci/* 2533eb0b6dSopenharmony_ci * Sync callback 2633eb0b6dSopenharmony_ci */ 2733eb0b6dSopenharmony_cistatic napi_value Add(napi_env env, napi_callback_info info) 2833eb0b6dSopenharmony_ci{ 2933eb0b6dSopenharmony_ci size_t requireArgc = 2; 3033eb0b6dSopenharmony_ci size_t argc = 2; 3133eb0b6dSopenharmony_ci napi_value args[2] = { nullptr }; 3233eb0b6dSopenharmony_ci NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr)); 3333eb0b6dSopenharmony_ci 3433eb0b6dSopenharmony_ci NAPI_ASSERT(env, argc >= requireArgc, "Wrong number of arguments"); 3533eb0b6dSopenharmony_ci 3633eb0b6dSopenharmony_ci napi_valuetype valuetype0; 3733eb0b6dSopenharmony_ci NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0)); 3833eb0b6dSopenharmony_ci 3933eb0b6dSopenharmony_ci napi_valuetype valuetype1; 4033eb0b6dSopenharmony_ci NAPI_CALL(env, napi_typeof(env, args[1], &valuetype1)); 4133eb0b6dSopenharmony_ci 4233eb0b6dSopenharmony_ci NAPI_ASSERT(env, valuetype0 == napi_number && valuetype1 == napi_number, "Wrong argument type. Numbers expected."); 4333eb0b6dSopenharmony_ci 4433eb0b6dSopenharmony_ci double value0; 4533eb0b6dSopenharmony_ci NAPI_CALL(env, napi_get_value_double(env, args[0], &value0)); 4633eb0b6dSopenharmony_ci 4733eb0b6dSopenharmony_ci double value1; 4833eb0b6dSopenharmony_ci NAPI_CALL(env, napi_get_value_double(env, args[1], &value1)); 4933eb0b6dSopenharmony_ci 5033eb0b6dSopenharmony_ci napi_value sum; 5133eb0b6dSopenharmony_ci NAPI_CALL(env, napi_create_double(env, value0 + value1, &sum)); 5233eb0b6dSopenharmony_ci 5333eb0b6dSopenharmony_ci return sum; 5433eb0b6dSopenharmony_ci} 5533eb0b6dSopenharmony_ci 5633eb0b6dSopenharmony_ci/* 5733eb0b6dSopenharmony_ci * function for module exports 5833eb0b6dSopenharmony_ci */ 5933eb0b6dSopenharmony_cistatic napi_value Init(napi_env env, napi_value exports) 6033eb0b6dSopenharmony_ci{ 6133eb0b6dSopenharmony_ci /* 6233eb0b6dSopenharmony_ci * Properties define 6333eb0b6dSopenharmony_ci */ 6433eb0b6dSopenharmony_ci napi_property_descriptor desc[] = { 6533eb0b6dSopenharmony_ci DECLARE_NAPI_FUNCTION("add", Add), 6633eb0b6dSopenharmony_ci }; 6733eb0b6dSopenharmony_ci NAPI_CALL(env, napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc)); 6833eb0b6dSopenharmony_ci return exports; 6933eb0b6dSopenharmony_ci} 7033eb0b6dSopenharmony_ci 7133eb0b6dSopenharmony_ciextern "C" __attribute__((visibility("default"))) void NAPI_calc_GetJSCode(const char** buf, int* bufLen) 7233eb0b6dSopenharmony_ci{ 7333eb0b6dSopenharmony_ci if (buf != nullptr) { 7433eb0b6dSopenharmony_ci *buf = _binary_calc_js_start; 7533eb0b6dSopenharmony_ci } 7633eb0b6dSopenharmony_ci 7733eb0b6dSopenharmony_ci if (bufLen != nullptr) { 7833eb0b6dSopenharmony_ci *bufLen = _binary_calc_js_end - _binary_calc_js_start; 7933eb0b6dSopenharmony_ci } 8033eb0b6dSopenharmony_ci} 8133eb0b6dSopenharmony_ci 8233eb0b6dSopenharmony_ci/* 8333eb0b6dSopenharmony_ci * Module define 8433eb0b6dSopenharmony_ci */ 8533eb0b6dSopenharmony_cistatic napi_module calcModule = { 8633eb0b6dSopenharmony_ci .nm_version = 1, 8733eb0b6dSopenharmony_ci .nm_flags = 0, 8833eb0b6dSopenharmony_ci .nm_filename = nullptr, 8933eb0b6dSopenharmony_ci .nm_register_func = Init, 9033eb0b6dSopenharmony_ci .nm_modname = "calc", 9133eb0b6dSopenharmony_ci .nm_priv = ((void*)0), 9233eb0b6dSopenharmony_ci .reserved = { 0 }, 9333eb0b6dSopenharmony_ci}; 9433eb0b6dSopenharmony_ci/* 9533eb0b6dSopenharmony_ci * Module register function 9633eb0b6dSopenharmony_ci */ 9733eb0b6dSopenharmony_ciextern "C" __attribute__((constructor)) void CalcRegisterModule(void) 9833eb0b6dSopenharmony_ci{ 9933eb0b6dSopenharmony_ci napi_module_register(&calcModule); 10033eb0b6dSopenharmony_ci} 101