[petsc-dev] macro functions growing like rabbits
Matthew Knepley
knepley at gmail.com
Wed Feb 6 22:17:33 CST 2013
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.html>
More information about the petsc-dev
mailing list