xo-numeric/xo-jit/example/ex_cpp/ex_cpp.cpp
Roland Conybeare 757dfed99c Add 'xo-jit/' from commit '855887df71'
git-subtree-dir: xo-jit
git-subtree-mainline: 35555df976
git-subtree-split: 855887df71
2025-05-11 01:54:47 -05:00

40 lines
736 B
C++

struct env_type;
struct closure_type {
double (*fnptr)(env_type * env, double x);
env_type * envptr;
};
double
sqrt(double x) {
return x/100;
}
double
wrap_sqrt(env_type * env, double x) {
return ::sqrt(x);
}
double twice(env_type * env, closure_type fnclosure, double x) {
double tmp1 = (*fnclosure.fnptr)(fnclosure.envptr, x);
double tmp2 = (*fnclosure.fnptr)(fnclosure.envptr, tmp1);
return tmp2;
}
closure_type make_some_closure()
{
closure_type closure;
closure.fnptr = &wrap_sqrt;
closure.envptr = nullptr;
return closure;
}
int main() {
closure_type closure = make_some_closure();
double y = twice(nullptr, closure, 4.0);
//std::cout << "y=" << y << std::endl;
}