home *** CD-ROM | disk | FTP | other *** search
/ C/C++ User's Journal & Wi…eveloper's Journal Tools / C-C__Users_Journal_and_Windows_Developers_Journal_Tools_1997.iso / windbase / windbase.exe / MEMSLC.3 / PQUEUE.C < prev    next >
C/C++ Source or Header  |  1996-08-01  |  12KB  |  388 lines

  1. /*****************************************************************************\
  2. **                                                                           **
  3. **  WW     WW IIIIIIII NNN   NN DDDDDDD  BBBBBBB     AA     SSSSSS EEEEEEEE  **
  4. **  WW  W  WW    II    NNNN  NN DD    DD BB    BB  AA  AA  SS      EE        **
  5. **  WW  W  WW    II    NN NN NN DD    DD BBBBBBB  AAAAAAAA  SSSSSS EEEEEE    **
  6. **   WW W WW     II    NN  NNNN DD    DD BB    BB AA    AA      SS EE        **
  7. **    WWWWW   IIIIIIII NN   NNN DDDDDDD  BBBBBBB  AA    AA SSSSSS  EEEEEEEE  **
  8. **                                                                           **
  9. **   SSSSSS  OOOOOO  FFFFFFFF TTTTTTTT WW     WW    AA    RRRRRRR  EEEEEEEE  **
  10. **  SS      OO    OO FF          TT    WW  W  WW  AA  AA  RR    RR EE        **
  11. **   SSSSS  OO    OO FFFFF       TT    WW  W  WW AAAAAAAA RRRRRRR  EEEEEE    **
  12. **       SS OO    OO FF          TT     WW W WW  AA    AA RR   RR  EE        **
  13. **  SSSSSS   OOOOOO  FF          TT      WWWWW   AA    AA RR    RR EEEEEEEE  **
  14. **                                                                           **
  15. *********** NOTICE ************************************************************
  16. **        This file contains valuable trade secrets and proprietary          **
  17. **        assets of Windbase Software Inc.  Embodying substantial            **
  18. **        creative efforts and confidential information.  Unauthorized       **
  19. **        use, copying, decompiling, translating, disclosure or              **
  20. **        transfer, of any kind, is strictly prohibited.                     **
  21. **                                                                           **
  22. **        COPYRIGHT (C) 1992, 1993, 1994.  Windbase Software Inc.            **
  23. **        ALL RIGHTS RESERVED.                                               **
  24. \*****************************************************************************/
  25.  
  26. #include <stdio.h>
  27. #ifdef HAS_UNISTD_H
  28. #  include <unistd.h>
  29. #else
  30. #  include <stdlib.h>
  31. #endif
  32. #include <string.h>
  33. #include <malloc.h>
  34.  
  35. #include "../memsl.h"
  36.  
  37. /*************************************************************************\
  38. \*************************************************************************/
  39.  
  40. #define LARGETEST 1000
  41.  
  42. struct priority_item
  43.   {
  44.     char *item;
  45.     int priority;
  46.   };
  47.  
  48. struct priority_item item0 = { "Item0", 0 }, item1 = { "Item1", 10 },
  49.              item2 = { "Item2", 20 }, item3 = { "Item3", 30 },
  50.              item4 = { "Item4", 40 }, item5 = { "Item5", 50 },
  51.              item6 = { "Item6", 60 }, item7 = { "Item7", 70 },
  52.              item8 = { "Item8", 80 }, item9 = { "Item9", 90 };
  53.  
  54. #ifdef WBSTDC
  55.   int Priority1(void *nullitem, struct priority_item *item1, struct priority_item *item2)
  56. #else
  57.   int Priority1(nullitem, item1, item2)
  58.     void *nullitem;
  59.     struct priority_item *item1,
  60.              *item2;
  61. #endif
  62.   {
  63.     WBTrcEntry(0,"Priority1",("p1 = %d, p2 = %d",item1->priority,item2->priority));
  64.     nullitem = nullitem;
  65.  
  66.     WBTrcReturn(0,item2->priority - item1->priority,("%d",item2->priority - item1->priority));
  67.   }
  68.  
  69. #ifdef WBSTDC
  70.   int Priority2(void *nullitem, struct priority_item *item1, struct priority_item *item2)
  71. #else
  72.   int Priority2(nullitem, item1, item2)
  73.     void *nullitem;
  74.     struct priority_item *item1,
  75.              *item2;
  76. #endif
  77.   {
  78.     WBTrcEntry(0,"Priority2",("p1 = %d, p2 = %d",item1->priority,item2->priority));
  79.  
  80.     nullitem = nullitem;
  81.  
  82.     WBTrcReturn(0,item1->priority - item2->priority,("%d",item1->priority - item2->priority));
  83.   }
  84.  
  85. #ifdef WBSTDC
  86.   int Compare(void *nullitem, struct priority_item *item1, struct priority_item *item2)
  87. #else
  88.   int Compare(nullitem, item1, item2)
  89.     void *nullitem;
  90.     struct priority_item *item1,
  91.              *item2;
  92. #endif
  93.   {
  94.     WBTrcEntry(0,"Compare",("p1 = %s, p2 = %s",item1->item,item2->item));
  95.  
  96.     nullitem = nullitem;
  97.  
  98.     WBTrcReturn(0,strcmp(item1->item,item2->item),("%d",strcmp(item1->item,item2->item)));
  99.   }
  100.  
  101. #ifdef WBSTDC
  102.   void Execute(void *nullitem, struct priority_item *item)
  103. #else
  104.   void Execute(nullitem, item)
  105.     void *nullitem;
  106.     struct priority_item *item;
  107. #endif
  108.   {
  109.     WBTrcEntry(0,"Execute",("p1 = %s",item->item));
  110.  
  111.     nullitem = nullitem;
  112.  
  113.     printf("%d, %s\n",item->priority,item->item);
  114.  
  115.     WBTrcVReturn(0,(""));
  116.   }
  117.  
  118. #ifdef WBSTDC
  119.   void Delete(void *nullitem, struct priority_item *item)
  120. #else
  121.   void Delete(nullitem, item)
  122.     void *nullitem;
  123.     struct priority_item *item;
  124. #endif
  125.   {
  126.     WBTrcEntry(0,"Delete",("p1 = %s",item->item));
  127.  
  128.     nullitem = nullitem;
  129.  
  130.     printf("Deleting %s\n",item->item);
  131.  
  132.     WBTrcVReturn(0,(""));
  133.   }
  134.  
  135. #ifdef WBSTDC
  136.   void Test1(void)
  137. #else
  138.   void Test1()
  139. #endif
  140.   {
  141.     struct priority_item *itemptr;
  142.     WBPQUEUE *pqueue;
  143.  
  144.     WBTrcEntry(0,"Test1",(""));
  145.  
  146.     if ((pqueue = WBPQueueOpen(NULL, 100, 0)) != NULL)
  147.       {
  148.         WBPQueueDuplicates(pqueue,1);
  149. #ifdef FUNCTCAST
  150.     WBPQueuePriorityF(pqueue,NULL,(int (*)(void *, void *, void *))Priority1);
  151.     WBPQueueCompareF(pqueue,NULL,(int (*)(void *, void *, void *))Compare);
  152.     WBPQueueDeleteF(pqueue,NULL,(void (*)(void *, void *))Delete);
  153.     WBPQueueExecuteF(pqueue,NULL,(void (*)(void *, void *))Execute);
  154. #else
  155.     WBPQueuePriorityF(pqueue,NULL,(int (*)())Priority1);
  156.     WBPQueueCompareF(pqueue,NULL,(int (*)())Compare);
  157.     WBPQueueDeleteF(pqueue,NULL,(void (*)())Delete);
  158.     WBPQueueExecuteF(pqueue,NULL,(void (*)())Execute);
  159. #endif
  160.  
  161.     printf("Numitems = %d\n",WBPQueueNumItems(pqueue));
  162.     printf("Is Empty = %s\n",WBPQueueIsEmpty(pqueue) ? "Yes" : "No");
  163.  
  164.     printf("Add = %d\n",WBPQueueAdd(pqueue, &item0));
  165.     printf("Add = %d\n",WBPQueueAdd(pqueue, &item1));
  166.     printf("Add = %d\n",WBPQueueAdd(pqueue, &item2));
  167.     printf("Add = %d\n",WBPQueueAdd(pqueue, &item3));
  168.  
  169.     printf("Numitems = %d\n",WBPQueueNumItems(pqueue));
  170.     printf("Is Empty = %s\n",WBPQueueIsEmpty(pqueue) ? "Yes" : "No");
  171.  
  172.     WBPQueueClear(pqueue);
  173.  
  174.     printf("Numitems = %d\n",WBPQueueNumItems(pqueue));
  175.     printf("Is Empty = %s\n",WBPQueueIsEmpty(pqueue) ? "Yes" : "No");
  176.  
  177.     printf("Add = %d\n",WBPQueueAdd(pqueue, &item4));
  178.     printf("Add = %d\n",WBPQueueAdd(pqueue, &item5));
  179.     printf("Add = %d\n",WBPQueueAdd(pqueue, &item6));
  180.     printf("Add = %d\n",WBPQueueAdd(pqueue, &item7));
  181.     printf("Add = %d\n",WBPQueueAdd(pqueue, &item8));
  182.     printf("Add = %d\n",WBPQueueAdd(pqueue, &item9));
  183.     printf("Add = %d\n",WBPQueueAdd(pqueue, &item0));
  184.     printf("Add = %d\n",WBPQueueAdd(pqueue, &item1));
  185.     printf("Add = %d\n",WBPQueueAdd(pqueue, &item2));
  186.     printf("Add = %d\n",WBPQueueAdd(pqueue, &item3));
  187.     printf("Add = %d\n",WBPQueueAdd(pqueue, &item4));
  188.     printf("Add = %d\n",WBPQueueAdd(pqueue, &item5));
  189.     printf("Add = %d\n",WBPQueueAdd(pqueue, &item6));
  190.     printf("Add = %d\n",WBPQueueAdd(pqueue, &item7));
  191.     printf("Add = %d\n",WBPQueueAdd(pqueue, &item8));
  192.     printf("Add = %d\n",WBPQueueAdd(pqueue, &item9));
  193.  
  194.     printf("Numitems = %d\n",WBPQueueNumItems(pqueue));
  195.     printf("Is Empty = %s\n",WBPQueueIsEmpty(pqueue) ? "Yes" : "No");
  196.  
  197.     printf("Delete = %d\n",WBPQueueDelete(pqueue, &item2));
  198.     printf("Delete = %d\n",WBPQueueDelete(pqueue, &item2));
  199.     printf("Delete = %d\n",WBPQueueDelete(pqueue, &item4));
  200.     printf("Delete = %d\n",WBPQueueDelete(pqueue, &item4));
  201.     printf("Delete = %d\n",WBPQueueDelete(pqueue, &item6));
  202.     printf("Delete = %d\n",WBPQueueDelete(pqueue, &item8));
  203.     printf("Delete = %d\n",WBPQueueDelete(pqueue, &item8));
  204.  
  205.     printf("Numitems = %d\n",WBPQueueNumItems(pqueue));
  206.     printf("Is Empty = %s\n",WBPQueueIsEmpty(pqueue) ? "Yes" : "No");
  207.  
  208.     printf("Search for %s = %s\n",item9.item,((struct priority_item *)WBPQueueSearch(pqueue, &item9))->item);
  209.  
  210.     WBPQueueExecute(pqueue);
  211.  
  212.     while ((itemptr = WBPQueueGet(pqueue)) != NULL)
  213.       printf("%d  %s\n",itemptr->priority,itemptr->item);
  214.  
  215.     printf("Numitems = %d\n",WBPQueueNumItems(pqueue));
  216.     printf("Is Empty = %s\n",WBPQueueIsEmpty(pqueue) ? "Yes" : "No");
  217.  
  218.     WBPQueueClose(pqueue);
  219.       }
  220.     WBTrcVReturn(0,(""));
  221.   }
  222.  
  223. #ifdef WBSTDC
  224.   void Test2(void)
  225. #else
  226.   void Test2()
  227. #endif
  228.   {
  229.     struct priority_item *itemptr;
  230.     WBPQUEUE *pqueue;
  231.     char itemstr[10],