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
