| | |
| | | TAILQ_ENTRY(tailq_entry_t) joint; |
| | | } tailq_entry_t; |
| | | |
| | | #define START_KEY 1000 |
| | | |
| | | typedef TAILQ_HEAD(tailq_header_t, tailq_entry_t) tailq_header_t; |
| | | |
| | | |
| | |
| | | { |
| | | size_t code = hashcode(key); |
| | | tailq_entry_t *item; |
| | | tailq_header_t *my_tailq_head = hashtable->array[code] ; |
| | | if ( my_tailq_head == NULL) |
| | | tailq_header_t *my_tailq_head = hashtable->array[code]; |
| | | if ((my_tailq_head == NULL) || (check_mm_valid(my_tailq_head) == false)) |
| | | { |
| | | hashtable->array[code] = NULL; |
| | | return NULL; |
| | | } |
| | | else |
| | | { |
| | | TAILQ_FOREACH(item, my_tailq_head, joint) |
| | | { |
| | | if ((item != NULL) && (key == item->key)) { |
| | | return item->value; |
| | | } else { |
| | | mm_free(my_tailq_head); |
| | | hashtable->array[code] = NULL; |
| | | hashtable->queueCount--; |
| | | |
| | | return NULL; |
| | | } |
| | | } |
| | | TAILQ_FOREACH(item, my_tailq_head, joint) |
| | | { |
| | | if ((check_mm_valid(item) == true) && (key == item->key)) |
| | | return item->value; |
| | | |
| | | break; |
| | | } |
| | | |
| | | hashtable->array[code] = NULL; |
| | | hashtable->queueCount--; |
| | | mm_free(my_tailq_head); |
| | | |
| | | return NULL; |
| | | |
| | | } |
| | |
| | | size_t code = hashcode(key); |
| | | void *oldvalue; |
| | | tailq_entry_t *item; |
| | | tailq_header_t *my_tailq_head = hashtable->array[code] ; |
| | | if ( my_tailq_head == NULL) |
| | | tailq_header_t *my_tailq_head = hashtable->array[code]; |
| | | if ((my_tailq_head == NULL) || (check_mm_valid(my_tailq_head) == false)) |
| | | { |
| | | if (inter_key_get() == 0) { |
| | | inter_key_set(key); |
| | |
| | | |
| | | TAILQ_FOREACH(item, my_tailq_head, joint) |
| | | { |
| | | if ((item != NULL) && (key == item->key)) |
| | | if ((check_mm_valid(item) == true) && (key ==item->key)) |
| | | { |
| | | oldvalue = item -> value; |
| | | oldvalue = item->value; |
| | | item->key= key; |
| | | item->value = value; |
| | | return oldvalue; |
| | | } |
| | | } |
| | | |
| | | goto putnew; |
| | | } |
| | | putnew: |
| | | |
| | |
| | | item = (tailq_entry_t *) mm_malloc(sizeof(tailq_entry_t)); |
| | | item->key = key; |
| | | item->value = value; |
| | | TAILQ_INSERT_TAIL(my_tailq_head, item, joint); |
| | | TAILQ_INSERT_HEAD(my_tailq_head, item, joint); |
| | | return NULL; |
| | | } |
| | | |
| | |
| | | if( (rv = svsem_uni_wait(hashtable->mutex)) != 0) { |
| | | LoggerFactory::getLogger()->error(errno, "hashtable_remove\n"); |
| | | } |
| | | tailq_header_t *my_tailq_head = hashtable->array[code] ; |
| | | if ( my_tailq_head == NULL) |
| | | tailq_header_t *my_tailq_head = hashtable->array[code]; |
| | | if ((my_tailq_head == NULL) || (check_mm_valid(my_tailq_head) == false)) |
| | | { |
| | | hashtable->array[code] = NULL; |
| | | if((rv = svsem_post(hashtable->mutex)) != 0) { |
| | | LoggerFactory::getLogger()->error(errno, "hashtable_remove\n"); |
| | | } |
| | |
| | | TAILQ_REMOVE(my_tailq_head, item, joint); |
| | | |
| | | /* mm_free the item as we don't need it anymore. */ |
| | | mm_free(item); |
| | | if (check_mm_valid(item) == true) |
| | | mm_free(item); |
| | | |
| | | item = TAILQ_NEXT(item, joint); |
| | | if (item == NULL) { |
| | | mm_free(my_tailq_head); |
| | | hashtable->array[code] = NULL; |
| | | hashtable->queueCount--; |
| | | svsem_post(hashtable->mutex); |
| | | } |
| | | hashtable->array[code] = NULL; |
| | | hashtable->queueCount--; |
| | | mm_free(my_tailq_head); |
| | | svsem_post(hashtable->mutex); |
| | | |
| | | return; |
| | | } |
| | | |