Files
smart_wasm/src/math_utils.cpp
2026-06-01 15:55:59 +08:00

89 lines
1.3 KiB
C++

#include "math_utils.h"
#include <cmath>
#include <cstdlib>
#include <iostream>
// 包含 emscripten 头文件
#ifdef __EMSCRIPTEN__
#include <emscripten.h>
#else
// 非 Emscripten 环境的替代定义
#define EMSCRIPTEN_KEEPALIVE
#endif
// 所有函数都加上 EMSCRIPTEN_KEEPALIVE
EMSCRIPTEN_KEEPALIVE
int add(int a, int b)
{
return a + b;
}
EMSCRIPTEN_KEEPALIVE
int subtract(int a, int b)
{
return a - b;
}
EMSCRIPTEN_KEEPALIVE
float multiply(float a, float b)
{
return a * b;
}
EMSCRIPTEN_KEEPALIVE
float divide(float a, float b)
{
if (b == 0.0f)
{
std::cerr << "Error: Division by zero" << std::endl;
return 0.0f;
}
return a / b;
}
EMSCRIPTEN_KEEPALIVE
int fibonacci(int n)
{
if (n <= 1)
return n;
return fibonacci(n - 1) + fibonacci(n - 2);
}
EMSCRIPTEN_KEEPALIVE
void *create_buffer(int size)
{
if (size <= 0)
return nullptr;
return malloc(size * sizeof(char));
}
EMSCRIPTEN_KEEPALIVE
void destroy_buffer(void *p)
{
if (p)
{
free(p);
}
}
EMSCRIPTEN_KEEPALIVE
int compute_sum(int *arr, int size)
{
if (arr == nullptr || size <= 0)
{
return 0;
}
int sum = 0;
for (int i = 0; i < size; i++)
{
sum += arr[i];
}
return sum;
}
EMSCRIPTEN_KEEPALIVE
const char *get_greeting()
{
return "Hello from Smart WebAssembly!";
}