NDDEM
emscripten_specific.h
Go to the documentation of this file.
1 #include "Preprocessor_macros.h"
2 
3 #define EMFUNCTION(val,name) function( #name, &Simulation<val>::name)
4 #define EMMACRO(r,state) EMMACRO2(BOOST_PP_TUPLE_ELEM(2, 0, state))
5 #define EMMACRO2(dim) \
6  class_<Simulation<dim>>("Simulation" XSTR(dim))\
7  .constructor<int>()\
8  .EMFUNCTION(dim,finalise_init)\
9  .EMFUNCTION(dim,interpret_command)\
10  .EMFUNCTION(dim,step_forward)\
11  .EMFUNCTION(dim,finalise)\
12  .EMFUNCTION(dim,getX)\
13  .EMFUNCTION(dim,getRadii)\
14  .EMFUNCTION(dim,setRadius)\
15  .EMFUNCTION(dim,setMass)\
16  .EMFUNCTION(dim,fixParticle)\
17  .EMFUNCTION(dim,setFrozen)\
18  .EMFUNCTION(dim,getOrientation)\
19  .EMFUNCTION(dim,getVelocity)\
20  .EMFUNCTION(dim,setVelocity)\
21  .EMFUNCTION(dim,getRotationRate)\
22  .EMFUNCTION(dim,setAngularVelocity)\
23  .EMFUNCTION(dim,getContactForce)\
24  .EMFUNCTION(dim,getContactInfos)\
25  .EMFUNCTION(dim,getBoundary)\
26  .EMFUNCTION(dim,setBoundary)\
27  .EMFUNCTION(dim,getWallForce)\
28  .EMFUNCTION(dim,setExternalForce)\
29  .EMFUNCTION(dim,getTime)\
30  .EMFUNCTION(dim,randomDrop)\
31  ;
32 
33 EMSCRIPTEN_BINDINGS(my_class_example) {
34  BOOST_PP_FOR((1, MAXDIM), PRED, OP, EMMACRO)
35  /*class_<Simulation<2>>("Simulation2")
36  .constructor<int>()
37  .function("finalise_init", &Simulation<2>::finalise_init)
38  .function("interpret_command", &Simulation<2>::interpret_command)
39  .function("step_forward", &Simulation<2>::step_forward)
40  .function("finalise", &Simulation<2>::finalise)
41  // .smart_ptr<std::shared_ptr<Simulation<3>>>("Simulation")
42  // .property("X", &Simulation<3>::getX, &Simulation<3>::setX)
43  .function("getX", &Simulation<2>::getX)
44  .function("getRadii", &Simulation<2>::getRadii)
45  .function("setRadius", &Simulation<2>::setRadius)
46  .function("setMass", &Simulation<2>::setMass)
47  .function("fixParticle", &Simulation<2>::fixParticle)
48  .function("setFrozen", &Simulation<2>::setFrozen)
49  .function("getOrientation", &Simulation<2>::getOrientation)
50  .function("getVelocity", &Simulation<2>::getVelocity)
51  .function("setVelocity", &Simulation<2>::setVelocity)
52  .function("getRotationRate", &Simulation<2>::getRotationRate)
53  .function("getContactForce", &Simulation<2>::getContactForce)
54  .function("getContactInfos", &Simulation<2>::getContactInfos)
55  // .function("getX2", &Simulation<3>::getX2)
56  .function("getBoundary", &Simulation<2>::getBoundary)
57  .function("setBoundary", &Simulation<2>::setBoundary)
58  .function("getWallForce", &Simulation<2>::getWallForce)
59  .function("setExternalForce", &Simulation<2>::setExternalForce)
60  .function("getTime", &Simulation<2>::getTime)
61  ;
62  class_<Simulation<3>>("Simulation3")
63  .constructor<int>()
64  .function("finalise_init", &Simulation<3>::finalise_init)
65  .function("interpret_command", &Simulation<3>::interpret_command)
66  .function("step_forward", &Simulation<3>::step_forward)
67  .function("finalise", &Simulation<3>::finalise)
68  // .smart_ptr<std::shared_ptr<Simulation<3>>>("Simulation")
69  // .property("X", &Simulation<3>::getX, &Simulation<3>::setX)
70  .function("getX", &Simulation<3>::getX)
71  .function("getRadii", &Simulation<3>::getRadii)
72  .function("setRadius", &Simulation<3>::setRadius)
73  .function("setMass", &Simulation<3>::setMass)
74  .function("fixParticle", &Simulation<3>::fixParticle)
75  .function("setFrozen", &Simulation<3>::setFrozen)
76  .function("getOrientation", &Simulation<3>::getOrientation)
77  .function("getVelocity", &Simulation<3>::getVelocity)
78  .function("getRotationRate", &Simulation<3>::getRotationRate)
79  .function("getContactForce", &Simulation<3>::getContactForce)
80  .function("getContactInfos", &Simulation<3>::getContactInfos)
81  // .function("getX2", &Simulation<3>::getX2)
82  .function("getBoundary", &Simulation<3>::getBoundary)
83  .function("setBoundary", &Simulation<3>::setBoundary)
84  .function("getWallForce", &Simulation<3>::getWallForce)
85  .function("setExternalForce", &Simulation<3>::setExternalForce)
86  .function("getTime", &Simulation<3>::getTime)
87  ;
88  class_<Simulation<4>>("Simulation4")
89  .constructor<int>()
90  .function("finalise_init", &Simulation<4>::finalise_init)
91  .function("interpret_command", &Simulation<4>::interpret_command)
92  .function("step_forward", &Simulation<4>::step_forward)
93  .function("finalise", &Simulation<4>::finalise)
94  // .smart_ptr<std::shared_ptr<Simulation<3>>>("Simulation")
95  // .property("X", &Simulation<3>::getX, &Simulation<3>::setX)
96  .function("getX", &Simulation<4>::getX)
97  .function("getRadii", &Simulation<4>::getRadii)
98  .function("setRadius", &Simulation<4>::setRadius)
99  .function("setMass", &Simulation<4>::setMass)
100  .function("fixParticle", &Simulation<4>::fixParticle)
101  .function("setFrozen", &Simulation<4>::setFrozen)
102  .function("getOrientation", &Simulation<4>::getOrientation)
103  .function("getVelocity", &Simulation<4>::getVelocity)
104  .function("getRotationRate", &Simulation<4>::getRotationRate)
105  .function("getContactForce", &Simulation<4>::getContactForce)
106  .function("getContactInfos", &Simulation<4>::getContactInfos)
107  // .function("getX2", &Simulation<3>::getX2)
108  .function("getBoundary", &Simulation<4>::getBoundary)
109  .function("setBoundary", &Simulation<4>::setBoundary)
110  .function("getWallForce", &Simulation<4>::getWallForce)
111  .function("setExternalForce", &Simulation<4>::setExternalForce)
112  .function("getTime", &Simulation<4>::getTime)
113  ;
114  class_<Simulation<5>>("Simulation5")
115  .constructor<int>()
116  .function("finalise_init", &Simulation<5>::finalise_init)
117  .function("interpret_command", &Simulation<5>::interpret_command)
118  .function("step_forward", &Simulation<5>::step_forward)
119  .function("finalise", &Simulation<5>::finalise)
120  // .smart_ptr<std::shared_ptr<Simulation<3>>>("Simulation")
121  // .property("X", &Simulation<3>::getX, &Simulation<3>::setX)
122  .function("getX", &Simulation<5>::getX)
123  .function("getRadii", &Simulation<5>::getRadii)
124  .function("setRadius", &Simulation<5>::setRadius)
125  .function("setMass", &Simulation<5>::setMass)
126  .function("fixParticle", &Simulation<5>::fixParticle)
127  .function("setFrozen", &Simulation<5>::setFrozen)
128  .function("getOrientation", &Simulation<5>::getOrientation)
129  .function("getVelocity", &Simulation<5>::getVelocity)
130  .function("getRotationRate", &Simulation<5>::getRotationRate)
131  .function("getContactForce", &Simulation<5>::getContactForce)
132  .function("getContactInfos", &Simulation<5>::getContactInfos)
133  // .function("getX2", &Simulation<3>::getX2)
134  .function("getBoundary", &Simulation<5>::getBoundary)
135  .function("setBoundary", &Simulation<5>::setBoundary)
136  .function("getWallForce", &Simulation<5>::getWallForce)
137  .function("setExternalForce", &Simulation<5>::setExternalForce)
138  .function("getTime", &Simulation<5>::getTime)
139  ;*/
140 
141 }
142 
143 // EMSCRIPTEN_BINDINGS(stl_wrappers) {
144 // emscripten::register_vector<double>("Vec1DDouble");
145 // emscripten::register_vector<std::vector<double>>("Vec2DDouble");
146 // }
147 
148 /*
149 namespace emscripten {
150 namespace internal {
151 
152 template <typename T, typename Allocator>
153 struct BindingType<std::vector<T, Allocator>> {
154  using ValBinding = BindingType<val>;
155  using WireType = ValBinding::WireType;
156 
157  static WireType toWireType(const std::vector<T, Allocator> &vec) {
158  return ValBinding::toWireType(val::array(vec));
159  }
160 
161  static std::vector<T, Allocator> fromWireType(WireType value) {
162  return vecFromJSArray<T>(ValBinding::fromWireType(value));
163  }
164 };
165 
166 template <typename T>
167 struct TypeID<T,
168  typename std::enable_if_t<std::is_same<
169  typename Canonicalized<T>::type,
170  std::vector<typename Canonicalized<T>::type::value_type,
171  typename Canonicalized<T>::type::allocator_type>>::value>> {
172  static constexpr TYPEID get() { return TypeID<val>::get(); }
173 };
174 
175 } // namespace internal
176 } // namespace emscripten*/
#define PRED(r, state)
Definition: Preprocessor_macros.h:6
#define OP(r, state)
Definition: Preprocessor_macros.h:12
#define EMMACRO(r, state)
Definition: emscripten_specific.h:4
EMSCRIPTEN_BINDINGS(my_class_example)
Definition: emscripten_specific.h:33
#define MAXDIM
Definition: DEMND.cpp:14