Skip to content

Commit 9fd3885

Browse files
committed
issue #10...
1 parent ef2c8b3 commit 9fd3885

File tree

9 files changed

+84
-39
lines changed

9 files changed

+84
-39
lines changed

CHANGELOG.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,17 @@
11
## CHANGE LOG
22

3+
### Hydra 3.2.2
4+
5+
This release:
6+
7+
1)
8+
9+
Bug fixes:
10+
11+
1) Missing assignment operators for hydra::FunctionArgments
12+
13+
2) Covering composite of composites (https://github.com/MultithreadCorner/Hydra/issues/100)
14+
315

416
### Hydra 3.2.1
517

Doxyfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
#PROJECT_NAME = "Hydra_examples_and_documentation"
2-
PROJECT_NUMBER = 3.2.1
2+
PROJECT_NUMBER = 3.2.2
33

44
STRIP_FROM_PATH = /home/augalves/Development/Release/Hydra
55

hydra/Hydra.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@
4848
* <tt>HYDRA_VERSION / 100 % 1000</tt> is the feature version.
4949
* <tt>HYDRA_VERSION / 100000</tt> is the major version.
5050
*/
51-
#define HYDRA_VERSION 300201
51+
#define HYDRA_VERSION 300202
5252

5353

5454
/*! \def HYDRA_MAJOR_VERSION

hydra/detail/Compose.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,8 @@
3838
#include <hydra/detail/base_functor.h>
3939
#include <hydra/detail/Constant.h>
4040
#include <hydra/detail/CompositeBase.h>
41+
#include <hydra/detail/FunctorTraits.h>
42+
#include <hydra/detail/CompositeTraits.h>
4143
#include <hydra/Parameter.h>
4244
#include <hydra/Tuple.h>
4345

@@ -101,9 +103,10 @@ class Compose: public detail::CompositeBase<F0, F1, Fs...>
101103
// Conveniency function
102104
template < typename T0, typename T1, typename ...Ts >
103105
inline typename std::enable_if<
104-
(detail::is_hydra_functor<T0>::value || detail::is_hydra_lambda<T0>::value) &&
105-
(detail::is_hydra_functor<T1>::value || detail::is_hydra_lambda<T1>::value) &&
106-
detail::all_true<(detail::is_hydra_functor<Ts>::value || detail::is_hydra_lambda<Ts>::value)...>::value,
106+
(detail::is_hydra_functor<T0>::value || detail::is_hydra_lambda<T0>::value || detail::is_hydra_composite_functor<T0>::value) &&
107+
(detail::is_hydra_functor<T1>::value || detail::is_hydra_lambda<T1>::value || detail::is_hydra_composite_functor<T1>::value) &&
108+
detail::all_true<
109+
(detail::is_hydra_functor<Ts>::value || detail::is_hydra_lambda<Ts>::value || detail::is_hydra_composite_functor<Ts>::value)...>::value,
107110
Compose<T0,T1,Ts...>>::type
108111
compose(T0 const& F0, T1 const& F1, Ts const&...Fs){
109112

hydra/detail/Divide.h

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@
4242
#include <hydra/detail/base_functor.h>
4343
#include <hydra/detail/Constant.h>
4444
#include <hydra/detail/CompositeBase.h>
45+
#include <hydra/detail/FunctorTraits.h>
46+
#include <hydra/detail/CompositeTraits.h>
4547
#include <hydra/Parameter.h>
4648
#include <hydra/Tuple.h>
4749

@@ -89,8 +91,8 @@ class Divide: public detail::CompositeBase<F1, F2>
8991
// divide: / operator two functors
9092
template<typename T1, typename T2>
9193
inline typename std::enable_if<
92-
(detail::is_hydra_functor<T1>::value || detail::is_hydra_lambda<T1>::value) &&
93-
(detail::is_hydra_functor<T2>::value || detail::is_hydra_lambda<T2>::value),
94+
(detail::is_hydra_functor<T1>::value || detail::is_hydra_lambda<T1>::value || detail::is_hydra_composite_functor<T1>::value) &&
95+
(detail::is_hydra_functor<T2>::value || detail::is_hydra_lambda<T2>::value || detail::is_hydra_composite_functor<T2>::value),
9496
Divide<T1, T2> >::type
9597
operator/(T1 const& F1, T2 const& F2)
9698
{
@@ -99,7 +101,7 @@ operator/(T1 const& F1, T2 const& F2)
99101

100102
template <typename T, typename U>
101103
inline typename std::enable_if<
102-
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value) &&
104+
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value || detail::is_hydra_composite_functor<T>::value) &&
103105
(std::is_arithmetic<U>::value),
104106
Divide< Constant<U>, T> >::type
105107
operator/(U const cte, T const& F)
@@ -109,7 +111,7 @@ operator/(U const cte, T const& F)
109111

110112
template <typename T, typename U>
111113
inline typename std::enable_if<
112-
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value) &&
114+
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value || detail::is_hydra_composite_functor<T>::value) &&
113115
(std::is_arithmetic<U>::value),
114116
Divide< Constant<U>, T> >::type
115117
operator/( T const& F, U cte)
@@ -119,7 +121,7 @@ operator/( T const& F, U cte)
119121

120122
template <typename T, typename U>
121123
inline typename std::enable_if<
122-
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value) &&
124+
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value || detail::is_hydra_composite_functor<T>::value) &&
123125
(std::is_arithmetic<U>::value),
124126
Divide< Constant<hydra::complex<U>>, T> >::type
125127
operator/(hydra::complex<U> const& cte, T const& F)
@@ -129,7 +131,7 @@ operator/(hydra::complex<U> const& cte, T const& F)
129131

130132
template <typename T, typename U>
131133
inline typename std::enable_if<
132-
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value) &&
134+
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value || detail::is_hydra_composite_functor<T>::value) &&
133135
(std::is_arithmetic<U>::value),
134136
Divide< Constant<hydra::complex<U>>, T> >::type
135137
operator/( T const& F, hydra::complex<U> const& cte)
@@ -141,8 +143,8 @@ operator/( T const& F, hydra::complex<U> const& cte)
141143
// Convenience function
142144
template <typename F1, typename F2, typename ...Fs>
143145
inline typename std::enable_if<
144-
(detail::is_hydra_functor<F1>::value || detail::is_hydra_lambda<F1>::value) &&
145-
(detail::is_hydra_functor<F2>::value || detail::is_hydra_lambda<F2>::value),
146+
(detail::is_hydra_functor<F1>::value || detail::is_hydra_lambda<F1>::value || detail::is_hydra_composite_functor<F1>::value) &&
147+
(detail::is_hydra_functor<F2>::value || detail::is_hydra_lambda<F2>::value || detail::is_hydra_composite_functor<F2>::value),
146148
Divide<F1, F2>>::type
147149
divide(F1 const& f1, F2 const& f2)
148150
{

hydra/detail/FunctionArgument.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,26 @@ struct FunctionArgument
7777
return *this;
7878
}
7979

80+
template<typename T>
81+
__hydra_host__ __hydra_device__
82+
typename std::enable_if< std::is_convertible<T, value_type>::value,
83+
FunctionArgument<name_type, value_type>&>::type
84+
operator=(T other)
85+
{
86+
value = other;
87+
return *this;
88+
}
89+
90+
template<typename T>
91+
__hydra_host__ __hydra_device__
92+
typename std::enable_if< std::is_convertible<T, value_type>::value,
93+
FunctionArgument<name_type, value_type>&>::type
94+
operator=(hydra_thrust::device_reference<T> const& other)
95+
{
96+
value = other;
97+
return *this;
98+
}
99+
80100
template<typename Derived2>
81101
__hydra_host__ __hydra_device__
82102
FunctionArgument(FunctionArgument<Derived2, value_type>const& other):

hydra/detail/Minus.h

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@
4343
#include <hydra/detail/base_functor.h>
4444
#include <hydra/Parameter.h>
4545
#include <hydra/detail/CompositeBase.h>
46+
#include <hydra/detail/FunctorTraits.h>
47+
#include <hydra/detail/CompositeTraits.h>
4648
#include <hydra/Parameter.h>
4749
#include <hydra/Tuple.h>
4850

@@ -92,8 +94,8 @@ class Minus: public detail::CompositeBase<F1, F2>
9294
// + operator two functors
9395
template<typename T1, typename T2>
9496
inline typename std::enable_if<
95-
(detail::is_hydra_functor<T1>::value || detail::is_hydra_lambda<T1>::value) &&
96-
(detail::is_hydra_functor<T2>::value || detail::is_hydra_lambda<T2>::value),
97+
(detail::is_hydra_functor<T1>::value || detail::is_hydra_lambda<T1>::value || detail::is_hydra_composite_functor<T1>::value) &&
98+
(detail::is_hydra_functor<T2>::value || detail::is_hydra_lambda<T2>::value || detail::is_hydra_composite_functor<T2>::value),
9799
Minus<T1, T2> >::type
98100
operator-(T1 const& F1, T2 const& F2)
99101
{
@@ -102,7 +104,7 @@ operator-(T1 const& F1, T2 const& F2)
102104

103105
template <typename T, typename U>
104106
inline typename std::enable_if<
105-
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value) &&
107+
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value || detail::is_hydra_composite_functor<T>::value) &&
106108
(std::is_arithmetic<U>::value),
107109
Minus< Constant<U>, T> >::type
108110
operator-(U const cte, T const& F)
@@ -112,7 +114,7 @@ operator-(U const cte, T const& F)
112114

113115
template <typename T, typename U>
114116
inline typename std::enable_if<
115-
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value) &&
117+
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value || detail::is_hydra_composite_functor<T>::value) &&
116118
(std::is_arithmetic<U>::value),
117119
Minus< Constant<U>, T> >::type
118120
operator-( T const& F, U cte)
@@ -122,7 +124,7 @@ operator-( T const& F, U cte)
122124

123125
template <typename T, typename U>
124126
inline typename std::enable_if<
125-
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value) &&
127+
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value || detail::is_hydra_composite_functor<T>::value) &&
126128
(std::is_arithmetic<U>::value),
127129
Minus< Constant<hydra::complex<U>>, T> >::type
128130
operator-(hydra::complex<U> const& cte, T const& F)
@@ -132,7 +134,7 @@ operator-(hydra::complex<U> const& cte, T const& F)
132134

133135
template <typename T, typename U>
134136
inline typename std::enable_if<
135-
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value) &&
137+
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value || detail::is_hydra_composite_functor<T>::value) &&
136138
(std::is_arithmetic<U>::value),
137139
Minus< Constant<U>, T> >::type
138140
operator-( T const& F, hydra::complex<U> const& cte)
@@ -143,8 +145,8 @@ operator-( T const& F, hydra::complex<U> const& cte)
143145
// Convenience function
144146
template <typename F1, typename F2>
145147
inline typename std::enable_if<
146-
(detail::is_hydra_functor<F1>::value || detail::is_hydra_lambda<F1>::value) &&
147-
(detail::is_hydra_functor<F2>::value || detail::is_hydra_lambda<F2>::value),
148+
(detail::is_hydra_functor<F1>::value || detail::is_hydra_lambda<F1>::value || detail::is_hydra_composite_functor<F1>::value) &&
149+
(detail::is_hydra_functor<F2>::value || detail::is_hydra_lambda<F2>::value || detail::is_hydra_composite_functor<F2>::value),
148150
Minus<F1, F2>>::type
149151
minus(F1 const& f1, F2 const& f2)
150152
{

hydra/detail/Multiply.h

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@
5050
#include <hydra/Parameter.h>
5151

5252
#include <hydra/detail/CompositeBase.h>
53+
#include <hydra/detail/FunctorTraits.h>
54+
#include <hydra/detail/CompositeTraits.h>
5355
#include <hydra/Parameter.h>
5456
#include <hydra/Tuple.h>
5557

@@ -102,8 +104,8 @@ class Multiply: public detail::CompositeBase< F1,F2, Fs...>
102104
// multiplication: * operator two functors
103105
template<typename T1, typename T2>
104106
inline typename std::enable_if<
105-
(detail::is_hydra_functor<T1>::value || detail::is_hydra_lambda<T1>::value) &&
106-
(detail::is_hydra_functor<T2>::value || detail::is_hydra_lambda<T2>::value),
107+
(detail::is_hydra_functor<T1>::value || detail::is_hydra_lambda<T1>::value || detail::is_hydra_composite_functor<T1>::value) &&
108+
(detail::is_hydra_functor<T2>::value || detail::is_hydra_lambda<T2>::value || detail::is_hydra_composite_functor<T2>::value),
107109
Multiply<T1, T2> >::type
108110
operator*(T1 const& F1, T2 const& F2)
109111
{
@@ -112,7 +114,7 @@ operator*(T1 const& F1, T2 const& F2)
112114

113115
template <typename T, typename U>
114116
inline typename std::enable_if<
115-
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value) &&
117+
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value || detail::is_hydra_composite_functor<T>::value) &&
116118
(std::is_arithmetic<U>::value),
117119
Multiply< Constant<U>, T> >::type
118120
operator*(U const cte, T const& F)
@@ -122,7 +124,7 @@ operator*(U const cte, T const& F)
122124

123125
template <typename T, typename U>
124126
inline typename std::enable_if<
125-
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value) &&
127+
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value || detail::is_hydra_composite_functor<T>::value) &&
126128
(std::is_arithmetic<U>::value),
127129
Multiply< Constant<U>, T> >::type
128130
operator*( T const& F, U cte)
@@ -132,7 +134,7 @@ operator*( T const& F, U cte)
132134

133135
template <typename T, typename U>
134136
inline typename std::enable_if<
135-
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value) &&
137+
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value || detail::is_hydra_composite_functor<T>::value) &&
136138
(std::is_arithmetic<U>::value),
137139
Multiply< Constant<hydra::complex<U>>, T> >::type
138140
operator*(hydra::complex<U> const& cte, T const& F)
@@ -142,7 +144,7 @@ operator*(hydra::complex<U> const& cte, T const& F)
142144

143145
template <typename T, typename U>
144146
inline typename std::enable_if<
145-
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value) &&
147+
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value || detail::is_hydra_composite_functor<T>::value) &&
146148
(std::is_arithmetic<U>::value),
147149
Multiply< Constant<U>, T> >::type
148150
operator*( T const& F, hydra::complex<U> const& cte)
@@ -154,9 +156,10 @@ operator*( T const& F, hydra::complex<U> const& cte)
154156
// Convenience function
155157
template <typename F1, typename F2, typename ...Fs>
156158
inline typename std::enable_if<
157-
(detail::is_hydra_functor<F1>::value || detail::is_hydra_lambda<F1>::value) &&
158-
(detail::is_hydra_functor<F2>::value || detail::is_hydra_lambda<F2>::value) &&
159-
detail::all_true<(detail::is_hydra_functor<Fs>::value || detail::is_hydra_lambda<Fs>::value)...>::value,
159+
(detail::is_hydra_functor<F1>::value || detail::is_hydra_lambda<F1>::value || detail::is_hydra_composite_functor<F1>::value) &&
160+
(detail::is_hydra_functor<F2>::value || detail::is_hydra_lambda<F2>::value || detail::is_hydra_composite_functor<F2>::value) &&
161+
detail::all_true<
162+
(detail::is_hydra_functor<Fs>::value || detail::is_hydra_lambda<Fs>::value || detail::is_hydra_composite_functor<Fs>::value)...>::value,
160163
Multiply<F1, F2,Fs...>>::type
161164
multiply(F1 const& f1, F2 const& f2, Fs const&... functors )
162165
{

hydra/detail/Sum.h

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,8 @@
4949
#include <hydra/Parameter.h>
5050
#include <hydra/Tuple.h>
5151
#include <hydra/detail/CompositeBase.h>
52+
#include <hydra/detail/FunctorTraits.h>
53+
#include <hydra/detail/CompositeTraits.h>
5254
#include <type_traits>
5355

5456
namespace hydra {
@@ -103,8 +105,8 @@ class Sum: public detail::CompositeBase< F1,F2, Fs...>
103105
*/
104106
template<typename T1, typename T2>
105107
inline typename std::enable_if<
106-
(detail::is_hydra_functor<T1>::value || detail::is_hydra_lambda<T1>::value) &&
107-
(detail::is_hydra_functor<T2>::value || detail::is_hydra_lambda<T2>::value),
108+
(detail::is_hydra_functor<T1>::value || detail::is_hydra_lambda<T1>::value || detail::is_hydra_composite_functor<T1>::value) &&
109+
(detail::is_hydra_functor<T2>::value || detail::is_hydra_lambda<T2>::value || detail::is_hydra_composite_functor<T2>::value),
108110
Sum<T1, T2> >::type
109111
operator+(T1 const& F1, T2 const& F2)
110112
{
@@ -116,7 +118,7 @@ operator+(T1 const& F1, T2 const& F2)
116118
*/
117119
template <typename T, typename U>
118120
inline typename std::enable_if<
119-
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value) &&
121+
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value || detail::is_hydra_composite_functor<T>::value) &&
120122
(std::is_arithmetic<U>::value),
121123
Sum< Constant<U>, T> >::type
122124
operator+(U const cte, T const& F)
@@ -129,7 +131,7 @@ operator+(U const cte, T const& F)
129131
*/
130132
template <typename T, typename U>
131133
inline typename std::enable_if<
132-
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value) &&
134+
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value || detail::is_hydra_composite_functor<T>::value) &&
133135
(std::is_arithmetic<U>::value),
134136
Sum< Constant<U>, T> >::type
135137
operator+( T const& F, U cte)
@@ -142,7 +144,7 @@ operator+( T const& F, U cte)
142144
*/
143145
template <typename T, typename U>
144146
inline typename std::enable_if<
145-
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value) &&
147+
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value || detail::is_hydra_composite_functor<T>::value) &&
146148
(std::is_arithmetic<U>::value),
147149
Sum< Constant<hydra::complex<U>>, T> >::type
148150
operator+(hydra::complex<U> const& cte, T const& F)
@@ -155,7 +157,7 @@ operator+(hydra::complex<U> const& cte, T const& F)
155157
*/
156158
template <typename T, typename U>
157159
inline typename std::enable_if<
158-
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value) &&
160+
(detail::is_hydra_functor<T>::value || detail::is_hydra_lambda<T>::value || detail::is_hydra_composite_functor<T>::value) &&
159161
(std::is_arithmetic<U>::value),
160162
Sum< Constant<U>, T> >::type
161163
operator+( T const& F, hydra::complex<U> const& cte)
@@ -167,9 +169,10 @@ operator+( T const& F, hydra::complex<U> const& cte)
167169
// Convenience function
168170
template <typename F1, typename F2, typename ...Fs>
169171
inline typename std::enable_if<
170-
(detail::is_hydra_functor<F1>::value || detail::is_hydra_lambda<F1>::value) &&
171-
(detail::is_hydra_functor<F2>::value || detail::is_hydra_lambda<F2>::value) &&
172-
detail::all_true<(detail::is_hydra_functor<Fs>::value || detail::is_hydra_lambda<Fs>::value)...>::value,
172+
(detail::is_hydra_functor<F1>::value || detail::is_hydra_lambda<F1>::value || detail::is_hydra_composite_functor<F1>::value) &&
173+
(detail::is_hydra_functor<F2>::value || detail::is_hydra_lambda<F2>::value || detail::is_hydra_composite_functor<F2>::value) &&
174+
detail::all_true<
175+
(detail::is_hydra_functor<Fs>::value || detail::is_hydra_lambda<Fs>::value || detail::is_hydra_composite_functor<Fs>::value)...>::value,
173176
Sum<F1, F2,Fs...>>::type
174177
sum(F1 const& f1, F2 const& f2, Fs const&... functors )
175178
{

0 commit comments

Comments
 (0)