Hello all,

I'm in the progress of changing the implementation of the Take kernel to work 
on ChunkedArrays without concatenating them into a single Array first. While 
working on the implementation, I realised that we switch often between Datum 
and the specific-typed parameters. This works quite well for the combination of 
Array& and Datum(shared_ptr<ArrayData>) as here the reference object with type 
Array& always carries a shared reference with it, so switching between Array& 
and its Datum is quite easy.

In contrast, we cannot do this with ChunkedArrays as here the Datum requires a 
shared_ptr<ChunkedArray> which cannot be constructed from the reference type. 
Thus to allow interfaces like `Status Take(FunctionContext* ctx, const 
ChunkedArray& values, const Array& indices,` to pass successfully their 
arguments to the Kernel implementation, we have to do:

a) Remove the references from the interface of the Take() function and use 
`shared_ptr` instances everywhere.
b) Add interfaces to kernels like the TakeKernel that allow calling with 
specific references instead of Datum instances

Personally I would prefer b) as this allow us to make more use of the C++ type 
system and would also avoid the shared_ptr overhead where not necessary.

Cheers,
Uwe

Reply via email to