Skip to content

Commit 7e0c311

Browse files
committed
julia 1.11: add some workarounds for jl_array changes
1 parent 4888607 commit 7e0c311

File tree

1 file changed

+22
-7
lines changed

1 file changed

+22
-7
lines changed

include/jlcxx/array.hpp

Lines changed: 22 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@
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+
712
namespace jlcxx
813
{
914

@@ -165,9 +170,19 @@ template<typename ValueT, int Dim = 1>
165170
class ArrayRef
166171
{
167172
public:
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

Comments
 (0)