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 / SET.C < prev    next >
C/C++ Source or Header  |  1996-07-30  |  7KB  |  208 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. #ifdef WBSTDC
  33.   int Compare(void *nullitem, char *item1, char *item2)
  34. #else
  35.   int Compare(nullitem, item1, item2)
  36.     void *nullitem;
  37.     char *item1,
  38.          *item2;
  39. #endif
  40.   {
  41.     WBTrcEntry(0,"Compare",("%p, %s, %s",nullitem,item1?item1:"NULL",item2?item2:"NULL"));
  42.  
  43.     nullitem = nullitem;
  44.  
  45.     WBTrcReturn(0,strcmp(item1,item2),("%d",strcmp(item1,item2)));
  46.   }
  47.  
  48. #ifdef WBSTDC
  49.   void *Copy(void *nullitem, char *item)
  50. #else
  51.   void *Copy(nullitem, item)
  52.     void *nullitem;
  53.     char *item;
  54. #endif
  55.   {
  56.     char *newstr;
  57.  
  58.     WBTrcEntry(0,"Copy",("%p, %s",nullitem,item?item:"NULL"));
  59.  
  60.     nullitem = nullitem;
  61.  
  62.     if ((newstr = malloc(strlen(item)+1)) != NULL)
  63.       strcpy(newstr,item);
  64.  
  65.     WBTrcReturn(0,newstr,("%p",newstr));
  66.   }
  67.  
  68. #ifdef WBSTDC
  69.   void Print(void *nullitem, char *item)
  70. #else
  71.   void Print(nullitem, item)
  72.     void *nullitem;
  73.     char *item;
  74. #endif
  75.   {
  76.     WBTrcEntry(0,"Print",("%p, %s",nullitem,item?item:"NULL"));
  77.  
  78.     nullitem = nullitem;
  79.  
  80.     printf("%s\n",item);
  81.  
  82.     WBTrcVReturn(0,(""));
  83.   }
  84.  
  85. #ifdef WBSTDC
  86.   void Delete(void *nullitem, char *item)
  87. #else
  88.   void Delete(nullitem, item)
  89.     void *nullitem;
  90.     char *item;
  91. #endif
  92.   {
  93.     WBTrcEntry(0,"Delete",("%p, %s",nullitem,item?item:"NULL"));
  94.  
  95.     nullitem = nullitem;
  96.  
  97.     free(item);
  98.  
  99.     WBTrcVReturn(0,(""));
  100.   }
  101.  
  102. #if defined(WBTRC_LEVEL1) || defined(WBTRC_LEVEL2)
  103.   #ifdef WBSTDC
  104.     int main(int argc, char **argv)
  105.   #else
  106.     int main(argc, argv)
  107.       int argc;
  108.       char **argv;
  109.   #endif
  110. #else
  111.   #ifdef WBSTDC
  112.     int main(void)
  113.   #else
  114.     int main()
  115.   #endif
  116. #endif
  117.   {
  118.     FILE *file;
  119.     WBSET *newset, *set1, *set2;
  120.     char str[41], *strptr;
  121.  
  122.     WBTrcMainEntry();
  123.  
  124.     if ((set1 = WBSetOpen(NULL)) != NULL)
  125.       if ((set2 = WBSetOpen(NULL)) != NULL)
  126.     if ((newset = WBSetOpen(NULL)) != NULL)
  127.       {
  128. #ifdef FUNCTCAST
  129.         WBSetCompareF(set1,NULL,(int (*)(void *, void *, void *))Compare);
  130.         WBSetExecuteF(set1,NULL,(void (*)(void *, void *))Print);
  131.         WBSetDeleteF(set1,NULL,(void (*)(void *, void *))Delete);
  132.         WBSetCompareF(set2,NULL,(int (*)(void *, void *, void *))Compare);
  133.         WBSetExecuteF(set2,NULL,(void (*)(void *, void *))Print);
  134.         WBSetDeleteF(set2,NULL,(void (*)(void *, void *))Delete);
  135.         WBSetCompareF(newset,NULL,(int (*)(void *, void *, void *))Compare);
  136.         WBSetExecuteF(newset,NULL,(void (*)(void *, void *))Print);
  137.         WBSetDeleteF(newset,NULL,(void (*)(void *, void *))Delete);
  138.         WBSetCopyF(newset,NULL,(void *(*)(void *, void *))Copy);
  139. #else
  140.         WBSetCompareF(set1,NULL,(int (*)())Compare);
  141.         WBSetExecuteF(set1,NULL,(void (*)())Print);
  142.         WBSetDeleteF(set1,NULL,(void (*)())Delete);
  143.         WBSetCompareF(set2,NULL,(int (*)())Compare);
  144.         WBSetExecuteF(set2,NULL,(void (*)())Print);
  145.         WBSetDeleteF(set2,NULL,(void (*)())Delete);
  146.         WBSetCompareF(newset,NULL,(int (*)())Compare);
  147.         WBSetExecuteF(newset,NULL,(void (*)())Print);
  148.         WBSetDeleteF(newset,NULL,(void (*)())Delete);
  149.         WBSetCopyF(newset,NULL,(void *(*)())Copy);
  150. #endif
  151.  
  152.         if ((file = fopen("data.dat","rt")) != NULL)
  153.           {
  154.         while (fgets(str,40,file))
  155.           {
  156.             if (*str && *(str+strlen(str)-1) == '\n')
  157.               *(str+strlen(str)-1) = '\0';
  158.             if ((strptr = malloc(strlen(str)+1)) != NULL)
  159.               {
  160.             strcpy(strptr,str);
  161.             if (WBSetAdd(set1,strptr) == -1)
  162.               free(strptr);
  163.               }
  164.           }
  165.         fclose(file);
  166.           }
  167.         if ((file = fopen("data2.dat","rt")) != NULL)
  168.           {
  169.         while (fgets(str,40,file))
  170.           {
  171.                     if (*str && *(str+strlen(str)-1) == '\n')
  172.                       *(str+strlen(str)-1) = '\0';
  173.                     if ((strptr = malloc(strlen(str)+1)) != NULL)
  174.                       {
  175.                         strcpy(strptr,str);
  176.                         if (WBSetAdd(set2,strptr) == -1)
  177.                           free(strptr);
  178.                       }
  179.                   }
  180.                 fclose(file);
  181.               }
  182.             printf("     Executing set1\n");
  183.             WBSetExecute(set1);
  184.             printf("     Executing set2\n");
  185.             WBSetExecute(set2);
  186.  
  187.             if (WBSetIsSubset(set1,set2))
  188.           printf("set2 is a subset of set1, set1 is a superset of set2\n");
  189.             else
  190.           printf("set2 is NOT a subset of set1\n");
  191.  
  192.             if (WBSetIsSubset(set2,set1))
  193.               printf("set1 is a subset of set2, set2 is a superset of set1\n");
  194.             else
  195.               printf("set1 is NOT a subset of set2\n");
  196.  
  197.             if (WBSetIsEqual(set1,set2))
  198.               printf("Set1 and Set2 are Equal\n");
  199.             else
  200.               printf("Set1 and Set2 are NOT Equal\n");
  201.  
  202.             WBSetClose(set1);
  203.             WBSetClose(set2);
  204.             WBSetClose(newset);
  205.           }
  206.     WBTrcReturn(0,0,("0"));
  207.   }
  208.