From 38c24347ff7f39d87c02f47a8f2dddb8daeb9464 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Villemot?= <sebastien@dynare.org> Date: Wed, 9 Jan 2019 17:26:28 +0100 Subject: [PATCH] Use C++14 std::conditional_t (instead of custom IF template) --- dynare++/kord/korder.hh | 37 +++++++++++++------------------------ dynare++/tl/cc/sthread.hh | 20 ++++---------------- 2 files changed, 17 insertions(+), 40 deletions(-) diff --git a/dynare++/kord/korder.hh b/dynare++/kord/korder.hh index efbba9041..ab9201554 100644 --- a/dynare++/kord/korder.hh +++ b/dynare++/kord/korder.hh @@ -41,6 +41,7 @@ #include <dynlapack.h> #include <cmath> +#include <type_traits> #define TYPENAME typename @@ -69,35 +70,23 @@ class UnfoldedZXContainer; class FoldedGXContainer; class UnfoldedGXContainer; -template<bool condition, class Then, class Else> -struct IF -{ - using RET = Then; -}; - -template<class Then, class Else> -struct IF<false, Then, Else> -{ - using RET = Else; -}; - template <int type> class ctraits { public: enum { fold, unfold }; - using Ttensor = TYPENAME IF<type == fold, FGSTensor, UGSTensor>::RET; - using Ttensym = TYPENAME IF<type == fold, FFSTensor, UFSTensor>::RET; - using Tg = TYPENAME IF<type == fold, FGSContainer, UGSContainer>::RET; - using Tgs = TYPENAME IF<type == fold, FGSContainer, UGSContainer>::RET; - using Tgss = TYPENAME IF<type == fold, FGSContainer, UGSContainer>::RET; - using TG = TYPENAME IF<type == fold, FGSContainer, UGSContainer>::RET; - using TZstack = TYPENAME IF<type == fold, FoldedZContainer, UnfoldedZContainer>::RET; - using TGstack = TYPENAME IF<type == fold, FoldedGContainer, UnfoldedGContainer>::RET; - using Tm = TYPENAME IF<type == fold, FNormalMoments, UNormalMoments>::RET; - using Tpol = TYPENAME IF<type == fold, FTensorPolynomial, UTensorPolynomial>::RET; - using TZXstack = TYPENAME IF<type == fold, FoldedZXContainer, UnfoldedZXContainer>::RET; - using TGXstack = TYPENAME IF<type == fold, FoldedGXContainer, UnfoldedGXContainer>::RET; + using Ttensor = std::conditional_t<type == fold, FGSTensor, UGSTensor>; + using Ttensym = std::conditional_t<type == fold, FFSTensor, UFSTensor>; + using Tg = std::conditional_t<type == fold, FGSContainer, UGSContainer>; + using Tgs = std::conditional_t<type == fold, FGSContainer, UGSContainer>; + using Tgss = std::conditional_t<type == fold, FGSContainer, UGSContainer>; + using TG = std::conditional_t<type == fold, FGSContainer, UGSContainer>; + using TZstack = std::conditional_t<type == fold, FoldedZContainer, UnfoldedZContainer>; + using TGstack = std::conditional_t<type == fold, FoldedGContainer, UnfoldedGContainer>; + using Tm = std::conditional_t<type == fold, FNormalMoments, UNormalMoments>; + using Tpol = std::conditional_t<type == fold, FTensorPolynomial, UTensorPolynomial>; + using TZXstack = std::conditional_t<type == fold, FoldedZXContainer, UnfoldedZXContainer>; + using TGXstack = std::conditional_t<type == fold, FoldedGXContainer, UnfoldedGXContainer>; }; /* The |PartitionY| class defines the partitioning of state variables diff --git a/dynare++/tl/cc/sthread.hh b/dynare++/tl/cc/sthread.hh index aab785d30..50bc7c53d 100644 --- a/dynare++/tl/cc/sthread.hh +++ b/dynare++/tl/cc/sthread.hh @@ -68,6 +68,7 @@ #include <cstdio> #include <list> #include <map> +#include <type_traits> namespace sthread { @@ -76,19 +77,6 @@ namespace sthread class Empty { }; - // classical IF template - /* Here is the classical IF template. */ - template<bool condition, class Then, class Else> - struct IF - { - using RET = Then; - }; - - template<class Then, class Else> - struct IF<false, Then, Else> - { - using RET = Else; - }; enum { posix, empty}; @@ -103,7 +91,7 @@ namespace sthread template <int thread_impl> struct thread_traits { - using _Tthread = typename IF<thread_impl == posix, pthread_t, Empty>::RET; + using _Tthread = std::conditional_t<thread_impl == posix, pthread_t, Empty>; using _Ctype = thread<0>; using _Dtype = detach_thread<0>; static void run(_Ctype *c); @@ -238,7 +226,7 @@ namespace sthread template <int thread_impl> struct mutex_traits { - using _Tmutex = typename IF<thread_impl == posix, pthread_mutex_t, Empty>::RET; + using _Tmutex = std::conditional_t<thread_impl == posix, pthread_mutex_t, Empty>; using mutex_int_map = map<mmkey, pair<_Tmutex, int>, ltmmkey>; static void init(_Tmutex &m); static void lock(_Tmutex &m); @@ -406,7 +394,7 @@ namespace sthread template <int thread_impl> struct cond_traits { - using _Tcond = typename IF<thread_impl == posix, pthread_cond_t, Empty>::RET; + using _Tcond = std::conditional_t<thread_impl == posix, pthread_cond_t, Empty>; using _Tmutex = typename mutex_traits<thread_impl>::_Tmutex; static void init(_Tcond &cond); static void broadcast(_Tcond &cond); -- GitLab