/*--------------------------------------------------------------------*/ /* teststack.c */ /* Author: Bob Dondero */ /*--------------------------------------------------------------------*/ #include #include #include #include "stack.h" /*--------------------------------------------------------------------*/ /* Print string pvItem using format string pvExtra. */ static void printString(void *pvItem, void *pvExtra) { assert(pvItem != NULL); assert(pvExtra != NULL); printf((char*)pvExtra, (char*)pvItem); } /*--------------------------------------------------------------------*/ /* Accumulate double *pvItem into *pvExtra. */ static void sumDouble(void *pvItem, void *pvExtra) { double *pdItem; double *pdSum; assert(pvItem != NULL); assert(pvExtra != NULL); pdItem = (double*)pvItem; pdSum = (double*)pvExtra; *pdSum += *pdItem; } /*--------------------------------------------------------------------*/ /* Free pvItem. pvExtra is unused. */ static void freeDouble(void *pvItem, void *pvExtra) { free(pvItem); } /*--------------------------------------------------------------------*/ /* Test the Stack ADT. Return 0. For simplicity, ignore the possibility of insufficient memory. */ int main(void) { Stack_T oStack1; Stack_T oStack2; double *pd; double dSum = 0.0; /* Create and use a Stack of strings. */ oStack1 = Stack_new(); Stack_push(oStack1, "Ruth"); Stack_push(oStack1, "Gehrig"); Stack_push(oStack1, "Mantle"); Stack_push(oStack1, "Jeter"); Stack_map(oStack1, printString, "%s\n"); Stack_free(oStack1); /* Create and use a Stack of doubles. */ oStack2 = Stack_new(); pd = (double*)malloc(sizeof(double)); *pd = 1.1; Stack_push(oStack2, pd); pd = (double*)malloc(sizeof(double)); *pd = 2.2; Stack_push(oStack2, pd); pd = (double*)malloc(sizeof(double)); *pd = 3.3; Stack_push(oStack2, pd); Stack_map(oStack2, sumDouble, &dSum); printf("The sum is %g.\n", dSum); Stack_map(oStack2, freeDouble, NULL); Stack_free(oStack2); return 0; }