Aha, that fixed it!

I'm running into one issue though. What do I do with the data when it's a 
"Float16" type? C++ has no way to represent a 16-bit float, so I'm having 
difficulty converting it to a regular 32-bit float.

jl_value_t *ret = jl_eval_string(code_string);
jl_array_t *ret_array = (jl_array_t*)ret;

if (jl_array_eltype(ret) == jl_float16_type) {

 /* now I need to convert the 'ret_array' to a C++ array of floats, but how 
do I do that when they're given in Float16? */

}


On Tuesday, 18 October 2016 20:57:10 UTC-4, Isaiah 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))
>
> On Tue, Oct 18, 2016 at 7:52 PM, Kyle Kotowick <[email protected] 
> <javascript:>> 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 <[email protected]> 
>>>> 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!
>>>>>
>>>>
>>>>
>

Reply via email to