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 / hash.c < prev    next >
C/C++ Source or Header  |  1996-07-30  |  5KB  |  160 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. WBHASH *hash;
  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 ((hash = WBHashOpen(NULL,50)) != NULL)
  94.       {
  95.         WBHashHashingF(hash,NULL,WBHashFunct);
  96. #ifdef FUNCTCAST
  97.         WBHashCompareF(hash,NULL,(int (*)(void *, void *, void *))Compare);
  98.         WBHashExecuteF(hash,NULL,(void (*)(void *, void *))Execute);
  99. #else
  100.         WBHashCompareF(hash,NULL,(int (*)())Compare);
  101.         WBHashExecuteF(hash,NULL,(void (*)())Execute);
  102. #endif
  103.  
  104.     WBHashStats(hash,"hash.sta");
  105.  
  106.     if (WBHashIsEmpty(hash))
  107.           printf("Hash table is empty.\n");
  108.         else
  109.           printf("Hash table is NOT empty.\n");
  110.  
  111.         if ((file = fopen("data.dat","r")) != NULL)
  112.           {
  113.             while (i < 200 && fgets(strarray[i],20,file))
  114.               {
  115.                 if (strarray[i][strlen(strarray[i])-1] == '\n')
  116.                   strarray[i][strlen(strarray[i])-1] = 0;
  117.         WBHashAdd(hash,strarray[i]);
  118.         i++;
  119.           }
  120.         fclose(file);
  121.  
  122.         printf("Hash statistics can be found in \"hash.sta\"\n");
  123.         WBHashStats(hash,"hash.sta");
  124.         if (WBHashIsEmpty(hash))
  125.           printf("Hash table is empty.\n");
  126.             else
  127.               printf("Hash table is NOT empty.\n");
  128.  
  129.             printf("Hash Table contains %ld items.\n",WBHashNumItems(hash));
  130.  
  131.             WBHashExecute(hash);
  132.  
  133.             for (i2 = 0; i2 < i; i2++)
  134.               {
  135.                 if (WBHashSearch(hash,strarray[i2]))
  136.                   printf("WBHashSearch(): Found %s\n",strarray[i2]);
  137.                 else
  138.                   printf("WBHashSearch(): %s was not found\n",strarray[i2]);
  139.           }
  140.             printf("i2 = %d\n",i2);
  141.  
  142.             /*
  143.             ** No deletion function is defined, so the items
  144.             ** will not be freed.  Only the cells holding
  145.             ** the items will be freed.
  146.             */
  147.             for (i2 = 0; i2 < i; i2++)
  148.               {
  149.                 if (WBHashDelete(hash,strarray[i2]))
  150.                   printf("WBHashDelete(): Deleted %s\n",strarray[i2]);
  151.                 else
  152.                   printf("WBHashDelete(): %s was not found\n",strarray[i2]);
  153.               }
  154.             printf("i2 = %d\n",i2);
  155.           }
  156.         WBHashClose(hash);
  157.       }
  158.     WBTrcReturn(0,0,("0"));
  159.   }
  160.