#ifndef EXAMPLE_SWIG_ApI_H_ #define EXAMPLE_SWIG_ApI_H_ // This file is essentially a small unit test for the swig cmake scripts and the java array // classes. All it does it define a few simple functions for writing to and summing // arrays. The swig_test.java file then calls these C++ functions and checks if they work // correctly. // Let's use java_array.h, a tool for efficiently binding java native arrays to C++ // function arguments. You do this by putting this pair of include statements in your // swig_api.h file. Then after that you can use the java::array, java::array_view, and // java::array_view_crit classes. #include #ifdef SWIG %include #endif using namespace java; // SWIG can't expose templated functions to java. We declare these here as helper // functions to make the non-templated routines swig will expose easier to write. You can // see these java exposed methods below (i.e. sum(), sum_crit(), assign(), and // assign_crit()). template T tsum(const array_view_crit& arr) { T s = 0; for (auto& v : arr) s += v; return s; } template T tsum(const array_view& arr) { T s = 0; for (auto& v : arr) s += v; return s; } template void tassign(T& arr) { for (size_t i = 0; i < arr.size(); ++i) arr[i] = i; } // ---------------------------------------------------------------------------------------- // Now write some functions SWIG will expose to java. SWIG will automatically expose // pretty much any non-template C++ code to java. So just by defining these functions here // we expose them to java. // // All global C++ functions will appear in java as static member functions of class called // "global", which is where these sum and assign routines will appear. You can see // examples of java code that calls them in swig_test.java. inline int sum_crit(const array_view_crit& arr) { return tsum(arr); } inline int sum(const array_view& arr) { return tsum(arr); } inline void assign_crit(array_view_crit& arr) { tassign(arr); } inline void assign(array_view& arr) { tassign(arr); } inline int sum_crit(const array_view_crit& arr) { return tsum(arr); } inline int sum(const array_view& arr) { return tsum(arr); } inline void assign_crit(array_view_crit& arr) { tassign(arr); } inline void assign(array_view& arr) { tassign(arr); } inline int sum_crit(const array_view_crit& arr) { return tsum(arr); } inline int sum(const array_view& arr) { return tsum(arr); } inline void assign_crit(array_view_crit& arr) { tassign(arr); } inline void assign(array_view& arr) { tassign(arr); } inline int sum_crit(const array_view_crit& arr) { return tsum(arr); } inline int sum(const array_view& arr) { return tsum(arr); } inline void assign_crit(array_view_crit& arr) { tassign(arr); } inline void assign(array_view& arr) { tassign(arr); } inline double sum_crit(const array_view_crit& arr) { return tsum(arr); } inline double sum(const array_view& arr) { return tsum(arr); } inline void assign_crit(array_view_crit& arr) { tassign(arr); } inline void assign(array_view& arr) { tassign(arr); } inline float sum_crit(array arr) { array_view_crit a(arr); return tsum(a); } inline float sum(const array& arr) { array_view a(arr); return tsum(a); } inline void assign_crit(array_view_crit& arr) { tassign(arr); } inline void assign(array& arr) { array_view a(arr); tassign(a); } array make_an_array(size_t s) { array arr(s); array_view_crit a(arr); for (size_t i = 0; i < a.size(); ++i) a[i] = i; return arr; } // ---------------------------------------------------------------------------------------- #endif // EXAMPLE_SWIG_ApI_H_