xref: /petsc/src/sys/logging/handler/impls/legacy/loglegacy.c (revision d34ab3a3b78907064f72418aab6f14fcc696a2f4)
10970d93fSToby Isaac #include <petsc/private/loghandlerimpl.h>
20970d93fSToby Isaac 
30970d93fSToby Isaac typedef struct _n_PetscLogHandler_Legacy *PetscLogHandler_Legacy;
40970d93fSToby Isaac struct _n_PetscLogHandler_Legacy {
50970d93fSToby Isaac   PetscErrorCode (*PetscLogPLB)(PetscLogEvent, int, PetscObject, PetscObject, PetscObject, PetscObject);
60970d93fSToby Isaac   PetscErrorCode (*PetscLogPLE)(PetscLogEvent, int, PetscObject, PetscObject, PetscObject, PetscObject);
70970d93fSToby Isaac   PetscErrorCode (*PetscLogPHC)(PetscObject);
80970d93fSToby Isaac   PetscErrorCode (*PetscLogPHD)(PetscObject);
90970d93fSToby Isaac };
100970d93fSToby Isaac 
PetscLogHandlerEventBegin_Legacy(PetscLogHandler handler,PetscLogEvent e,PetscObject o1,PetscObject o2,PetscObject o3,PetscObject o4)110970d93fSToby Isaac static PetscErrorCode PetscLogHandlerEventBegin_Legacy(PetscLogHandler handler, PetscLogEvent e, PetscObject o1, PetscObject o2, PetscObject o3, PetscObject o4)
120970d93fSToby Isaac {
130970d93fSToby Isaac   PetscLogHandler_Legacy legacy = (PetscLogHandler_Legacy)handler->data;
140970d93fSToby Isaac 
15f4f49eeaSPierre Jolivet   return (*legacy->PetscLogPLB)(e, 0, o1, o2, o3, o4);
160970d93fSToby Isaac }
170970d93fSToby Isaac 
PetscLogHandlerEventEnd_Legacy(PetscLogHandler handler,PetscLogEvent e,PetscObject o1,PetscObject o2,PetscObject o3,PetscObject o4)180970d93fSToby Isaac static PetscErrorCode PetscLogHandlerEventEnd_Legacy(PetscLogHandler handler, PetscLogEvent e, PetscObject o1, PetscObject o2, PetscObject o3, PetscObject o4)
190970d93fSToby Isaac {
200970d93fSToby Isaac   PetscLogHandler_Legacy legacy = (PetscLogHandler_Legacy)handler->data;
210970d93fSToby Isaac 
22f4f49eeaSPierre Jolivet   return (*legacy->PetscLogPLE)(e, 0, o1, o2, o3, o4);
230970d93fSToby Isaac }
240970d93fSToby Isaac 
PetscLogHandlerObjectCreate_Legacy(PetscLogHandler handler,PetscObject o)250970d93fSToby Isaac static PetscErrorCode PetscLogHandlerObjectCreate_Legacy(PetscLogHandler handler, PetscObject o)
260970d93fSToby Isaac {
270970d93fSToby Isaac   PetscLogHandler_Legacy legacy = (PetscLogHandler_Legacy)handler->data;
280970d93fSToby Isaac 
29f4f49eeaSPierre Jolivet   return (*legacy->PetscLogPHC)(o);
300970d93fSToby Isaac }
310970d93fSToby Isaac 
PetscLogHandlerObjectDestroy_Legacy(PetscLogHandler handler,PetscObject o)320970d93fSToby Isaac static PetscErrorCode PetscLogHandlerObjectDestroy_Legacy(PetscLogHandler handler, PetscObject o)
330970d93fSToby Isaac {
340970d93fSToby Isaac   PetscLogHandler_Legacy legacy = (PetscLogHandler_Legacy)handler->data;
350970d93fSToby Isaac 
36f4f49eeaSPierre Jolivet   return (*legacy->PetscLogPHD)(o);
370970d93fSToby Isaac }
380970d93fSToby Isaac 
PetscLogHandlerDestroy_Legacy(PetscLogHandler handler)39*54c05997SPierre Jolivet static PetscErrorCode PetscLogHandlerDestroy_Legacy(PetscLogHandler handler)
400970d93fSToby Isaac {
410970d93fSToby Isaac   PetscFunctionBegin;
420970d93fSToby Isaac   PetscCall(PetscFree(handler->data));
430970d93fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
440970d93fSToby Isaac }
450970d93fSToby Isaac 
460970d93fSToby Isaac /*MC
47294de794SToby Isaac   PETSCLOGHANDLERLEGACY - PETSCLOGHANDLERLEGACY = "legacy" -  A
480970d93fSToby Isaac   `PetscLogHandler` that can be constructed from the callbacks used in
49b665b14eSToby Isaac   `PetscLogSet()`.  A log handler of this type is created and started by
50b665b14eSToby Isaac   `PetscLogLegacyCallbacksBegin()`.
510970d93fSToby Isaac 
520970d93fSToby Isaac   Level: developer
530970d93fSToby Isaac 
540970d93fSToby Isaac .seealso: [](ch_profiling), `PetscLogHandler`, `PetscLogHandlerCreateLegacy()`
550970d93fSToby Isaac M*/
560970d93fSToby Isaac 
PetscLogHandlerCreate_Legacy(PetscLogHandler handler)570970d93fSToby Isaac PETSC_INTERN PetscErrorCode PetscLogHandlerCreate_Legacy(PetscLogHandler handler)
580970d93fSToby Isaac {
590970d93fSToby Isaac   PetscLogHandler_Legacy legacy;
600970d93fSToby Isaac 
610970d93fSToby Isaac   PetscFunctionBegin;
620970d93fSToby Isaac   PetscCall(PetscNew(&legacy));
630970d93fSToby Isaac   handler->data         = (void *)legacy;
64*54c05997SPierre Jolivet   handler->ops->destroy = PetscLogHandlerDestroy_Legacy;
650970d93fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
660970d93fSToby Isaac }
670970d93fSToby Isaac 
680970d93fSToby Isaac /*@C
690970d93fSToby Isaac   PetscLogHandlerCreateLegacy - Create a `PetscLogHandler` from callbacks matching PETSc's legacy log handler callbacks
700970d93fSToby Isaac 
710970d93fSToby Isaac   Collective
720970d93fSToby Isaac 
730970d93fSToby Isaac   Input Parameters:
740970d93fSToby Isaac + comm        - an MPI communicator
750970d93fSToby Isaac . PetscLogPLB - a function to call during `PetscLogHandlerEventBegin()` (or `NULL`)
760970d93fSToby Isaac . PetscLogPLE - a function to call during `PetscLogHandlerEventEnd()` (or `NULL`)
770970d93fSToby Isaac . PetscLogPHC - a function to call during `PetscLogHandlerObjectCreate()` (or `NULL`)
780970d93fSToby Isaac - PetscLogPHD - a function to call during `PetscLogHandlerObjectDestroy()` (or `NULL`)
790970d93fSToby Isaac 
800970d93fSToby Isaac   Output Parameter:
810970d93fSToby Isaac . handler - a `PetscLogHandler`
820970d93fSToby Isaac 
830970d93fSToby Isaac   Calling sequence of `PetscLogPLB`:
840970d93fSToby Isaac + e  - a `PetscLogEvent` that is beginning
850970d93fSToby Isaac . _i - deprecated, unused
860970d93fSToby Isaac . o1 - a `PetscObject` associated with `e` (or `NULL`)
870970d93fSToby Isaac . o2 - a `PetscObject` associated with `e` (or `NULL`)
880970d93fSToby Isaac . o3 - a `PetscObject` associated with `e` (or `NULL`)
890970d93fSToby Isaac - o4 - a `PetscObject` associated with `e` (or `NULL`)
900970d93fSToby Isaac 
910970d93fSToby Isaac   Calling sequence of `PetscLogPLE`:
920970d93fSToby Isaac + e  - a `PetscLogEvent` that is beginning
930970d93fSToby Isaac . _i - deprecated, unused
940970d93fSToby Isaac . o1 - a `PetscObject` associated with `e` (or `NULL`)
950970d93fSToby Isaac . o2 - a `PetscObject` associated with `e` (or `NULL`)
960970d93fSToby Isaac . o3 - a `PetscObject` associated with `e` (or `NULL`)
970970d93fSToby Isaac - o4 - a `PetscObject` associated with `e` (or `NULL`)
980970d93fSToby Isaac 
990970d93fSToby Isaac   Calling sequence of `PetscLogPHC`:
1000970d93fSToby Isaac . o - a `PetscObject` that has just been created
1010970d93fSToby Isaac 
1020970d93fSToby Isaac   Calling sequence of `PetscLogPHD`:
1030970d93fSToby Isaac . o - a `PetscObject` that is about to be destroyed
1040970d93fSToby Isaac 
1050970d93fSToby Isaac   Level: developer
1060970d93fSToby Isaac 
1070970d93fSToby Isaac   Notes:
1080970d93fSToby Isaac   This is for transitioning from the deprecated function `PetscLogSet()` and should not be used in new code.
1090970d93fSToby Isaac 
1100970d93fSToby Isaac   `PetscLogLegacyCallbacksBegin()`, which calls this function, creates and starts (`PetscLogHandlerStart()`) a log handler,
1110970d93fSToby Isaac   should be used in almost all cases.
1120970d93fSToby Isaac 
1130970d93fSToby Isaac .seealso: [](ch_profiling)
1140970d93fSToby Isaac @*/
PetscLogHandlerCreateLegacy(MPI_Comm comm,PetscErrorCode (* PetscLogPLB)(PetscLogEvent e,int _i,PetscObject o1,PetscObject o2,PetscObject o3,PetscObject o4),PetscErrorCode (* PetscLogPLE)(PetscLogEvent e,int _i,PetscObject o1,PetscObject o2,PetscObject o3,PetscObject o4),PetscErrorCode (* PetscLogPHC)(PetscObject o),PetscErrorCode (* PetscLogPHD)(PetscObject o),PetscLogHandler * handler)1150970d93fSToby Isaac PetscErrorCode PetscLogHandlerCreateLegacy(MPI_Comm comm, PetscErrorCode (*PetscLogPLB)(PetscLogEvent e, int _i, PetscObject o1, PetscObject o2, PetscObject o3, PetscObject o4), PetscErrorCode (*PetscLogPLE)(PetscLogEvent e, int _i, PetscObject o1, PetscObject o2, PetscObject o3, PetscObject o4), PetscErrorCode (*PetscLogPHC)(PetscObject o), PetscErrorCode (*PetscLogPHD)(PetscObject o), PetscLogHandler *handler)
1160970d93fSToby Isaac {
1170970d93fSToby Isaac   PetscLogHandler_Legacy legacy;
1180970d93fSToby Isaac   PetscLogHandler        h;
1194d86920dSPierre Jolivet 
1200970d93fSToby Isaac   PetscFunctionBegin;
1210970d93fSToby Isaac   PetscCall(PetscLogHandlerCreate(comm, handler));
1220970d93fSToby Isaac   h = *handler;
123294de794SToby Isaac   PetscCall(PetscLogHandlerSetType(h, PETSCLOGHANDLERLEGACY));
1240970d93fSToby Isaac   legacy = (PetscLogHandler_Legacy)h->data;
1250970d93fSToby Isaac 
1260970d93fSToby Isaac   legacy->PetscLogPLB = PetscLogPLB;
1270970d93fSToby Isaac   legacy->PetscLogPLE = PetscLogPLE;
1280970d93fSToby Isaac   legacy->PetscLogPHC = PetscLogPHC;
1290970d93fSToby Isaac   legacy->PetscLogPHD = PetscLogPHD;
1300970d93fSToby Isaac 
1310970d93fSToby Isaac   h->ops->eventbegin    = PetscLogPLB ? PetscLogHandlerEventBegin_Legacy : NULL;
1320970d93fSToby Isaac   h->ops->eventend      = PetscLogPLE ? PetscLogHandlerEventEnd_Legacy : NULL;
1330970d93fSToby Isaac   h->ops->objectcreate  = PetscLogPHC ? PetscLogHandlerObjectCreate_Legacy : NULL;
1340970d93fSToby Isaac   h->ops->objectdestroy = PetscLogPHD ? PetscLogHandlerObjectDestroy_Legacy : NULL;
1350970d93fSToby Isaac   PetscFunctionReturn(PETSC_SUCCESS);
1360970d93fSToby Isaac }
137