Esempio n. 1
0
int main(void)
{
	btree_tree *tmp;
	uint32_t data_idx;

	tmp = btree_create("test.mmap", 3, 400, 1024);
	if (!tmp) {
		printf("Couldn't create tree from disk image.\n");
		exit(1);
	}

	setup(tmp);
	btree_insert(tmp, 'd', &data_idx);
	btree_insert(tmp, 'f', &data_idx);
	btree_insert(tmp, 'v', &data_idx);

	btree_delete(tmp, 'i');
	btree_delete(tmp, 'f');
	btree_delete(tmp, 'e');
	btree_delete(tmp, 'y');
	btree_delete(tmp, 't');
	btree_dump_dot(tmp);


	btree_free(tmp);

	return 0;
}
/*!-----------------------------------------------------------------------

    i n s e r t M e m o r y C h u n k

    @brief Insert a chunk of memory into both indices.

    This function will insert a chunk of memory into both indices.

    @param[in] - The header of the memory chunk to insert

    @return  0 = Success
            ~0 = Failure (errno value)

------------------------------------------------------------------------*/
static int insertMemoryChunk ( memoryChunk_t* chunk )
{
    int status = 0;

    //
    //  Go insert the given memory chunk into the bySize index.
    //
    status = btree_insert ( &sysControl->availableMemoryBySize, chunk );
    if ( status != 0 )
    {
        printf ( "Error: Could not insert memory chunk by size at offset %lx "
                 "- Aborting\n", chunk->offset );
        return status;
    }
    //
    //  Go insert the given memory chunk into the byOffset index.
    //
    status = btree_insert ( &sysControl->availableMemoryByOffset, chunk );
    if ( status != 0 )
    {
        printf ( "Error: Could not insert memory chunk by offset at %lx - "
                 "Aborting\n", chunk->offset );
    }
    return status;
}
int main(void)
{
	btree_tree *tmp;
	int error = 0;

	tmp = btree_create("test.mmap", 3, 400, 1024, &error);
	if (!tmp) {
		printf("Couldn't create tree from disk image error %d.\n", error);
		exit(1);
	}

	setup(tmp);
	btree_insert(tmp, 'd');
	btree_insert(tmp, 'f');
	btree_insert(tmp, 'v');

	btree_delete(tmp, 'i');
	btree_delete(tmp, 'f');
	btree_delete(tmp, 'e');
	btree_delete(tmp, 'y');
	btree_delete(tmp, 't');
	btree_dump_dot(tmp);

	btree_close(tmp);

	return 0;
}
Esempio n. 4
0
File: btree.c Progetto: 111X/radare
R_API void btree_insert(struct btree_node **T, struct btree_node *p, BTREE_CMP(cmp))
{
	int ret = cmp (p->data, (*T)->data);
	if (ret<0) {
		if ((*T)->left) btree_insert (&(*T)->left, p, cmp);
		else (*T)->left = p;
	} else if (ret>0) {
		if ((*T)->right) btree_insert (&(*T)->right, p, cmp);
		else (*T)->right = p; } }
Esempio n. 5
0
int main()
{
    int arr[] = {18, 31, 12, 10, 15, 48, 45, 47, 50, 52, 23, 30, 20};
//    int arr[] = {18, 31, 12, 10};

    btree_node *root = btree_create();

    for(int i = 0; i < sizeof(arr) / sizeof(int); i++)
    {
        root = btree_insert(root, arr[i]);
        btree_level_display(root);
        btree_linear_print(root);
    }

    //int todel[] = {15, 18, 23, 30, 31, 52, 50};
    int todel[] = {45, 30, 12, 10};
    for(int i = 0; i < sizeof(todel) / sizeof(int); i++)
    {
        printf("after delete %d\n", todel[i]);
        root = btree_delete(root, todel[i]);
        btree_level_display(root);
        btree_linear_print(root);
    }

    return 0;
}
Esempio n. 6
0
void db_write_test()
{
	uint8_t key[KEYSIZE];
	int v_len=strlen(val);
	start_timer();
	int i;
	for (i = 0; i < NUM; ++i)
	{
		memset(key,0,sizeof(key));
		sprintf((char *) key, "%dkey", i);
		btree_insert(&btree, key, val, v_len);
		if((i%10000)==0)
		{
			fprintf(stderr,"finished %d ops%30s\r",i,"");
			fflush(stderr);
		}
	}
	printf(LINE);
	double cost=get_timer();
	printf("|write		(succ:%ld): %.6f sec/op; %.1f writes/sec(estimated); %.1f MB/sec; cost:%.6f(sec)\n"
		,NUM
		,(double)(cost/NUM)
		,(double)(NUM/cost)
		,(_file_size/cost)
		,(double)cost);		
}
Esempio n. 7
0
int vfs_mount(struct vnode *node, int fsnum, u32 dev, u32 flags)
{
    ASSERT(V_ISDIR(node->v_flags));
    ASSERT(fstypes[fsnum].vfs_ops);
    ASSERT(node->v_count == 1);

    struct vfs *new_vfs = create_empty_vfs(fsnum);
    struct vnode *new_root = create_empty_vnode(new_vfs);

    new_vfs->vfs_flags = flags;
    new_vfs->vfs_dev = dev;
    new_vfs->v_root = new_root;

    new_root->v_name[0] = '/';
    new_root->v_flags = V_DIR;

    int ret = fstypes[fsnum].vfs_ops->vfs_mount(new_vfs);

    if (!ret)
    {
        btree_insert(node->v_vfs->vfs_mounts, (void*) node->v_inode, new_vfs);
        vget(new_root);
    }

    return ret;
}
int main(void)
{
	btree_tree *tmp;
	uint32_t data_idx;
	size_t size;
	time_t ts;
	char *data;
	int i;
	char testdata[11];

	// testing too large data
	tmp = btree_create("test.mmap", 102, 204, 10);
	if (!tmp) {
		printf("Couldn't create tree from disk image.\n");
		exit(1);
	}
	for (i = 0; i < 205; i++) {
		if (btree_insert(tmp, i * 3, &data_idx)) {
			sprintf(testdata, "H: %07d", i);
			btree_set_data(tmp, data_idx, testdata, 10, time(NULL));
			data = (char*) btree_get_data(tmp, data_idx, &size, &ts);
			printf("%s %zd\n", data, size);
		}
	}

	btree_dump(tmp);
	btree_free(tmp);

	return 0;
}
Esempio n. 9
0
int main(int argc, char *argv[])
{
	btree_tree *tmp;
	FILE *f;
	char urlBuffer[2048], *data;
	uint64_t id;
	uint64_t i = 0;
	uint32_t data_idx;

	tmp = btree_create("test.mmap", 128, 700000, 2048);
	if (!tmp) {
		printf("Couldn't create tree from disk image.\n");
		exit(1);
	}

	f = fopen(argv[1], "r");
	while (!feof(f)) {
		fgets(urlBuffer, 2048, f);
		data = strchr(urlBuffer, ' ');
		if (data) {
			data++;
			data[-1] = '\0';
			id = atoll(urlBuffer);
			if (btree_insert(tmp, id, &data_idx) == 1) {
				btree_set_data(tmp, data_idx, data, strlen(data), time(NULL));
			}
		}
		i++;
	}

	btree_free(tmp);

	return 0;
}
Esempio n. 10
0
/**
* @brief test case for random number insert, search and delete.
*/
void testcase_for_random() {
	TREE* T = btree_create();
	int i = 0, n = 100;
	int _t = 0;
	srand(time(NULL));
	for (i = 0; i < n; i ++) {
		_t = rand() % n;
		printf("btree_insert(T, %d) = %d\n", _t, btree_insert(T, _t));
	}
	for (i = 0; i < n; i ++) {
		_t = rand() % n;
		printf("btree_search(T, %d) = %d\n", _t, btree_search(T, _t));
	}

	printf("btree_traveral: ");
	btree_traveral(T, printout_node);
	printf("\n");

	for (i = 0; i < n; i ++) {
		_t = rand() % n;
		printf("btree_delete(T, %d) = %d\n", _t, btree_delete(T, _t));
	}

	printf("btree_traveral: ");
	btree_traveral(T, printout_node);
	printf("\n");

	btree_destory(T);
}
void smbtree_import(BTree* tree, char* url)
{
  FILE* file = fopen(url, "r");

  char* word_to_insert = calloc(STRING_SIZE, sizeof(char));
  while (fscanf(file, "%s", word_to_insert) != EOF)
  {
    char* word = calloc(STRING_SIZE, sizeof(char));
    strcpy(word, word_to_insert);
    Vector* vec = vector_newVector();
    int i, n_docs = 0;
    fscanf(file, "%d", &n_docs);
    for (i = 0; i < n_docs; i++)
    {
      char* doc_url = calloc(STRING_SIZE, sizeof(char));
      int n_pos = 0, j;
      fscanf(file, "%s%d", doc_url, &n_pos);
      VectorNode* vec_node = vector_newVectorNode(doc_url);
      for (j = 0; j < n_pos; j++)
      {
        int pos = 0;
        fscanf(file, "%d", &pos);
        addPositionVectorNode(vec_node, pos);
      }
      vector_push(vec, vec_node);
      //Check possible bugs
      free(doc_url);
    }
    BTreeKey* key = btree_newBTreeKey(word, vec);
    btree_insert(tree, tree->root, key);
  }
  free(word_to_insert);
  fclose(file);
}
int main(void)
{
	btree_tree *tmp;
	uint32_t data_idx;
	size_t *size;
	time_t *ts;
	char *data;
	int i, tmp_key;
	char testdata[11];
	int error = 0;

	/* testing too large data */
	tmp = btree_create("test.mmap", 3, 6, 10, &error);
	if (!tmp) {
		printf("Couldn't create tree from disk image, errno %d.\n", error);
		exit(1);
	}

	for (i = 0; i < 205; i++) {
		tmp_key = i * 3;
		if (0 == btree_insert(tmp, tmp_key)) {
			sprintf(testdata, "H: %07d", i);
			btree_set_data(tmp, tmp_key, testdata, 10, time(NULL));
			btree_get_data(tmp, tmp_key, &data_idx, (void **)&data, &size, &ts);
			printf("%s %zd\n", data, *size);
			btree_data_unlock(tmp, data_idx);
		}
	}

	btree_dump(tmp);
	btree_close(tmp);

	return 0;
}
Esempio n. 13
0
R_API void btree_add(struct btree_node **T, void *e, BTREE_CMP(cmp)) {
    struct btree_node *p = (struct btree_node*)
                           malloc(sizeof(struct btree_node));
    p->data = e;
    p->hits = 0;
    p->left = p->right = NULL;
    if (*T==NULL) *T = p;
    else btree_insert (T, p, cmp);
}
Esempio n. 14
0
void
reset_bmaps(xfs_mount_t *mp)
{
	xfs_agnumber_t	agno;
	xfs_agblock_t	ag_size;
	int		ag_hdr_block;

	ag_hdr_block = howmany(4 * mp->m_sb.sb_sectsize, mp->m_sb.sb_blocksize);
	ag_size = mp->m_sb.sb_agblocks;

	for (agno = 0; agno < mp->m_sb.sb_agcount; agno++) {
		if (agno == mp->m_sb.sb_agcount - 1)
			ag_size = (xfs_extlen_t)(mp->m_sb.sb_dblocks -
				   (xfs_drfsbno_t)mp->m_sb.sb_agblocks * agno);
#ifdef BTREE_STATS
		if (btree_find(ag_bmap[agno], 0, NULL)) {
			printf("ag_bmap[%d] btree stats:\n", i);
			btree_print_stats(ag_bmap[agno], stdout);
		}
#endif
		/*
		 * We always insert an item for the first block having a
		 * given state.  So the code below means:
		 *
		 *	block 0..ag_hdr_block-1:	XR_E_INUSE_FS
		 *	ag_hdr_block..ag_size:		XR_E_UNKNOWN
		 *	ag_size...			XR_E_BAD_STATE
		 */
		btree_clear(ag_bmap[agno]);
		btree_insert(ag_bmap[agno], 0, &states[XR_E_INUSE_FS]);
		btree_insert(ag_bmap[agno],
				ag_hdr_block, &states[XR_E_UNKNOWN]);
		btree_insert(ag_bmap[agno], ag_size, &states[XR_E_BAD_STATE]);
	}

	if (mp->m_sb.sb_logstart != 0) {
		set_bmap_ext(XFS_FSB_TO_AGNO(mp, mp->m_sb.sb_logstart),
			     XFS_FSB_TO_AGBNO(mp, mp->m_sb.sb_logstart),
			     mp->m_sb.sb_logblocks, XR_E_INUSE_FS);
	}

	reset_rt_bmap();
}
Esempio n. 15
0
Btree btree_insert(String key, String val, Btree t)
{
  Btree a = (struct tnode *)malloc(sizeof(struct tnode));
  String b = (char *)malloc(50);
  String c = (char *)malloc(50);
  strcpy(b, key);
  strcpy(c, val);
  a->key = b;
  a->value = c;
  a->left = btree_empty();
  a->right = btree_empty();
  if (btree_isempty(t) == 4){
    return a;
  }
  else if (strcmp(key, t->key) < 0){
    if (btree_isempty(t->left)){
       t->left = a;
     return t;
      }
      else{
       t->left = btree_insert(key, val, t->left);
       free(a);
       return t;
      }
    }
    else if (strcmp(key, t->key) > 0){
      if (btree_isempty(t->right)){
	  t->right = a;
	  return t;
      }
      else{
	  t->right = btree_insert(key, val, t->right);
	  free(a);
	  return t;
      }
      }
      else{
	t->key = key;
	t->value = val;
	free(a);
	return t;
      }
}
Esempio n. 16
0
void 
h_table_insert( h_table_t *table, char *key, void *data )
{
	/* Move the pointer to a new position */
	table->curr++;
	
	/* Store the data */
	table->data_arr[ table->curr ] = data;
	
	table->tree = btree_insert( table->tree, key, table->curr );
}
Esempio n. 17
0
/** Enable piece of physical memory for mapping by physmem_map().
 *
 * @param parea Pointer to physical area structure.
 *
 */
void ddi_parea_register(parea_t *parea)
{
	mutex_lock(&parea_lock);
	
	/*
	 * We don't check for overlaps here as the kernel is pretty sane.
	 */
	btree_insert(&parea_btree, (btree_key_t) parea->pbase, parea, NULL);
	
	mutex_unlock(&parea_lock);
}
static uint32_t insert_item(btree_tree *tmp, uint64_t index) {
    uint32_t data_idx;
    size_t *size;
    time_t *time;
    void *data;

    btree_insert(tmp, index);
    btree_get_data(tmp, index, &data_idx, &data, &size, &time);
    printf("%u\n", data_idx);
    btree_data_unlock(tmp, data_idx);
    return data_idx;
}
BTree *array_to_btree(char **array)
  {
    BTree *tree;
    int i;
    tree = NULL;

    for(i = 0; array[i] != '\0'; i++)
    {

      btree_insert(&tree, array[i]);
    }
    return (tree);
  }
Esempio n. 20
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;
}
BTree *array_to_btree(char **array)
{
	BTree *tree;
	int i;

	tree = NULL;
	while (array[i])
	{
		btree_insert(&tree, array[i]);
		i++;
	}
	return (tree);
}
Esempio n. 22
0
/**
 * btree_inc_data
 * @access public
 * @param btree struct
 * @param key
 * @return int 0 on success or error value
 *
 * Increments the data at key
 */
BTREE_API int btree_inc_data(btree_tree *t, uint64_t key)
{
	void *location;
	int error;
	uint32_t idx;
	uint64_t value;
	size_t data_size = sizeof(uint64_t);

	/* already exists? */
	if (1 == btree_search_internal(t, t->root, key, &idx)) {
		error = btree_data_lockw(t, idx);
		if (error != 0) {
			return error;
		}
		location = btree_get_data_location(t, idx);
		value = *(uint64_t *) (location + sizeof(size_t) + sizeof(time_t));
		value++;
	} else {
	/* doesn't exist, create */
		error = btree_insert(t, key);
		if (error != 0) {
			return error;
		}
		if (1 == btree_search_internal(t, t->root, key, &idx)) {
			error = btree_data_lockw(t, idx);
			if (error != 0) {
				return error;
			}
		} else {
			return 404; /* Node not found */
		}
		error = btree_data_lockw(t, idx);
		if (error != 0) {
			return error;
		}
		location = btree_get_data_location(t, idx);
		value = *(uint64_t *) (location + sizeof(size_t) + sizeof(time_t));
		value = 1;
	}

	*((size_t*)location) = data_size;
	*(time_t*) (location + sizeof(size_t)) = time(NULL);
	*(uint64_t *) (location + sizeof(size_t) + sizeof(time_t)) = value;

	error = btree_data_unlock(t, idx);
	if (error != 0) {
		return error;
	}
	return 0;
}
Esempio n. 23
0
TEST(BTree, Insert)
{
	struct btree_s tree;
	btree_init(&tree, 3);
	int i;

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

	btree_dump(&tree);

	btree_destroy(&tree);
}
void updateTree(BTree* tree, char* word, int pos, char* urlDoc)
{
  BTreeKey* existingKey = btree_search(tree->root, word);
  if (existingKey)
  {
    addPositionVector(existingKey->mInfo, urlDoc, pos);
    free(word);
  } else {
    Vector* bkey_info = vector_newVector();
    addPositionVector(bkey_info, urlDoc, pos);
    BTreeKey* bkey = btree_newBTreeKey(word, bkey_info);
    btree_insert(tree, tree->root, bkey);
  }
}
/**
 * btree_insert - Inserts a new leaf in a binary tree. Makes a recursive call
 * function based on value.
 *
 * @tree: Pointer to the binary tree in which to insert a new node
 * @data: Pointer to string which will be the key value of the node.
 *
 * Description:  Inserts a leaf into a tree, given a pointer to a pointer to
 * a leaf of the tree.  If the first pointer points to NULL, the tree is empty
 * and a memory space for a new leaf is allocated. The new leaf's key value is
 * populated and it's left and right pointers are set to NULL. If the tree is
 * not empty, the key value received as argument is compared to the key value
 * of the node and btree_insert is run recursively on on the left or right
 * pointer of the node for less than, or greater than, respectively.
 */
int btree_insert(BTree **tree, char *data)
{
	if (*tree == NULL)
	{
		*tree = (struct BTree *)malloc(sizeof(struct BTree));
		if (tree == NULL)
			return 1;
		(*tree)->str = strdup(data);
		if ((*tree)->str == NULL)
			return 1;
		(*tree)->left = NULL;
		(*tree)->right = NULL;
	}
	else if ((strcmp(data, (*tree)->str)) < 0)
	{
		btree_insert(&(*tree)->left, data);
	}
	else if ((strcmp(data, (*tree)->str)) > 0)
	{
		btree_insert(&(*tree)->right, data);
	}
	return 0;
}
/**
 * btree_insert - Inserts node in a binary tree
 * @tree: pointer to structure
 * @data: points to array of elements
 */
int btree_insert(BTree **tree, char *data)
{
	if (*tree == NULL)
	{
		*tree = (BTree *) malloc(sizeof(BTree));
		if (tree == NULL)
		{
			return (1);
		}
		(*tree)->str = strdup(data);
		(*tree)->left = NULL;
		(*tree)->right = NULL;
		return (0);
	}
	else if (strcmp(data, (*tree)->str) > 0)
	{
		btree_insert(&(*tree)->left, data);
	}
	else if (strcmp(data, (*tree)->str) <= 0)
	{
		btree_insert(&(*tree)->right, data);
	}
	return (0);
}
Esempio n. 27
0
int
add_dup_extent(
	xfs_agnumber_t		agno,
	xfs_agblock_t		startblock,
	xfs_extlen_t		blockcount)
{
	int	ret;
#ifdef XR_DUP_TRACE
	fprintf(stderr, "Adding dup extent - %d/%d %d\n", agno, startblock,
		blockcount);
#endif
	pthread_mutex_lock(&dup_extent_tree_locks[agno]);
	ret = btree_insert(dup_extent_trees[agno], startblock,
				(void *)(uintptr_t)(startblock + blockcount));
	pthread_mutex_unlock(&dup_extent_tree_locks[agno]);
	return ret;
}
Esempio n. 28
0
/**
* @brief test case for single insert, search and delete method.
*/
void testcase_for_single() {
	TREE* T = btree_create();

	printf("btree_insert(T, 32) = %d\n", btree_insert(T, 32));

	printf("btree_search(T, 32) = %d\n", btree_search(T, 32));

	printf("btree_delete(T, 32) = %d\n", btree_delete(T, 32));

	printf("btree_search(T, 32) = %d\n", btree_search(T, 32));

	printf("btree_traveral: ");
	btree_traveral(T, printout_node);
	printf("\n");

	btree_destory(T);
}
Esempio n. 29
0
static BI_DATA *
find_elapsed(const char *txt)
{
    BI_DATA *result = 0;
    char temp[80];
    char *s = strchr(mktrimmed(strcpy(temp, txt)), L_PAREN);
    if (s != 0)
	*s = EOS;
    if (*temp != EOS) {
	if ((result = btree_search(&elapsed_tree, temp)) == 0) {
	    BI_DATA data;
	    memset(&data, 0, sizeof(data));
	    data.bi_key = temp;
	    result = btree_insert(&elapsed_tree, &data);
	}
    }
    return result;
}
Esempio n. 30
0
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);
}