Advertisement
Guest User

Untitled

a guest
Feb 23rd, 2020
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.24 KB | None | 0 0
  1. #include "cchashtable.h"
  2. #include "common.h"
  3. #include "string.h"
  4. unsigned long sdbm(unsigned char *str)
  5. {
  6.     unsigned long hash = 0;
  7.     int c;
  8.     while (c = *str++)
  9.         hash = c + (hash << 6) + (hash << 16) - hash;
  10.     return hash;
  11. }
  12. unsigned long H(unsigned char *str)
  13. {
  14.     return sdbm(*str)%TABLE_SIZE;
  15. }
  16.  
  17. int HtCreate(CC_HASH_TABLE **HashTable)
  18. {
  19.     //CC_UNREFERENCED_PARAMETER(HashTable);
  20.     *HashTable=(CC_HASH_TABLE*)malloc(sizeof(HashTable));
  21.     if(!*HashTable)
  22.     {
  23.         printf("Eroare alocare memorie");
  24.         exit(-1);
  25.     }
  26.     (*HashTable)->v=(bucket*)malloc(TABLE_SIZE*sizeof(bucket));
  27.     if(!(*HashTable)->v)
  28.     {
  29.         printf("Eroare alocare memorie");
  30.         exit(-1);
  31.     }
  32.     return 0;
  33. }
  34.  
  35. int HtDestroy(CC_HASH_TABLE **HashTable)
  36. {
  37.     for(int i=0;i<TABLE_SIZE;i++)
  38.     {
  39.         if((HashTable->v+i)->key)
  40.             free((HashTable->v+i)->key);
  41.     }
  42.     free(*HashTable->v);
  43.     free(*HashTable);
  44.     return 0;
  45. }
  46.  
  47. int HtSetKeyValue(CC_HASH_TABLE *HashTable, char *Key, int Value)//
  48. {
  49.     //CC_UNREFERENCED_PARAMETER(HashTable);
  50.     //CC_UNREFERENCED_PARAMETER(Key);
  51.     //CC_UNREFERENCED_PARAMETER(Value);
  52.     if(HtHasKey(HashTable,Key))
  53.         return -1;
  54.     CC_HASH_TABLE_ITERATOR *Iterator;
  55.     char* iterator_key;
  56.     HtGetFirstKey(HashTable,&Iterator,&Key);
  57.     Iterator->i=H(Key);
  58.     int c=0;
  59.     while((Iterator->HashTable->v+Iterator->i)->key&&*((Iterator->HashTable->v+Iterator->i)->key)!=1)
  60.     {
  61.         c++;
  62.         if(c==TABLE_SIZE)
  63.         {
  64.             return -1;
  65.         }
  66.         if(Iterator->i==TABLE_SIZE-1)
  67.             Iterator->i=0;
  68.         else
  69.             Iterator->i++;
  70.     }
  71.     if((Iterator->HashTable->v+Iterator->i)->key)
  72.         free((Iterator->HashTable->v+Iterator->i)->key);
  73.     (Iterator->HashTable->v+Iterator->i)->key=(char*)malloc(sizeof(char)*(strlen(Key)+1));
  74.     strcpy((Iterator->HashTable->v+Iterator->i)->key,Key);
  75.     (Iterator->HashTable->v+Iterator->i)->value=Value;
  76.     return 0;
  77. }
  78.  
  79. int HtGetKeyValue(CC_HASH_TABLE *HashTable, char *Key, int *Value)
  80. {
  81.     //CC_UNREFERENCED_PARAMETER(HashTable);
  82.     //CC_UNREFERENCED_PARAMETER(Key);
  83.     //CC_UNREFERENCED_PARAMETER(Value);
  84.      if(!HtHasKey(HashTable,Key))
  85.         return -1;
  86.     CC_HASH_TABLE_ITERATOR *Iterator;
  87.     char* iterator_key;
  88.     HtGetFirstKey(HashTable,&Iterator,&Key);
  89.     Iterator->i=H(Key)-1;
  90.     while(HtGetNextKeyB(Iterator,&iterator_key)==0)
  91.     {
  92.         if(!strcmp(Key,iterator_key))
  93.         {
  94.             *Value=(Iterator->HashTable->v+Iterator->i)->value;
  95.             return 0;
  96.         }
  97.     }
  98.     return -1;
  99. }
  100.  
  101. int HtRemoveKey(CC_HASH_TABLE *HashTable, char *Key)//
  102. {
  103.     //CC_UNREFERENCED_PARAMETER(HashTable);
  104.     //CC_UNREFERENCED_PARAMETER(Key);
  105.     if(!HtHasKey(HashTable,Key))
  106.         return -1;
  107.     CC_HASH_TABLE_ITERATOR *Iterator;
  108.     char* iterator_key;
  109.     HtGetFirstKey(HashTable,&Iterator,&Key);
  110.     Iterator->i=H(Key)-1;
  111.     while(HtGetNextKeyB(Iterator,&iterator_key)==0)
  112.     {
  113.         if(!strcmp(Key,iterator_key))
  114.         {
  115.             free((Iterator->HashTable->v+Iterator->i)->key);
  116.             (Iterator->HashTable->v+Iterator->i)->key=(char*)malloc(sizeof(char));
  117.             *((Iterator->HashTable->v+Iterator->i)->key)=1;
  118.             return 0;
  119.         }
  120.     }
  121.     return -1;
  122.  
  123. }
  124.  
  125. int HtHasKey(CC_HASH_TABLE *HashTable, char *Key)//
  126. {
  127.     //CC_UNREFERENCED_PARAMETER(HashTable);
  128.     //CC_UNREFERENCED_PARAMETER(Key);
  129.     CC_HASH_TABLE_ITERATOR *Iterator;
  130.     char* iterator_key;
  131.     HtGetFirstKey(HashTable,&Iterator,&iterator_key);
  132.     Iterator->i=H(Key)-1;
  133.     while(HtGetNextKeyB(Iterator,&iterator_key)==0)
  134.     {
  135.         if(!strcmp(Key,iterator_key))
  136.         {
  137.             return 1;
  138.         }
  139.     }
  140.     return 0;
  141. }
  142.  
  143. int HtGetFirstKey(CC_HASH_TABLE* HashTable, CC_HASH_TABLE_ITERATOR **Iterator, char **Key)//
  144. {
  145.     CC_HASH_TABLE_ITERATOR *iterator = NULL;
  146.  
  147.     //CC_UNREFERENCED_PARAMETER(Key);
  148.  
  149.     if (NULL == HashTable)
  150.     {
  151.         return -1;
  152.     }
  153.     if (NULL == Iterator)
  154.     {
  155.         return -1;
  156.     }
  157.     if (NULL == Key)
  158.     {
  159.         return -1;
  160.     }
  161.  
  162.     iterator = (CC_HASH_TABLE_ITERATOR*)malloc(sizeof(CC_HASH_TABLE_ITERATOR));
  163.     if (NULL == iterator)
  164.     {
  165.         return -1;
  166.     }
  167.  
  168.     memset(iterator, 0, sizeof(*iterator));
  169.  
  170.     iterator->HashTable = HashTable;
  171.     // INITIALIZE THE REST OF THE FIELDS OF iterator
  172.     iterator->i=-1;
  173.  
  174.  
  175.     // FIND THE FIRST KEY AND SET Key
  176.     HtGetNextKey(iterator,Key);
  177.     *Iterator = iterator;
  178.     return 0;
  179. }
  180.  
  181. int HtGetNextKey(CC_HASH_TABLE_ITERATOR *Iterator, char **Key)//
  182. {
  183.     //CC_UNREFERENCED_PARAMETER(Key);
  184.     //CC_UNREFERENCED_PARAMETER(Iterator);
  185.     Iterator->i++;
  186.     while(!(Iterator->HashTable->v+Iterator->i)->key||(*(Iterator->HashTable->v+Iterator->i)->key==1))
  187.     {
  188.         if(Iterator->i==TABLE_SIZE-1)
  189.             return -2;
  190.         Iterator->i++;
  191.     }
  192.     strcpy(*Key,(Iterator->HashTable->v+Iterator->i)->key);
  193.     return 0;
  194. }
  195. int HtGetHextKeyB(CC_HASH_TABLE_ITERATOR *Iterator, char **Key)//
  196. {
  197.     //CC_UNREFERENCED_PARAMETER(Key);
  198.     //CC_UNREFERENCED_PARAMETER(Iterator);
  199.     Iterator->i++;
  200.     int c=0;
  201.     if((Iterator->HashTable->v+Iterator->i)->key)
  202.     {
  203.         strcpy(*Key,(Iterator->HashTable->v+Iterator->i)->key);
  204.         return 0;
  205.     }
  206.     while(*(Iterator->HashTable->v+Iterator->i)->key==1)
  207.     {
  208.         if(c==TABLE_SIZE-1)
  209.             return -2;
  210.         if(Iterator->i<TABLE_SIZE-1)
  211.             Iterator->i++;
  212.         else
  213.             Iterator->i=0;
  214.         c++;
  215.     }
  216.     if((Iterator->HashTable->v+Iterator->i)->key)
  217.     {
  218.         strcpy(*Key,(Iterator->HashTable->v+Iterator->i)->key);
  219.         return 0;
  220.     }
  221.     return -1;
  222.     return 0;
  223. }
  224.  
  225. int HtReleaseIterator(CC_HASH_TABLE_ITERATOR **Iterator) //
  226. {
  227.     //CC_UNREFERENCED_PARAMETER(Iterator);
  228.     free(*Iterator);
  229.     return 0;
  230. }
  231.  
  232. int HtClear(CC_HASH_TABLE *HashTable) //
  233. {
  234.     //CC_UNREFERENCED_PARAMETER(HashTable);
  235.     for(int i=0;i<TABLE_SIZE;i++)
  236.     {
  237.         if((HashTable->v)->key)
  238.             free((HashTable->v)->key);
  239.     }
  240.     free(HashTable->v);
  241.     return -1;
  242. }
  243.  
  244. int HtGetKeyCount(CC_HASH_TABLE *HashTable)
  245. {
  246.     CC_UNREFERENCED_PARAMETER(HashTable);
  247.     return -1;
  248. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement