On Wed, Feb 6, 2013 at 11:12 PM, Jed Brown <jedbrown at mcs.anl.gov> wrote:
> On Wed, Feb 6, 2013 at 10:07 PM, Barry Smith <bsmith at mcs.anl.gov> wrote: > >> >> >> While I'm busy converting macro functions to C functions, others >> (unnamed, but Jed knows how to find them using the revision control system) >> are adding new ones like there is no tomorrow. >> >> For example below. >> >> Yes CPP is unfairly useful and some of the uses below do pass types that >> cannot trivially be handled with pure C code, please try to restrict your >> love of CPP to only when absolutely necessary; for example the first one >> below doesn't need to be a macro I think. >> > > The first example below was added by Barry in 2008 and can soon be deleted. > > > https://bitbucket.org/petsc/petsc-dev/commits/2c4d80a83ccb656c1ab09c5dcec9c685c121655f > Programming languages corrupt. Fortran corrupts absolutely. Matt > The second is like PetscTryMethod in that it really needs to be a macro. > > >> Barry >> >> /* >> Allocates enough space to store Fortran function pointers in PETSc >> object >> that are needed by the Fortran interface. >> */ >> #define PetscObjectAllocateFortranPointers(obj,N) do { \ >> if (!((PetscObject)(obj))->fortran_func_pointers) { \ >> *ierr = >> PetscMalloc((N)*sizeof(void(*)(void)),&((PetscObject)(obj))->fortran_func_pointers);if >> (*ierr) return; \ >> *ierr = >> PetscMemzero(((PetscObject)(obj))->fortran_func_pointers,(N)*sizeof(void(*)(void)));if >> (*ierr) return; \ >> ((PetscObject)obj)->num_fortran_func_pointers = (N); \ >> } \ >> } while (0) >> >> /* Entire function body, _ctx is a "special" variable that can be passed >> along */ >> #define PetscObjectUseFortranCallback_Private(obj,cid,types,args,cbclass) >> { \ >> PetscErrorCode ierr; \ >> void (PETSC_STDCALL *func) types,*_ctx; \ >> PetscFunctionBegin; \ >> ierr = >> PetscObjectGetFortranCallback((PetscObject)(obj),(cbclass),(cid),(PetscVoidFunction*)&func,&_ctx);CHKERRQ(ierr); >> \ >> (*func)args;CHKERRQ(ierr); \ >> PetscFunctionReturn(0); \ >> } >> #define PetscObjectUseFortranCallback(obj,cid,types,args) >> PetscObjectUseFortranCallback_Private(obj,cid,types,args,PETSC_FORTRAN_CALLBACK_CLASS) >> #define PetscObjectUseFortranCallbackSubType(obj,cid,types,args) >> PetscObjectUseFortranCallback_Private(obj,cid,types,args,PETSC_FORTRAN_CALLBACK_SUBTYPE) >> >> > -- What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead. -- Norbert Wiener -------------- next part -------------- An HTML attachment was scrubbed... URL: <http://lists.mcs.anl.gov/pipermail/petsc-dev/attachments/20130206/c1d92dd7/attachment-0001.html>
