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 / memslc.3 / phash.c < prev    next >
C/C++ Source or Header  |  1996-07-30  |  5KB  |  158 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. #include <string.h>
  28. #include <malloc.h>
  29.  
  30. #include "../memsl.h"
  31.  
  32. WBPHASH *phash;
  33. char strarray[200][21];
  34. int numexe = 0;
  35.  
  36. #ifdef WBSTDC
  37.   int Compare(void *nullitem, char *item1, char *item2)
  38. #else
  39.   int Compare(nullitem, item1, item2)
  40.     void *nullitem;
  41.     char *item1,
  42.          *item2;
  43. #endif
  44.   {
  45.     WBTrcEntry(0,"Compare",("%p, %s, %s",nullitem,item1?item1:"NULL",item2?item2:"NULL"));
  46.  
  47.     nullitem = nullitem;
  48.  
  49.     WBTrcReturn(0,strcmp(item1,item2),("%d",strcmp(item1,item2)));
  50.   }
  51.  
  52. #ifdef WBSTDC
  53.   void Execute(void *nullitem, char *item)
  54. #else
  55.   void Execute(nullitem, item)
  56.     void *nullitem;
  57.     char *item;
  58. #endif
  59.   {
  60.     WBTrcEntry(0,"Execute",("%p, %s",nullitem,item?item:"NULL"));
  61.  
  62.     nullitem = nullitem;
  63.  
  64.     numexe++;
  65.     printf("%d  %s\n",numexe,item);
  66.  
  67.     WBTrcVReturn(0,(""));
  68.   }
  69.  
  70. #if defined(WBTRC_LEVEL1) || defined(WBTRC_LEVEL2)
  71.   #ifdef WBSTDC
  72.     int main(int argc, char **argv)
  73.   #else
  74.     int main(argc, argv)
  75.       int argc;
  76.       char **argv;
  77.   #endif
  78. #else
  79.   #ifdef WBSTDC
  80.     int main(void)
  81.   #else
  82.     int main()
  83.   #endif
  84. #endif
  85.   {
  86.     FILE *file;
  87.     int i = 0, i2;
  88.  
  89.     WBTrcMainEntry();
  90.  
  91.     memset(strarray,0,sizeof(strarray));
  92.  
  93.     if ((phash = WBPHashOpen(NULL,10,3)) != NULL)
  94.       {
  95.     WBPHashHashingF(phash,NULL,WBPHashFunct);
  96. #ifdef FUNCTCAST
  97.     WBPHashCompareF(phash,NULL,(int (*)(void *, void *, void *))Compare);
  98.     WBPHashExecuteF(phash,NULL,(void (*)(void *, void *))Execute);
  99. #else
  100.     WBPHashCompareF(phash,NULL,(int (*)())Compare);
  101.     WBPHashExecuteF(phash,NULL,(void (*)())Execute);
  102. #endif
  103.  
  104.     if (WBPHashIsEmpty(phash))
  105.           printf("Hash table is empty.\n");
  106.         else
  107.           printf("Hash table is NOT empty.\n");
  108.  
  109.         if ((file = fopen("data.dat","r")) != NULL)
  110.           {
  111.             while (i < 200 && fgets(strarray[i],20,file))
  112.               {
  113.                 if (strarray[i][strlen(strarray[i])-1] == '\n')
  114.                   strarray[i][strlen(strarray[i])-1] = 0;
  115.         WBPHashAdd(phash,strarray[i]);
  116.                 i++;
  117.               }
  118.             fclose(file);
  119.  
  120.         printf("Hash table statistics can be found in \"phash.sta\"\n");
  121.         WBPHashStats(phash,"phash.sta");
  122.         if (WBPHashIsEmpty(phash))
  123.               printf("Hash table is empty.\n");
  124.             else
  125.               printf("Hash table is NOT empty.\n");
  126.  
  127.             printf("Hash Table contains %ld items.\n",WBPHashNumItems(phash));
  128.  
  129.             WBPHashExecute(phash);
  130.  
  131.             for (i2 = 0; i2 < i; i2++)
  132.               {
  133.                 if (WBPHashSearch(phash,strarray[i2]))
  134.                   printf("WBPHashSearch(): Found %s\n",strarray[i2]);
  135.                 else
  136.                   printf("WBPHashSearch(): %s was not found\n",strarray[i2]);
  137.           }
  138.             printf("i2 = %d\n",i2);
  139.  
  140.             /*
  141.             ** No deletion function is defined, so the items
  142.             ** will not be freed.  Only the cells holding
  143.             ** the items will be freed.
  144.             */
  145.             for (i2 = 0; i2 < i; i2++)
  146.               {
  147.                 if (WBPHashDelete(phash,strarray[i2]))
  148.                   printf("WBPHashDelete(): Deleted %s\n",strarray[i2]);
  149.                 else
  150.                   printf("WBPHashDelete(): %s was not found\n",strarray[i2]);
  151.               }
  152.             printf("i2 = %d\n",i2);
  153.           }
  154.         WBPHashClose(phash);
  155.       }
  156.     WBTrcReturn(0,0,("0"));
  157.   }
  158.