Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "cchashtable.h"
- #include "common.h"
- #include "string.h"
- unsigned long sdbm(unsigned char *str)
- {
- unsigned long hash = 0;
- int c;
- while (c = *str++)
- hash = c + (hash << 6) + (hash << 16) - hash;
- return hash;
- }
- unsigned long H(unsigned char *str)
- {
- return sdbm(*str)%TABLE_SIZE;
- }
- int HtCreate(CC_HASH_TABLE **HashTable)
- {
- //CC_UNREFERENCED_PARAMETER(HashTable);
- *HashTable=(CC_HASH_TABLE*)malloc(sizeof(HashTable));
- if(!*HashTable)
- {
- printf("Eroare alocare memorie");
- exit(-1);
- }
- (*HashTable)->v=(bucket*)malloc(TABLE_SIZE*sizeof(bucket));
- if(!(*HashTable)->v)
- {
- printf("Eroare alocare memorie");
- exit(-1);
- }
- return 0;
- }
- int HtDestroy(CC_HASH_TABLE **HashTable)
- {
- for(int i=0;i<TABLE_SIZE;i++)
- {
- if((HashTable->v+i)->key)
- free((HashTable->v+i)->key);
- }
- free(*HashTable->v);
- free(*HashTable);
- return 0;
- }
- int HtSetKeyValue(CC_HASH_TABLE *HashTable, char *Key, int Value)//
- {
- //CC_UNREFERENCED_PARAMETER(HashTable);
- //CC_UNREFERENCED_PARAMETER(Key);
- //CC_UNREFERENCED_PARAMETER(Value);
- if(HtHasKey(HashTable,Key))
- return -1;
- CC_HASH_TABLE_ITERATOR *Iterator;
- char* iterator_key;
- HtGetFirstKey(HashTable,&Iterator,&Key);
- Iterator->i=H(Key);
- int c=0;
- while((Iterator->HashTable->v+Iterator->i)->key&&*((Iterator->HashTable->v+Iterator->i)->key)!=1)
- {
- c++;
- if(c==TABLE_SIZE)
- {
- return -1;
- }
- if(Iterator->i==TABLE_SIZE-1)
- Iterator->i=0;
- else
- Iterator->i++;
- }
- if((Iterator->HashTable->v+Iterator->i)->key)
- free((Iterator->HashTable->v+Iterator->i)->key);
- (Iterator->HashTable->v+Iterator->i)->key=(char*)malloc(sizeof(char)*(strlen(Key)+1));
- strcpy((Iterator->HashTable->v+Iterator->i)->key,Key);
- (Iterator->HashTable->v+Iterator->i)->value=Value;
- return 0;
- }
- int HtGetKeyValue(CC_HASH_TABLE *HashTable, char *Key, int *Value)
- {
- //CC_UNREFERENCED_PARAMETER(HashTable);
- //CC_UNREFERENCED_PARAMETER(Key);
- //CC_UNREFERENCED_PARAMETER(Value);
- if(!HtHasKey(HashTable,Key))
- return -1;
- CC_HASH_TABLE_ITERATOR *Iterator;
- char* iterator_key;
- HtGetFirstKey(HashTable,&Iterator,&Key);
- Iterator->i=H(Key)-1;
- while(HtGetNextKeyB(Iterator,&iterator_key)==0)
- {
- if(!strcmp(Key,iterator_key))
- {
- *Value=(Iterator->HashTable->v+Iterator->i)->value;
- return 0;
- }
- }
- return -1;
- }
- int HtRemoveKey(CC_HASH_TABLE *HashTable, char *Key)//
- {
- //CC_UNREFERENCED_PARAMETER(HashTable);
- //CC_UNREFERENCED_PARAMETER(Key);
- if(!HtHasKey(HashTable,Key))
- return -1;
- CC_HASH_TABLE_ITERATOR *Iterator;
- char* iterator_key;
- HtGetFirstKey(HashTable,&Iterator,&Key);
- Iterator->i=H(Key)-1;
- while(HtGetNextKeyB(Iterator,&iterator_key)==0)
- {
- if(!strcmp(Key,iterator_key))
- {
- free((Iterator->HashTable->v+Iterator->i)->key);
- (Iterator->HashTable->v+Iterator->i)->key=(char*)malloc(sizeof(char));
- *((Iterator->HashTable->v+Iterator->i)->key)=1;
- return 0;
- }
- }
- return -1;
- }
- int HtHasKey(CC_HASH_TABLE *HashTable, char *Key)//
- {
- //CC_UNREFERENCED_PARAMETER(HashTable);
- //CC_UNREFERENCED_PARAMETER(Key);
- CC_HASH_TABLE_ITERATOR *Iterator;
- char* iterator_key;
- HtGetFirstKey(HashTable,&Iterator,&iterator_key);
- Iterator->i=H(Key)-1;
- while(HtGetNextKeyB(Iterator,&iterator_key)==0)
- {
- if(!strcmp(Key,iterator_key))
- {
- return 1;
- }
- }
- return 0;
- }
- int HtGetFirstKey(CC_HASH_TABLE* HashTable, CC_HASH_TABLE_ITERATOR **Iterator, char **Key)//
- {
- CC_HASH_TABLE_ITERATOR *iterator = NULL;
- //CC_UNREFERENCED_PARAMETER(Key);
- if (NULL == HashTable)
- {
- return -1;
- }
- if (NULL == Iterator)
- {
- return -1;
- }
- if (NULL == Key)
- {
- return -1;
- }
- iterator = (CC_HASH_TABLE_ITERATOR*)malloc(sizeof(CC_HASH_TABLE_ITERATOR));
- if (NULL == iterator)
- {
- return -1;
- }
- memset(iterator, 0, sizeof(*iterator));
- iterator->HashTable = HashTable;
- // INITIALIZE THE REST OF THE FIELDS OF iterator
- iterator->i=-1;
- // FIND THE FIRST KEY AND SET Key
- HtGetNextKey(iterator,Key);
- *Iterator = iterator;
- return 0;
- }
- int HtGetNextKey(CC_HASH_TABLE_ITERATOR *Iterator, char **Key)//
- {
- //CC_UNREFERENCED_PARAMETER(Key);
- //CC_UNREFERENCED_PARAMETER(Iterator);
- Iterator->i++;
- while(!(Iterator->HashTable->v+Iterator->i)->key||(*(Iterator->HashTable->v+Iterator->i)->key==1))
- {
- if(Iterator->i==TABLE_SIZE-1)
- return -2;
- Iterator->i++;
- }
- strcpy(*Key,(Iterator->HashTable->v+Iterator->i)->key);
- return 0;
- }
- int HtGetHextKeyB(CC_HASH_TABLE_ITERATOR *Iterator, char **Key)//
- {
- //CC_UNREFERENCED_PARAMETER(Key);
- //CC_UNREFERENCED_PARAMETER(Iterator);
- Iterator->i++;
- int c=0;
- if((Iterator->HashTable->v+Iterator->i)->key)
- {
- strcpy(*Key,(Iterator->HashTable->v+Iterator->i)->key);
- return 0;
- }
- while(*(Iterator->HashTable->v+Iterator->i)->key==1)
- {
- if(c==TABLE_SIZE-1)
- return -2;
- if(Iterator->i<TABLE_SIZE-1)
- Iterator->i++;
- else
- Iterator->i=0;
- c++;
- }
- if((Iterator->HashTable->v+Iterator->i)->key)
- {
- strcpy(*Key,(Iterator->HashTable->v+Iterator->i)->key);
- return 0;
- }
- return -1;
- return 0;
- }
- int HtReleaseIterator(CC_HASH_TABLE_ITERATOR **Iterator) //
- {
- //CC_UNREFERENCED_PARAMETER(Iterator);
- free(*Iterator);
- return 0;
- }
- int HtClear(CC_HASH_TABLE *HashTable) //
- {
- //CC_UNREFERENCED_PARAMETER(HashTable);
- for(int i=0;i<TABLE_SIZE;i++)
- {
- if((HashTable->v)->key)
- free((HashTable->v)->key);
- }
- free(HashTable->v);
- return -1;
- }
- int HtGetKeyCount(CC_HASH_TABLE *HashTable)
- {
- CC_UNREFERENCED_PARAMETER(HashTable);
- return -1;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement