<div dir="ltr"><div dir="ltr"><div dir="ltr"><br></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, 4 Mar 2019 at 21:30, Jed Brown <<a href="mailto:jed@jedbrown.org">jed@jedbrown.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Dave May via petsc-dev <<a href="mailto:petsc-dev@mcs.anl.gov" target="_blank">petsc-dev@mcs.anl.gov</a>> writes:<br>
<br>
> I think there would be a lot of merit (in the long run) if user contexts,<br>
> such as given to KSPSetComputeOperators(), SNESSetJacobian() etc were<br>
> changed to be of type PetscObject rather than void*.<br>
><br>
> Some obvious benefits would be:<br>
> [1] Type checking!<br>
<br>
How is passing a void* to PetscObject/PetscContainer different from<br>
passing it to SNES?  </blockquote><div><br></div><div>It's not.</div><div>The difference is that the void* business would be entirely pushed up into the user code and moved out of PETSc.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Also, would you have different types for every<br>
callback or would you reuse?  </blockquote><div><br></div><div>Reuse.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">If reusing, would the interface require<br>
casting the function pointers to void(*)(void) instead of what is<br>
currently type-safe for most function pointers?  </blockquote><div><br></div><div>No. I don't see that casting a function pointer would be required. </div><div>We would have</div><div><br></div><div>SNESSetJacobian(SNES snes,Mat Amat,Mat Pmat,PetscErrorCode (*J)(SNES,Vec,Mat,Mat,PetscObject),PetscObject ctx)<br></div><div><br></div><div>Maybe I misunderstand your question.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">This feels like less<br>
rather than more type safety.<br>
<br>
Agree on other points.<br>
</blockquote></div></div></div>