[dune-functions] [Dune-functions-commit] [Commit] dune-functions - 0d929aa: Add staticForLoop
Christian Engwer
christian.engwer at uni-muenster.de
Wed Sep 23 14:23:34 CEST 2015
typetree for the time being:-)
On Wed, Sep 23, 2015 at 02:05:07PM +0200, Carsten Gräser wrote:
> New commit, appeared at Wed Sep 23 14:05:07 2015 +0200
> as part of the following ref changes:
>
> branch refs/heads/master updated from 9137cfb -> c682840
>
> Browsable version: http://cgit.dune-project.org/repositories/dune-functions/commit/?id=0d929aa3cbc49d5d6c50d3c478457ac66d7ae255
>
> ======================================================================
>
> commit 0d929aa3cbc49d5d6c50d3c478457ac66d7ae255
> Author: Carsten Gräser <graeser at mi.fu-berlin.de>
> Date: Wed Sep 23 13:56:53 2015 +0200
>
> Add staticForLoop
>
> In contrast to the one from dune-common this does not include
> the end and can be used with generic lambdas making code much
> more readable. Maybe we'd like to have this in dune-common or
> dune-typetree.
>
> dune/functions/common/CMakeLists.txt | 1 +
> dune/functions/common/staticforloop.hh | 57 ++++++++++++++++++++++++++++++++++
> 2 files changed, 58 insertions(+)
> create mode 100644 dune/functions/common/staticforloop.hh
>
>
>
> diff --git a/dune/functions/common/CMakeLists.txt b/dune/functions/common/CMakeLists.txt
> index a3ee6f6..e321baf 100644
> --- a/dune/functions/common/CMakeLists.txt
> +++ b/dune/functions/common/CMakeLists.txt
> @@ -15,6 +15,7 @@ install(FILES
> optional.hh
> polymorphicsmallobject.hh
> signature.hh
> + staticforloop.hh
> treedata.hh
> type_traits.hh
> typeerasure.hh
> diff --git a/dune/functions/common/staticforloop.hh b/dune/functions/common/staticforloop.hh
> new file mode 100644
> index 0000000..17ecc51
> --- /dev/null
> +++ b/dune/functions/common/staticforloop.hh
> @@ -0,0 +1,57 @@
> +// -*- tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
> +// vi: set et ts=4 sw=2 sts=2:
> +#ifndef DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH
> +#define DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH
> +
> +
> +#include <dune/functions/common/concept.hh>
> +#include <dune/functions/common/type_traits.hh>
> +#include <dune/functions/functionspacebases/concepts.hh>
> +
> +
> +namespace Dune {
> +namespace Functions {
> +
> +
> +
> +template<class ST, ST begin, ST end>
> +struct StaticForLoop
> +{
> + template<class F, class...Args>
> + static void apply(F&& f, Args&&... args)
> + {
> + f(std::integral_constant<ST, begin>(), std::forward<Args>(args)...);
> + StaticForLoop<ST, begin+1, end>::apply(std::forward<F>(f), std::forward<Args>(args)...);
> + }
> +};
> +
> +template<class ST, ST end>
> +struct StaticForLoop<ST, end, end>
> +{
> + template<class F, class...Args>
> + static void apply(F&& f, Args&&...)
> + {}
> +};
> +
> +/**
> + * \brief Static for loop
> + *
> + * Run static for-loop from 'begin' to 'end-1' with functor.
> + * The functor is called with TypeTree::index_constant<i>
> + * as first argument. All other arguments of this method
> + * are forwarded to the functor.
> + */
> +template<std::size_t begin_t, std::size_t end_t, class F, class... Args>
> +void staticForLoop(F&& f, Args&&... args)
> +{
> + StaticForLoop<std::size_t, begin_t, end_t>::apply(std::forward<F>(f), std::forward<Args>(args)...);
> +}
> +
> +
> +
> +} // namespace Dune::Functions
> +} // namespace Dune
> +
> +
> +
> +#endif //DUNE_FUNCTIONS_COMMON_STATICFORLOOP_HH
>
> _______________________________________________
> Dune-functions-commit mailing list
> Dune-functions-commit at dune-project.org
> http://lists.dune-project.org/mailman/listinfo/dune-functions-commit
--
Prof. Dr. Christian Engwer
Institut für Numerische und Angewandte Mathematik
Fachbereich Mathematik und Informatik der Universität Münster
Einsteinstrasse 62
48149 Münster
E-Mail christian.engwer at uni-muenster.de
Telefon +49 251 83-35067
FAX +49 251 83-32729
More information about the dune-functions
mailing list