Skip to content
Snippets Groups Projects
Commit e949e62e authored by Dominic Kempf's avatar Dominic Kempf
Browse files

Merge branch 'feature/bindtime' into 'master'

implement bindTime

See merge request !230
parent ae79aba6
Branches
No related merge requests found
//-*- tab-width: 4; c-basic-offset: 2; indent-tabs-mode: nil -*-
#ifndef DUNE_PDELAB_FUNCTION_BINDTIME_HH
#define DUNE_PDELAB_FUNCTION_BINDTIME_HH
#include <dune/common/indices.hh>
#include <dune/functions/common/signature.hh>
namespace Dune {
namespace PDELab {
template<typename F, typename Placeholder>
class SetTimeWrapper
{
public:
SetTimeWrapper(F&& f, Placeholder p)
: _f(f), _p(p)
{}
template<typename Domain>
auto operator()(const Domain & d) const
{
return swap_arguments(d,_t,_p);
}
void setTime(double t)
{
_t = t;
}
private:
double _t;
F _f;
Placeholder _p;
template<typename Domain>
auto swap_arguments(const Domain& d, double t, const index_constant<1>&) const
{
return _f(t,d);
}
template<typename Domain>
auto swap_arguments(const Domain& d, double t, const index_constant<2>&) const
{
return _f(d,t);
}
};
template<typename F, typename Placeholder>
SetTimeWrapper<F,Placeholder>
bindTime(F&& f, Placeholder p)
{
return SetTimeWrapper<F,Placeholder>(f,p);
}
} // end namespace PDELab
} // end namespace Dune
#endif // DUNE_PDELAB_FUNCTION_BINDTIME_HH
......@@ -2,6 +2,8 @@ add_subdirectory(fem)
dune_add_test(SOURCES testanalytic.cc)
dune_add_test(SOURCES testbindtime.cc)
dune_add_test(SOURCES testclock.cc)
dune_add_test(NAME testcomplexnumbers-istl
......
#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <iostream>
#include <dune/common/classname.hh>
#include <dune/pdelab/function/bindtime.hh>
int main()
{
auto f = [](double t, int i)
{
return i*t;
};
auto f2 = [](int i, double t)
{
return i*t;
};
auto f_t = Dune::PDELab::bindTime(f,Dune::Indices::_1);
auto f2_t = Dune::PDELab::bindTime(f2,Dune::Indices::_2);
f_t.setTime(1.5);
f2_t.setTime(0.75);
std::cout << f(1.5,2) << std::endl;
std::cout << f2(4,0.75) << std::endl;
std::cout << f_t(2) << std::endl;
std::cout << f2_t(4) << std::endl;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment