示例#1
0
static void *dmd_realloc(void *old, int size, const char *file, int line)
{
	struct dmd_memblock *mb, sb;
	void *p;

	// debug4("realloc %s:%d (%ul -> %i)", file, line,  (unsigned long) old, size);
	sb.ptr = old;
	mb = btree_get(&dmd_tree, &sb);
	if (!mb) {
		putlog(LOG_MISC, "*", "*** DMD: FAILED REALLOC %s:%d (%d). Old pointer not found. This is probably fatal!", file, line, size);
		return NULL;
	}
	p = mb->ptr;
	p = realloc(p, size);
	if (!p) {
		putlog(LOG_MISC, "*", "*** DMD: FAILED REALLOC %s:%d (%d). realloc() returned NULL", file, line, size);
//		fatal("Memory re-allocation failed", 0);
	}
	if (((unsigned long) p) != ((unsigned long) old)) {
//		debug0("newpointer");
		btree_remove(&dmd_tree, mb);
		mb = dmd_create(p, size, line, file);
		btree_add(&dmd_tree, (void *) mb);
	} else {
//		debug0("oldpointer");
		mb->size = size;
/*		p = strrchr(file, '/');
		strncpy(mb->file, p ? p + 1 : file, DMD_FILE_SIZE);
		mb->file[DMD_FILE_SIZE] = 0;
		mb->line = line;*/
	}
	return p;
}
示例#2
0
文件: pdb.c 项目: uclmediatools/rat
int
pdb_item_destroy(pdb_t *p, uint32_t id)
{
        void        *item_get;
        pdb_entry_t *item;

        if (btree_remove(p->db, id, &item_get) == FALSE) {
                debug_msg("Cannot delete item because it does not exist!\n");
                return FALSE;
        }
        item = (pdb_entry_t*)item_get;

	pdb_item_validate(item);
        assert(id == item->ssrc);

        /* clean up elements of item here ************************************/

        if (item->render_3D_data != NULL) {
                render_3D_free(&item->render_3D_data);
        }

        if (item->enc_fmt != NULL) {
                xfree(item->enc_fmt);
                item->enc_fmt = NULL;
        }

        /*********************************************************************/

        debug_msg("Removing persistent database entry for SSRC 0x%08lx\n",
                  item->ssrc);
        xfree(item);
        p->nelem--;
        return TRUE;
}
示例#3
0
int
main()
{
    btree_t *b;
    uint32_t i, *x;
    uint32_t v[] = {15, 5, 16, 3, 12, 20, 10, 13, 18, 23, 6, 7};
    uint32_t nv = sizeof(v) / sizeof(v[0]);

    btree_create(&b);

    for(i = 0; i < nv; i++) {
        x = (uint32_t*)xmalloc(sizeof(uint32_t));
        *x = (uint32_t)random();
        if (btree_add(b, v[i], (void*)x) != TRUE) {
            printf("Fail Add %lu %lu\n", v[i], *x);
        }
    }

    printf("depth %d\n", btree_depth(b->root));
    btree_dump(b);

    sleep(3);
    btree_remove(b, 5, (void*)&x);
    btree_dump(b);
    sleep(3);
    btree_remove(b, 16, (void*)&x);
    btree_dump(b);
    sleep(3);
    btree_remove(b, 13, (void*)&x);
    btree_dump(b);

    while (btree_get_root_key(b, &i)) {
        if (btree_remove(b, i, (void*)&x) == FALSE) {
            fprintf(stderr, "Failed to remove %lu\n", i);
        }
        btree_dump(b);
        sleep(1);
    }

    if (btree_destroy(&b) == FALSE) {
        printf("Failed to destroy \n");
    }

    return 0;
}
示例#4
0
文件: btree.c 项目: KarjamP/radare2
R_API int btree_del(struct btree_node *proot, void *x, BTREE_CMP(cmp), BTREE_DEL(del)) {
    struct btree_node *p = btree_search (proot, x, cmp, 1);
    if (p) {
        // p->right =
        btree_remove (p->left, del);
        return R_TRUE;
    }
    return R_FALSE;
}
示例#5
0
文件: btree.c 项目: montekki/radare2
R_API bool btree_del(struct btree_node *proot, void *x, BTREE_CMP(cmp), BTREE_DEL(del)) {
	struct btree_node *p = btree_search (proot, x, cmp, 1);
	if (p) {
		// p->right = 
		btree_remove (p->left, del);
		p->left = NULL;
		return true;
	}
	return false;
}
示例#6
0
文件: btree.c 项目: cj19881112/btree
TEST(BTree, Remove)
{
	struct btree_s tree;
	btree_init(&tree, 3);
	int i;

	for (i = 0; i < 10; i++) {
		btree_insert(&tree, i);
	}

	btree_dump(&tree);

	btree_remove(&tree, 5);
	btree_dump(&tree);

	btree_remove(&tree, 9);
	btree_dump(&tree);

	btree_remove(&tree, 8);
	btree_dump(&tree);

	btree_destroy(&tree);
}
示例#7
0
static void dmd_free(void *p, const char *file, int line)
{
	struct dmd_memblock *mb, sb;

//	debug2("free %s:%d", file, line);
	sb.ptr = p;
	mb = btree_get(&dmd_tree, &sb);
	if (!mb) {
		putlog(LOG_MISC, "*", "*** DMD: ATTEMPTING TO FREE NON-MALLOC'D PTR: %s:%d",
				file, line);
		return;
	}
	btree_remove(&dmd_tree, mb);
	free(p);
}
示例#8
0
文件: btree.c 项目: cj19881112/btree
TEST(BTree, RemoveALot)
{
	struct btree_s tree;
	btree_init(&tree, 3);
	int i;

	for (i = 0; i < 1000000; i++) {
		btree_insert(&tree, i);
	}

	for (i = 10; i < 999992; i++) {
		btree_remove(&tree, i);
	}

	btree_dump(&tree);

	btree_destroy(&tree);
}
示例#9
0
int main(int argc, char **argv)
{
  BTree *tree = btree_create(int_compare);
  int n = atoi(argv[1]);
  int a[n];
  //int a[] = {1, 3, 2, 5, -1, 19, 15, 45, 9, 6, -4};
  n = sizeof(a) / sizeof(a[0]);
  //n = 3;
  for (int i = 0; i < n; ++i) {
    //a[i] = i + 1;
    a[i] = rand() % 1000;
    btree_insert(tree, (void*)&a[i]);
  }
  for (int i = 0; i < n / 2; ++i) {
    btree_remove(btree_find(tree, &a[i]));
  }
  int expected_height = 2 * ceil(log(n + 1) / log(2)) + 1;
  btree_dump_dot(tree, node_attrs);
  btree_destroy(tree);
}
示例#10
0
文件: btree.c 项目: cj19881112/btree
TEST(BTree, RemoveALot1)
{
	struct btree_s tree;
	btree_init(&tree, 3);
	int i;

	srand(time(0));

	for (i = 0; i < 100000; i++) {
		btree_insert(&tree, i);
	}

	btree_check(tree.root);

	for (i = 0; i < 99992; i += (rand() % 3 + 1) ) {
		btree_remove(&tree, i);
	}

	btree_destroy(&tree);
}
示例#11
0
int main(void) {
	btree_t bt;
	btree_node_t *n;
	char datatbl[] = {'a', 'b', 'd', 'd', 'a'};

	btree_create(&bt);
	btree_insert(&bt, btree_node_create(&datatbl[0]));
	btree_insert(&bt, btree_node_create(&datatbl[1]));
	btree_insert(&bt, btree_node_create(&datatbl[2]));
	
	n = btree_node_create(&datatbl[3]);
	btree_insert(&bt, n);
	btree_remove(&bt, n, false);
	btree_node_release(n);

	btree_insert(&bt, btree_node_create(&datatbl[4]));
	btree_release(&bt);

	printf("Last Error: %s (%d)\r\n", 
		libnet_str_error(libnet_error_get()), libnet_error_get());
	return 0;
}
示例#12
0
int main(int argc, char ** argv)
{
    int i;
    
    // do we have verbose output?
    bool ga_testing = false;
    
    if (argc > 1)
    {
        for (i = 1; i < argc; ++i)
        {
            if (!strcmp(argv[1],"-ga"))
            {
                ga_testing = true;
                break;
            }
        }
    }
    
    // initialize
    btree * tree = create_btree(16);
    
    bool flags[MAX_KEY];
    
    for (i = 0; i < MAX_KEY; ++i)
        flags[i] = false;
    
    // get starting time    
    struct timespec start, stop;
    clock_gettime(CLOCK_REALTIME,&start);

    // what we're timing
    for (int n = 0; n < TEST_SIZE; ++n)
    {
        // pick a key
        btree_key_t key = random_key(MAX_KEY);
        
        // is the key in the tree?
        btree_data_t data = btree_find(tree,key);
        
        if (data == NULL_DATA)
        {
            btree_insert(tree,key,(btree_data_t)key);
            flags[key] = true;
        }
        else
        {
            btree_remove(tree,key);
            flags[key] = false;
        }
    }
    
    // calculate run time
    clock_gettime(CLOCK_REALTIME,&stop);        
    double run_time = (stop.tv_sec - start.tv_sec) + (double)(stop.tv_nsec - start.tv_nsec) / 1000000000.0;
    
#if defined(VERIFY)
    // verify
    for (btree_key_t k = 0; k < MAX_KEY; ++k)
    {
        if (NULL_DATA == btree_find(tree,k))
        {
            if (flags[k])
                fprintf(stderr,"VERIFICATION ERROR: %l found, and shouldn't have been\n",k);
        }
        else
        {
            if (!flags[k])
                fprintf(stderr,"VERIFICATION ERROR: %l not found, and should have been\n",k);
        }
    }
#endif
    
    // clean up
    free_btree(tree);

    // report runtime
    if (ga_testing)
        fprintf(stdout,"%f",run_time);
    else        
        fprintf(stdout,"\ntreebench (Std. C) run time: %f\n\n",run_time);
    
    fflush(stdout);
    
    // done
    return 0;
}
示例#13
0
文件: main.c 项目: falcaopetri/B-Tree
int running_screen() {
	int n_items = 5;
	// Itens no menu
	char list[5][15] = { "Inserir", "Pesquisar", "Remover", "Imprimir DFS", "Voltar" };
	int opt;

	print_header();

	int i;
	for (i = 0; i < n_items; ++i) {
		printf(" %d) %s\n", i+1, list[i]);
	}

	printf("\n");
	printf(" Digite uma opção: ");
	scanf("%d%*c", &opt);

	int key;
	node_position pos;
	switch (opt) {
	case 1:                 // Inserir
		if (n_keys == max_keys) {
			snprintf(msg, MSG_LEN, " O máximo de chaves adicionáveis para essa demo é %d.", max_keys);
		}
		else {
			printf(" Digite uma CHAVE que será associada ao VALOR \'%s\': ", values[n_keys]);
			scanf("%d", &key);
			pos = btree_insert(tree, key, values[n_keys]);
			if (pos.node == NULL) {
				snprintf(msg, MSG_LEN, " Inserção falhou. A CHAVE %d já existe na B-Tree.", key);
			}
			else {
				snprintf(msg, MSG_LEN, " Inserção da CHAVE %d associada ao VALOR \'%s\' realizada com sucesso.",
				         key, values[n_keys]);
				n_keys++;
			}
		}
		break;
	case 2:                 // Pesquisar
		printf(" Digite uma CHAVE para pesquisar: ");
		scanf("%d", &key);
		pos = btree_find(tree, key);
		if (pos.node == NULL) {
			snprintf(msg, MSG_LEN, " A CHAVE %d não foi encontrada na B-Tree.", key);
		}
		else {
			snprintf(msg, MSG_LEN, " A CHAVE %d foi encontrada associada ao VALOR \'%s\'.",
			         key, (char*) pos.node->keys[pos.index]->value);
		}

		break;
	case 3:                 // Remover
		printf(" Digite uma CHAVE para remover: ");
		scanf("%d", &key);
		pos = btree_remove(tree, key);
		if (pos.node == NULL) {
			snprintf(msg, MSG_LEN, " A CHAVE %d não foi encontrada na B-Tree.", key);
		}
		else {
			snprintf(msg, MSG_LEN, " A CHAVE %d foi removida com sucesso.", key);
		}
		break;
	case 4:                 // Imprimir
		printf(" Executando uma DFS na B-Tree:\n");
		btree_dfs(tree);
		printf(" Pressione ENTER para continuar. ");
		getchar();
		break;
	case 5:                 // Voltar/Sair
		snprintf(msg, MSG_LEN, " Deletando B-Tree e voltando ao menu");
		goodbye();
		// Única deleção de uma B-Tree
		btree_delete_h(tree);
		return HOME;
		break;
	default:
		snprintf(msg, MSG_LEN, " Opção inválida");
		return RUNNING;
		break;
	}

	return RUNNING;
}
示例#14
0
文件: hash_table.c 项目: high/prideng
/* Removes the entry from the table */
void
h_table_remove( h_table_t *table, char *key )
{
	btree_remove( table->tree, key );
}