int binode_cache_add (uint64_t key, unsigned char *hash_key) { clock_t start, end; int ret = 0, i = 0; uint64_t val = 0; uint32_t temp_hash; LINKED *temp; bt_key_val kv,*kv1; if(count_block_inode>MAX_BINODE_COUNT) { temp=binode_list->prev; btree_delete_key(block_inode_tree,block_inode_tree->root,binode_list->prev->kv.key); binode_list->prev=temp->prev; temp->prev->next=binode_list; free(temp); // fprintf(stderr, "flushing memory cache\n"); count_block_inode--; } kv.key = key; kv.val = 0; kv.val = (uint64_t)libhashkit_murmur(hash_key,16); if(binode_list==NULL) { binode_list=malloc(sizeof(LINKED)); binode_list->prev=binode_list; binode_list->next=binode_list; temp=binode_list; } else { temp=malloc(sizeof(LINKED)); temp->prev=binode_list->prev; temp->next=binode_list; binode_list->prev=temp; binode_list=temp; } count_block_inode++; kv.pt=temp; temp->kv=kv; temp_hash = libhashkit_murmur(hash_key,16); #ifdef DEBUG_FUXEXMP fprintf(stderr, "binode_cache_add: k %llx v %llx hash %lx\n",kv.key,kv.val,temp_hash); #endif btree_insert_key(block_inode_tree, kv); return ret; }
int main(int ac,char * av[]) { int i = 0; btree * tree; bt_key_val * kv; int item = 0x43; int count = 0; int order; srandom(time(NULL)); if (ac > 1) { count = atoi(av[1]); } for(order=60;order<61;order++) { tree = btree_create(order); tree->value = value; tree->key_size = keysize; tree->data_size = datasize; for (i=0;i<count;i++) { kv = (bt_key_val*)malloc(sizeof(*kv)); kv->key = malloc(sizeof(int)); int rval = random()%1024; *(int *)kv->key = rval; kv->val = malloc(sizeof(int)); *(int *)kv->val = rval; btree_insert_key(tree,kv); } /* for (i= count - 1; i > -1; i-= (random()%5)) { item = values[i]; btree_delete_key(tree,tree->root,&item); } */ // btree_destroy(tree); } return 0; }
int memory_cache_add (unsigned char *hash_key, unsigned char *data, int size) { unsigned char *data_block = NULL; clock_t start, end; int ret = 0, i; uint64_t val = 0; unsigned char temp_md5_hash[16]; LINKED *temp; bt_key_val kv; if(count_memory_cache>MAX_MEMORY_COUNT) { temp=memory_list->prev; //while(temp->next) // temp=temp->next; btree_delete_key(memory_tree,memory_tree->root,memory_list->prev->kv.key); free(memory_list->prev->kv.val); memory_list->prev=temp->prev; temp->prev->next=memory_list; free(temp); // fprintf(stderr, "flushing memory cache\n"); count_memory_cache--; } kv.key = libhashkit_murmur(hash_key,16); kv.val = 0; start = clock (); data_block = malloc (4096); kv.val = (uint64_t)data_block; memcpy (data_block, data, size); if(memory_list==NULL) { memory_list=malloc(sizeof(LINKED)); memory_list->prev=memory_list; memory_list->next=memory_list; temp=memory_list; } else { temp=malloc(sizeof(LINKED)); temp->prev=memory_list->prev; temp->next=memory_list; memory_list->prev=temp; memory_list=temp; } count_memory_cache++; kv.pt=temp; temp->kv=kv; btree_insert_key(memory_tree,kv); exit: return ret; }