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().<br>

<br>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.<br><br>--Kai<br><br><br><div class="gmail_quote">

On Mon, Jun 6, 2011 at 2:20 PM, Jed Brown <span dir="ltr"><<a href="mailto:jed@59a2.org">jed@59a2.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">

<div class="gmail_quote"><div class="im">On Mon, Jun 6, 2011 at 20:00, Barry Smith <span dir="ltr"><<a href="mailto:bsmith@mcs.anl.gov" target="_blank">bsmith@mcs.anl.gov</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">


<div>So is the only benefit that one does not need the extra characters (void**) in front of the argument?<br></div></blockquote><div><br></div></div><div>Yes.</div><div><br></div><div><div>Rationale.</div><div><br></div>


<div>The use of a formal parameter attribute_val or type void* (rather than void**) avoids the messy type casting that would be needed if the attribute value is declared with a type other than void*. ( End of rationale.) </div>


</div><div class="im"><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div>
<br>
   Doesn't seem like much of a benefit? At this point I think doing it either way is fine but if we are inconsistent we should fix some of them to be consistent. I am leaning to vote for the (void**) approach; it is clearer when one looks at code.</div>


</blockquote></div></div><div><br></div>I think the cast is ugly if it appears in places that should not be "scary". For example, I think DMDAVecGetArray(da,X,&x) is significantly nicer than DMDAVecGetArray(da,X,(void**)&x).<div>


<br></div><div>Needing an explicit cast makes the reader think about the safety of the cast. This is a good thing for calls that should look a bit scary.</div>
</blockquote></div><br><br clear="all"><br>-- <br>Kai Germaschewski<br>Assistant Professor, Dept of Physics / Space Science Center<br>University of New Hampshire, Durham, NH 03824<br>office: Morse Hall 245E<br>phone:  +1-603-862-2912<br>

fax: +1-603-862-2771<br><br>