On Tue, Oct 18, 2016 at 8:57 PM, Isaiah Norton <isaiah.nor...@gmail.com> wrote:
> The issue here is that `jl_array_eltype` is already returning a type. > > `jl_typeis(v, t)` becomes `jl_typeof(v) == t`, so your checks become: > > jl_typeof(array_type) == jl_int64_type > > But > > jl_typeof(array_type) -> DataType > > Instead, either do the equality check directly: > > array_type == jl_int64_type > > Or use the exported API only (jlapi.c): > > strcmp(jl_typename_str(array_type), jl_typename_str(jl_int64_type)) > Just to be clear, this does not guarantee that the two types are equal. Directly comparing the pointer for types is also "exported API". > > On Tue, Oct 18, 2016 at 7:52 PM, Kyle Kotowick <k...@kotowick.ca> wrote: > >> I apologize for the formatting, that should be: >> >> jl_value_t *ret = jl_eval_string(code_string); >> void* array_type = jl_array_eltype(ret); >> jl_array_t *ret_array = (jl_array_t*)ret; >> >> if (jl_typeis(array_type, jl_int64_type)) { >> long *data = (long*) jl_array_data(ret_array); >> } >> else if (jl_typeis(array_type, jl_float64_type)) { >> double *data = (double*) jl_array_data(ret_array); >> } >> >> >> And the issue is that even if it is an Int64 or Float64, neither of those >> IF statements will return true. >> >> >> >> On Sunday, 16 October 2016 21:36:03 UTC-4, Kyle Kotowick wrote: >>> >>> Awesome, thanks. Could you show how to use it in a minimal code example? >>> Here's what I'm currently trying, but it does not appear to be working: >>> >>> jl_value_t *ret = jl_eval_string(code_string); >>> void* array_type = jl_array_eltype(ret); >>> jl_array_t *ret_array = (jl_array_t*)ret; >>> >>> >>> >>> if (jl_typeis(array_type, jl_int64_type)) { >>> long *data = (long*) jl_array_data(ret_array); >>> } >>> else if (jl_typeis(array_type, jl_float64_type)) { double *data = ( >>> double*) jl_array_data(ret_array); >>> } >>> >>> >>> On Friday, 14 October 2016 20:45:18 UTC-4, Isaiah wrote: >>>> >>>> On Fri, Oct 14, 2016 at 2:28 PM, Kyle Kotowick <ky...@kotowick.ca> >>>> wrote: >>>>> >>>>> >>>>> After determining that an array was returned, how would you determine >>>>> what the inner type of the array is (i.e. the type of the objects it >>>>> contains)? >>>>> >>>> >>>> `jl_array_eltype` >>>> >>>> >>>>> >>>>> And furthermore, if it returns an array of type "Any", would there be >>>>> any way to tell what the type is of any arbitrary element in that array? >>>>> >>>> >>>> `jl_typeof`, after retrieving the element (which will be boxed) >>>> >>>> >>>>> >>>>> Thanks! >>>>> >>>> >>>> >