On Jun 6, 2011, at 1:45 PM, Jed Brown wrote:

> On Mon, Jun 6, 2011 at 20:34, Kai Germaschewski <kai.germaschewski at 
> unh.edu> wrote:
> Wouldn't it make sense to  have DMDAVecGetArray[23]d() and have the argument 
> be PetscScalar ***, and PetscScalar ****, respectively? That would actually 
> check that one passes in a reference to the right type, making it both safe 
> and avoid the need for casting? That's also more in line with, e.g., 
> VecGetArray2d().
> 
> The field type is often not PetscScalar (it's a struct containing several 
> PetscScalar members) so you would need the cast anyway. The cast is also very 
> complicated if you're going to make the interface const-correct.
>  
> 
> I'm not sure where else void ** is used, and whether similar solutions would 
> apply. In general, I agree with Jed that I'd rather not have the explicit 
> cast in the user code.
> 
> I was thinking of SNESGetApplicationContext() and similar. There are a few 
> places where the user registers a context and may also have to get it out.

   I agree with Jed's suggestion and updated the developers guide to indicate 
that these routine should have the argument type void *.

   Barry



Reply via email to