15c6c1daeSBarry Smith 25c6c1daeSBarry Smith /* 35c6c1daeSBarry Smith This defines part of the private API for logging performance information. It is intended to be used only by the 45c6c1daeSBarry Smith PETSc PetscLog...() interface and not elsewhere, nor by users. Hence the prototypes for these functions are NOT 55c6c1daeSBarry Smith in the public PETSc include files. 65c6c1daeSBarry Smith 75c6c1daeSBarry Smith */ 8af0996ceSBarry Smith #include <petsc/private/logimpl.h> /*I "petscsys.h" I*/ 95c6c1daeSBarry Smith 105c6c1daeSBarry Smith /*@C 115c6c1daeSBarry Smith PetscIntStackDestroy - This function destroys a stack. 125c6c1daeSBarry Smith 135c6c1daeSBarry Smith Not Collective 145c6c1daeSBarry Smith 155c6c1daeSBarry Smith Input Parameter: 165c6c1daeSBarry Smith . stack - The stack 175c6c1daeSBarry Smith 185c6c1daeSBarry Smith Level: developer 195c6c1daeSBarry Smith 20db781477SPatrick Sanan .seealso: `PetscIntStackCreate()`, `PetscIntStackEmpty()`, `PetscIntStackPush()`, `PetscIntStackPop()`, `PetscIntStackTop()` 215c6c1daeSBarry Smith @*/ 22d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscIntStackDestroy(PetscIntStack stack) 23d71ae5a4SJacob Faibussowitsch { 245c6c1daeSBarry Smith PetscFunctionBegin; 257a101e5eSJacob Faibussowitsch PetscValidPointer(stack, 1); 269566063dSJacob Faibussowitsch PetscCall(PetscFree(stack->stack)); 279566063dSJacob Faibussowitsch PetscCall(PetscFree(stack)); 28*3ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 295c6c1daeSBarry Smith } 305c6c1daeSBarry Smith 315c6c1daeSBarry Smith /*@C 325c6c1daeSBarry Smith PetscIntStackEmpty - This function determines whether any items have been pushed. 335c6c1daeSBarry Smith 345c6c1daeSBarry Smith Not Collective 355c6c1daeSBarry Smith 365c6c1daeSBarry Smith Input Parameter: 375c6c1daeSBarry Smith . stack - The stack 385c6c1daeSBarry Smith 395c6c1daeSBarry Smith Output Parameter: 40811af0c4SBarry Smith . empty - `PETSC_TRUE` if the stack is empty 415c6c1daeSBarry Smith 425c6c1daeSBarry Smith Level: developer 435c6c1daeSBarry Smith 44db781477SPatrick Sanan .seealso: `PetscIntStackCreate()`, `PetscIntStackDestroy()`, `PetscIntStackPush()`, `PetscIntStackPop()`, `PetscIntStackTop()` 455c6c1daeSBarry Smith @*/ 46d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscIntStackEmpty(PetscIntStack stack, PetscBool *empty) 47d71ae5a4SJacob Faibussowitsch { 485c6c1daeSBarry Smith PetscFunctionBegin; 497a101e5eSJacob Faibussowitsch PetscValidPointer(stack, 1); 50064a246eSJacob Faibussowitsch PetscValidBoolPointer(empty, 2); 517a101e5eSJacob Faibussowitsch *empty = stack->top == -1 ? PETSC_TRUE : PETSC_FALSE; 52*3ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 535c6c1daeSBarry Smith } 545c6c1daeSBarry Smith 555c6c1daeSBarry Smith /*@C 565c6c1daeSBarry Smith PetscIntStackTop - This function returns the top of the stack. 575c6c1daeSBarry Smith 585c6c1daeSBarry Smith Not Collective 595c6c1daeSBarry Smith 605c6c1daeSBarry Smith Input Parameter: 615c6c1daeSBarry Smith . stack - The stack 625c6c1daeSBarry Smith 635c6c1daeSBarry Smith Output Parameter: 645c6c1daeSBarry Smith . top - The integer on top of the stack 655c6c1daeSBarry Smith 665c6c1daeSBarry Smith Level: developer 675c6c1daeSBarry Smith 68db781477SPatrick Sanan .seealso: `PetscIntStackCreate()`, `PetscIntStackDestroy()`, `PetscIntStackEmpty()`, `PetscIntStackPush()`, `PetscIntStackPop()` 695c6c1daeSBarry Smith @*/ 70d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscIntStackTop(PetscIntStack stack, int *top) 71d71ae5a4SJacob Faibussowitsch { 725c6c1daeSBarry Smith PetscFunctionBegin; 737a101e5eSJacob Faibussowitsch PetscValidPointer(stack, 1); 745c6c1daeSBarry Smith PetscValidIntPointer(top, 2); 755c6c1daeSBarry Smith *top = stack->stack[stack->top]; 76*3ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 775c6c1daeSBarry Smith } 785c6c1daeSBarry Smith 795c6c1daeSBarry Smith /*@C 805c6c1daeSBarry Smith PetscIntStackPush - This function pushes an integer on the stack. 815c6c1daeSBarry Smith 825c6c1daeSBarry Smith Not Collective 835c6c1daeSBarry Smith 845c6c1daeSBarry Smith Input Parameters: 855c6c1daeSBarry Smith + stack - The stack 865c6c1daeSBarry Smith - item - The integer to push 875c6c1daeSBarry Smith 885c6c1daeSBarry Smith Level: developer 895c6c1daeSBarry Smith 90db781477SPatrick Sanan .seealso: `PetscIntStackCreate()`, `PetscIntStackDestroy()`, `PetscIntStackEmpty()`, `PetscIntStackPop()`, `PetscIntStackTop()` 915c6c1daeSBarry Smith @*/ 92d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscIntStackPush(PetscIntStack stack, int item) 93d71ae5a4SJacob Faibussowitsch { 945c6c1daeSBarry Smith PetscFunctionBegin; 957a101e5eSJacob Faibussowitsch PetscValidPointer(stack, 1); 967a101e5eSJacob Faibussowitsch if (++stack->top >= stack->max) { 975c6c1daeSBarry Smith stack->max *= 2; 987a101e5eSJacob Faibussowitsch PetscCall(PetscRealloc(stack->max * sizeof(*stack->stack), &stack->stack)); 995c6c1daeSBarry Smith } 1005c6c1daeSBarry Smith stack->stack[stack->top] = item; 101*3ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 1025c6c1daeSBarry Smith } 1035c6c1daeSBarry Smith 1045c6c1daeSBarry Smith /*@C 1055c6c1daeSBarry Smith PetscIntStackPop - This function pops an integer from the stack. 1065c6c1daeSBarry Smith 1075c6c1daeSBarry Smith Not Collective 1085c6c1daeSBarry Smith 1095c6c1daeSBarry Smith Input Parameter: 1105c6c1daeSBarry Smith . stack - The stack 1115c6c1daeSBarry Smith 1125c6c1daeSBarry Smith Output Parameter: 1135c6c1daeSBarry Smith . item - The integer popped 1145c6c1daeSBarry Smith 1155c6c1daeSBarry Smith Level: developer 1165c6c1daeSBarry Smith 117db781477SPatrick Sanan .seealso: `PetscIntStackCreate()`, `PetscIntStackDestroy()`, `PetscIntStackEmpty()`, `PetscIntStackPush()`, `PetscIntStackTop()` 1185c6c1daeSBarry Smith @*/ 119d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscIntStackPop(PetscIntStack stack, int *item) 120d71ae5a4SJacob Faibussowitsch { 1215c6c1daeSBarry Smith PetscFunctionBegin; 1227a101e5eSJacob Faibussowitsch PetscValidPointer(stack, 1); 12308401ef6SPierre Jolivet PetscCheck(stack->top != -1, PETSC_COMM_SELF, PETSC_ERR_ARG_WRONGSTATE, "Stack is empty"); 1247a101e5eSJacob Faibussowitsch if (item) { 1257a101e5eSJacob Faibussowitsch PetscValidIntPointer(item, 2); 1267a101e5eSJacob Faibussowitsch PetscCall(PetscIntStackTop(stack, item)); 1277a101e5eSJacob Faibussowitsch } 1287a101e5eSJacob Faibussowitsch --stack->top; 129*3ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 1305c6c1daeSBarry Smith } 1315c6c1daeSBarry Smith 1325c6c1daeSBarry Smith /*@C 1335c6c1daeSBarry Smith PetscIntStackCreate - This function creates a stack. 1345c6c1daeSBarry Smith 1355c6c1daeSBarry Smith Not Collective 1365c6c1daeSBarry Smith 1375c6c1daeSBarry Smith Output Parameter: 1385c6c1daeSBarry Smith . stack - The stack 1395c6c1daeSBarry Smith 1405c6c1daeSBarry Smith Level: developer 1415c6c1daeSBarry Smith 142db781477SPatrick Sanan .seealso: `PetscIntStackDestroy()`, `PetscIntStackEmpty()`, `PetscIntStackPush()`, `PetscIntStackPop()`, `PetscIntStackTop()` 1435c6c1daeSBarry Smith @*/ 144d71ae5a4SJacob Faibussowitsch PetscErrorCode PetscIntStackCreate(PetscIntStack *stack) 145d71ae5a4SJacob Faibussowitsch { 1465c6c1daeSBarry Smith PetscFunctionBegin; 1475c6c1daeSBarry Smith PetscValidPointer(stack, 1); 1487a101e5eSJacob Faibussowitsch PetscCall(PetscNew(stack)); 149a297a907SKarl Rupp 1507a101e5eSJacob Faibussowitsch (*stack)->top = -1; 1517a101e5eSJacob Faibussowitsch (*stack)->max = 128; 152a297a907SKarl Rupp 1537a101e5eSJacob Faibussowitsch PetscCall(PetscCalloc1((*stack)->max, &(*stack)->stack)); 154*3ba16761SJacob Faibussowitsch PetscFunctionReturn(PETSC_SUCCESS); 1555c6c1daeSBarry Smith } 156