32 #ifndef VSMC_CORE_ADAPTER_HPP
33 #define VSMC_CORE_ADAPTER_HPP
39 template <
typename,
template <
typename,
typename>
class,
41 template <
typename,
template <
typename,
typename>
class,
43 template <
typename,
template <
typename,
typename>
class,
45 template <
typename,
template <
typename,
typename>
class,
50 template <
typename T,
typename F,
typename BaseType>
61 initialize_param_dispatch(particle, param,
62 typename has_initialize_param_<F>::type());
67 pre_processor_dispatch(particle,
68 typename has_pre_processor_<F>::type());
73 post_processor_dispatch(particle,
74 typename has_post_processor_<F>::type());
92 void initialize_param_dispatch (
Particle<T> &particle,
void *param,
94 {f_.initialize_param(particle, param);}
97 {f_.pre_processor(particle);}
100 {f_.post_processor(particle);}
102 void initialize_param_dispatch
104 void pre_processor_dispatch
106 void post_processor_dispatch
112 template <
typename T,
typename F,
typename BaseType>
123 pre_processor_dispatch(iter, particle,
124 typename has_pre_processor_<F>::type());
129 post_processor_dispatch(iter, particle,
130 typename has_post_processor_<F>::type());
146 void pre_processor_dispatch (
std::
size_t iter,
Particle<T> &particle,
148 {f_.pre_processor(iter, particle);}
150 void post_processor_dispatch (std::size_t iter, Particle<T> &particle,
152 {f_.post_processor(iter, particle);}
154 void pre_processor_dispatch
156 void post_processor_dispatch
162 template <
typename T,
typename F,
typename BaseType>
173 pre_processor_dispatch(iter, particle,
174 typename has_pre_processor_<F>::type());
179 post_processor_dispatch(iter, particle,
180 typename has_post_processor_<F>::type());
196 void pre_processor_dispatch (
std::
size_t iter,
197 const
Particle<T> &particle, cxx11::true_type)
198 {f_.pre_processor(iter, particle);}
200 void post_processor_dispatch (std::size_t iter,
202 {f_.post_processor(iter, particle);}
204 void pre_processor_dispatch
206 void post_processor_dispatch
212 template <
typename T,
typename F,
typename BaseType>
222 {
return f_.path_grid(iter, particle);}
226 pre_processor_dispatch(iter, particle,
227 typename has_pre_processor_<F>::type());
232 post_processor_dispatch(iter, particle,
233 typename has_post_processor_<F>::type());
249 void pre_processor_dispatch (
std::
size_t iter,
250 const
Particle<T> &particle, cxx11::true_type)
251 {f_.pre_processor(iter, particle);}
253 void post_processor_dispatch (std::size_t iter,
255 {f_.post_processor(iter, particle);}
257 void pre_processor_dispatch
259 void post_processor_dispatch
265 template <
typename T,
typename BaseType>
270 typedef cxx11::function<void (Particle<T> &,
void *)>
272 typedef cxx11::function<void (Particle<T> &)>
274 typedef cxx11::function<void (Particle<T> &)>
281 initialize_param_(init_param),
282 pre_processor_(pre), post_processor_(post) {}
286 if (static_cast<bool>(initialize_param_))
287 initialize_param_(particle, param);
291 {
if (static_cast<bool>(pre_processor_)) pre_processor_(particle);}
294 {
if (static_cast<bool>(post_processor_)) post_processor_(particle);}
298 const initialize_param_type initialize_param_;
299 const pre_processor_type pre_processor_;
300 const post_processor_type post_processor_;
305 template <
typename T,
typename BaseType>
310 typedef cxx11::function<void (std::size_t, Particle<T> &)>
312 typedef cxx11::function<void (std::size_t, Particle<T> &)>
318 pre_processor_(pre), post_processor_(post) {}
321 {
if (static_cast<bool>(pre_processor_)) pre_processor_(iter, particle);}
324 {
if (static_cast<bool>(post_processor_)) post_processor_(iter, particle);}
328 const pre_processor_type pre_processor_;
329 const post_processor_type post_processor_;
334 template <
typename T,
typename BaseType>
339 typedef cxx11::function<void (std::size_t, const Particle<T> &)>
341 typedef cxx11::function<void (std::size_t, const Particle<T> &)>
347 pre_processor_(pre), post_processor_(post) {}
350 {
if (static_cast<bool>(pre_processor_)) pre_processor_(iter, particle);}
353 {
if (static_cast<bool>(post_processor_)) post_processor_(iter, particle);}
357 const pre_processor_type pre_processor_;
358 const post_processor_type post_processor_;
363 template <
typename T,
typename BaseType>
368 typedef cxx11::function<double (std::size_t, const Particle<T> &)>
370 typedef cxx11::function<void (std::size_t, const Particle<T> &)>
372 typedef cxx11::function<void (std::size_t, const Particle<T> &)>
379 path_grid_(path_grid), pre_processor_(pre), post_processor_(post) {}
382 {
return path_grid_(iter, particle);}
385 {
if (static_cast<bool>(pre_processor_)) pre_processor_(iter, particle);}
388 {
if (static_cast<bool>(post_processor_)) post_processor_(iter, particle);}
392 const path_grid_type path_grid_;
393 const pre_processor_type pre_processor_;
394 const post_processor_type post_processor_;
399 #endif // VSMC_CORE_ADAPTER_HPP
void pre_processor(Particle< T > &particle)
Particle class representing the whole particle set.
cxx11::function< void(std::size_t, const Particle< T > &)> pre_processor_type
const F & implementation() const
cxx11::function< void(Particle< T > &, void *)> initialize_param_type
void pre_processor(std::size_t iter, Particle< T > &particle)
cxx11::function< void(Particle< T > &)> pre_processor_type
cxx11::function< void(std::size_t, Particle< T > &)> pre_processor_type
PathEvalAdapterBase(const path_grid_type &path_grid, const pre_processor_type &pre=pre_processor_type(), const post_processor_type &post=post_processor_type())
const F & implementation() const
void pre_processor(std::size_t iter, Particle< T > &particle)
#define VSMC_DEFINE_METHOD_CHECKER(name, RT, Args)
void post_processor(std::size_t iter, const Particle< T > &particle)
void pre_processor(Particle< T > &particle)
cxx11::function< double(std::size_t, const Particle< T > &)> path_grid_type
Path evaluation class base.
Initialize class adapter base.
Path evaluation class adapter.
cxx11::function< void(std::size_t, const Particle< T > &)> post_processor_type
MoveAdapterBase(const pre_processor_type &pre=pre_processor_type(), const post_processor_type &post=post_processor_type())
MonitorEvalAdapterBase(const F &f)
void post_processor(Particle< T > &particle)
integral_constant< bool, false > false_type
cxx11::function< void(std::size_t, Particle< T > &)> post_processor_type
void post_processor(std::size_t iter, Particle< T > &particle)
PathEvalAdapterBase(const F &f)
cxx11::function< void(Particle< T > &)> post_processor_type
void pre_processor(std::size_t iter, const Particle< T > &particle)
void pre_processor(std::size_t iter, const Particle< T > &particle)
MoveAdapterBase(const F &f)
double path_grid(std::size_t iter, const Particle< T > &particle)
void pre_processor(std::size_t iter, const Particle< T > &particle)
const F & implementation() const
cxx11::function< void(std::size_t, const Particle< T > &)> post_processor_type
const F & implementation() const
void post_processor(std::size_t iter, Particle< T > &particle)
void post_processor(std::size_t iter, const Particle< T > &particle)
integral_constant< bool, true > true_type
double path_grid(std::size_t iter, const Particle< T > &particle)
void initialize_param(Particle< T > &particle, void *param)
void pre_processor(std::size_t iter, const Particle< T > &particle)
cxx11::function< void(std::size_t, const Particle< T > &)> pre_processor_type
void post_processor(std::size_t iter, const Particle< T > &particle)
void post_processor(Particle< T > &particle)
MonitorEvalAdapterBase(const pre_processor_type &pre=pre_processor_type(), const post_processor_type &post=post_processor_type())
void initialize_param(Particle< T > &particle, void *param)
Monitor evaluation class adapter.
void post_processor(std::size_t iter, const Particle< T > &particle)
InitializeAdapterBase(const F &f)
Initialize class adapter.
InitializeAdapterBase(const initialize_param_type &init_param=initialize_param_type(), const pre_processor_type &pre=pre_processor_type(), const post_processor_type &post=post_processor_type())