Pointer ofNull method naming

Ty Young youngty1997 at gmail.com
Wed Nov 13 23:01:33 UTC 2019


On 11/13/19 4:28 PM, Maurizio Cimadamore wrote:
>
> On 13/11/2019 22:15, Ty Young wrote:
>>
>> On 11/13/19 3:19 PM, Maurizio Cimadamore wrote:
>>>
>>> On 13/11/2019 12:43, Ty Young wrote:
>>>>
>>>> On 11/13/19 2:28 AM, Maurizio Cimadamore wrote:
>>>>> I'm ok with making the documentation more precise (I'm not sure I 
>>>>> like ofTyped()). Can you please clarify a bit what you mean by 
>>>>> 'filler' ? Like passing null ptr to a struct setter?
>>>>
>>>>
>>>> Not struct types but more primitive native types like Pointer<Byte> 
>>>> or Pointer<Integer>.
>>>>
>>>>
>>>> As an example, you have a function like this:
>>>>
>>>>
>>>> int foo(Pointer<Pointer<Byte>> array, Pointer<Integer> size);
>>>>
>>>>
>>>> But what you're actually interested in is at index 0 of the array, 
>>>> so "size" isn't needed and allocating a new Pointer would be a waste.
>>>
>>> Not sure I follow - if you are interested in index 0, doesn't that 
>>> mean that the array would need to have at least _one_ element (e.g. 
>>> size >= 1) ?
>>
>>
>> It does. It's just that the data that is actually desired is located 
>> at index 0, so doing:
>>
>>
>> array.get().get()
>>
>>
>> returns index 0 anyway.
>>
>>
>> For context, the function in question returns a Pointer to an array 
>> in the format:
>>
>>
>> Index 0 = number of items
>>
>> index 4 * number of item = bitmask of a given item
>
> Really confused by this example - if the size is always at position 0 
> of the array, then what is the second argument Pointer<Integer> used for?


"size" is the amount of something connected to the system, not the 
Pointer<Integer> size.


So the bitmask of item 1 is located at index 4, item 2 at 8, etc. in the 
array.


>
> I'm trying to understand whether this is really a 'new' use for 
> Pointer.ofNull, or whether you are just exploiting the fact that the 
> underlying function you are using happens to work even if the second 
> parameter is null. 


It does exploit the lack of null checks *technically* although you could 
just as easily lazily allocate a non null Pointer of the desired type to 
do the same thing. Would providing something like that be out of API scope?


Although, it's never explained(nor have I tried it) whether a Pointer 
allocated from a different scope can be used in another one so maybe 
that isn't even possible? If it is, then what's the point of Scope class 
anyway?


> in other words, I'm having problems understand what you mean by this 
> 'filler' capability of Pointer.ofNull.


The function requires a pointer be passed even if you aren't interested 
in what's inside that pointer after calling the function, therefor it's 
"filler".


>
> Maurizio
>
>>
>>
>> However, one might only be interested in index 0 or in this case, the 
>> number of items, so allocating another Pointer just to make the 
>> function call seems like a waste.
>>
>>
>> It seems like *some* functions check whether a given Pointer is null 
>> or not but not all do such as the functions I'm working with. It just 
>> fills the array Pointer regardless.
>>
>>
>>>
>>> Maurizio
>>>
>>>
>>>>
>>>>
>>>>>
>>>>> (p.s. in these cases we have been also discussing bringing back 
>>>>> special treatment for Java null, so that null is re-interpreted to 
>>>>> Pointer.ofNull)
>>>>
>>>>
>>>> I haven't gone too deep down the rabbit hole, but I see 
>>>> "LayoutTypeImpl.nullType" in BoundedPointer. Isn't that the null 
>>>> interpretation for a Pointer?
>>>>
>>>>
>>>>
>>>>>
>>>>> Maurizio
>>>>>


More information about the panama-dev mailing list