44#include " type_conversion.hpp"
55#include " tuple.hpp"
66
7+ #if (JULIA_VERSION_MAJOR * 100 + JULIA_VERSION_MINOR) >= 111
8+ // yes the arguments are really switched
9+ #define jl_arrayset (args, s, i ) jl_array_ptr_set(args, i, s)
10+ #endif
11+
712namespace jlcxx
813{
914
@@ -165,9 +170,19 @@ template<typename ValueT, int Dim = 1>
165170class ArrayRef
166171{
167172public:
168-
169173 using julia_t = typename detail::ArrayElementType<ValueT>::type;
170174
175+ private:
176+ // / wrapper for julia jl_array_data for different julia versions
177+ static julia_t * jlcxx_array_data (jl_array_t * arr) {
178+ #if (JULIA_VERSION_MAJOR * 100 + JULIA_VERSION_MINOR) >= 111
179+ return jl_array_data (arr, julia_t );
180+ #else
181+ return static_cast <julia_t *>(jl_array_data (arr));
182+ #endif
183+ }
184+
185+ public:
171186 ArrayRef (jl_array_t * arr) : m_array(arr)
172187 {
173188 assert (wrapped () != nullptr );
@@ -191,22 +206,22 @@ class ArrayRef
191206
192207 iterator begin ()
193208 {
194- return iterator (static_cast < julia_t *>( jl_array_data ( wrapped () )));
209+ return iterator (jlcxx_array_data ( wrapped ()));
195210 }
196211
197212 const_iterator begin () const
198213 {
199- return const_iterator (static_cast < julia_t *>( jl_array_data ( wrapped () )));
214+ return const_iterator (jlcxx_array_data ( wrapped ()));
200215 }
201216
202217 iterator end ()
203218 {
204- return iterator (static_cast < julia_t *>( jl_array_data ( wrapped () )) + jl_array_len (wrapped ()));
219+ return iterator (jlcxx_array_data ( wrapped ()) + jl_array_len (wrapped ()));
205220 }
206221
207222 const_iterator end () const
208223 {
209- return const_iterator (static_cast < julia_t *>( jl_array_data ( wrapped () )) + jl_array_len (wrapped ()));
224+ return const_iterator (jlcxx_array_data ( wrapped ()) + jl_array_len (wrapped ()));
210225 }
211226
212227 void push_back (const ValueT& val)
@@ -223,12 +238,12 @@ class ArrayRef
223238
224239 const julia_t * data () const
225240 {
226- return ( julia_t *) jl_array_data (wrapped ());
241+ return jlcxx_array_data (wrapped ());
227242 }
228243
229244 julia_t * data ()
230245 {
231- return ( julia_t *) jl_array_data (wrapped ());
246+ return jlcxx_array_data (wrapped ());
232247 }
233248
234249 std::size_t size () const
0 commit comments