Esempio n. 1
0
struct node *search_rec(struct node *root, unsigned int key) {

    if (root == NULL) return NULL;

    if (root->key == key) return root;

    return (root->key > key) ? search_rec(root->left, key) : search_rec(root->right, key);

}
void Tree::search_rec(const Box &b, vector<int> &nums)
{
  if (recdepth == fulldepth)               // base case: at a leaf
  {
// 	cout << "C++: at leaf node ["
// 		 << recdepth << ","
// 		 << recnode->id << "]"
// 		 << endl;
    nums.push_back(recnode->id);
    return;
  }

  vector<int> children = recboxes.back().children_hit(b);

//   cout << "C++: children of node ["
// 	   << recdepth << ","
// 	   << recnode->id << "]:  "
// 	   << children << endl;

  for (int i=0; i<children.size(); i++)
  {
	if (down(children[i]))		// descend into children[i]th child
	{
	  search_rec(b,nums);
	  up();
	}
  }
}
Esempio n. 3
0
int dict_get(struct dictionary *d, unsigned int key) {
    struct node *le_node;
    unsigned int ret;
 
    le_node = search_rec(d->root, key);

    if (le_node != NULL) {
        return le_node->value; 
    } else {
        return -1;
    }
}
Esempio n. 4
0
File: main.c Progetto: barosl/b-tree
int search_rec(long node_idx, rec_t *rec) {
	int i;

	node_t node;
	node.idx = node_idx;
	load_node(&node);

	for (i=0;i<node.rec_cnt;i++) {
		int cmped = rec_cmp(&node.recs[i], rec);

		if (cmped > 0) {
			if (node.child_cnt) return search_rec(node.childs[i], rec);
			else return -1;
		} else if (cmped == 0) {
			*rec = node.recs[i];
			return 0;
		}
	}

	if (node.child_cnt) return search_rec(node.childs[node.child_cnt-1], rec);
	else return -1;
}
vector<int> Tree::search(const Box &b)
{
  //  cout << "C++: tree.search(" << b << ")" << endl;

  vector<int> nums;

  if (fulldepth==0)
  {
    if (rootbox.intersects(b))
	  nums.push_back(root->id);		// add root
  }
  else
  {
	top();
	search_rec(b,nums);
  }
  
  return nums;
}
Esempio n. 6
0
void dict_set(struct dictionary *d, unsigned int key, unsigned int value) {

    struct node *new_node;

    new_node = search_rec(d->root, key);

    if (new_node != NULL) {
        new_node->value = value;
        return;
    }

    new_node = (struct node *)malloc(sizeof(struct node));
    new_node->height = 1;
    new_node->left = new_node->right = NULL;
    new_node->key = key;
    new_node->value = value; 

    d->root = insert_rec(d->root, new_node);
    d->root = rebalance(d->root);

    set_height(d->root);

}
Esempio n. 7
0
int
proc_rule(struct htx_data *phtx_info, struct ruleinfo *prule_info,
          char *wbuf, char *rbuf, struct blk_num_typ *pblk_num)
{
  int            dlen, loop, rc;                   
  char           msg[220], path[100];
  unsigned short seed[3];

  rc = 0;
  init_seed(seed);            /* initialize seed for random number generator */
  dlen = prule_info->num_blks * BLK_SIZE;       /* initialize length of data */
                                           /*-------------------------------*/
                                           /* initialize the write buffer   */
                                           /*-------------------------------*/
  if ( (prule_info->pattern_id[0] != '#') && 
       (prule_info->pattern_id[0] != 0) ) {
	 path[0] ='\0';	  
     if ( (int) htx_strlen((char *) htx_strcpy(path, getenv("HTXPATTERNS"))) == 0 )
        htx_strcpy(path, "../pattern/");         /* default ONLY */
     htx_strcat (path, prule_info->pattern_id);
     rc = hxfpat(path, wbuf, dlen);
     if ( rc == 1 ) {
        sprintf(msg, "cannot open pattern file - %s\n", path);
        hxfmsg(phtx_info, 0, SYSERR, msg);
        return(1);
     } 
     if ( rc == 2 ) {
        sprintf(msg, "cannot read pattern file - %s\n", path);
        hxfmsg(phtx_info, 0, SYSERR, msg);
        return(1);
     } 
  } else if ( prule_info->pattern_id[0] == '#' )
     bldbuf((unsigned short*)wbuf, dlen, prule_info->pattern_id, pblk_num);
  pblk_num->in_rule = 0;      /* initialize block number within current rule */
  rc = 0;
  tape_error_code = 0;
  for ( loop = 1; loop <= prule_info->num_oper; loop++ ) {
     if ( strcmp(prule_info->oper, "R") == 0 ) {     
        rc = read_tape(phtx_info, prule_info, loop, pblk_num, rbuf);
     } else if ( strcmp(prule_info->oper, "W") == 0 ) {
        rc = write_tape(phtx_info, prule_info, loop, pblk_num, wbuf);
     } else if ( strcmp(prule_info->oper, "RC") == 0 ) {   
        rc = read_tape(phtx_info, prule_info, loop, pblk_num, rbuf);
        if ( rc >= 0 )     
           rc = cmpbuf(phtx_info, prule_info, loop, pblk_num, wbuf, rbuf);
     } else if ( strcmp(prule_info->oper, "RW") == 0 ) {
        rc = rewind_tape(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "WEOF") == 0 ) { 
        rc = weof_tape(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "SF") == 0 ) {  
        rc = search_file(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "SR") == 0 ) {  
        rc = search_rec(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "D") == 0 ) { 
        rc = diag_tape(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "E") == 0 ) { 
        rc = erase_tape(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "S") == 0 ) { 
        rc = do_sleep(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "CO") == 0 ) { 
        rc = close_open(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "C") == 0 ) { 
        rc = tclose(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "O") == 0 ) {  
        rc = topen(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "WEOT") == 0 ) {
        rc = write_eot(phtx_info, prule_info,loop, pblk_num, wbuf);
     } else if ( strcmp(prule_info->oper, "RCEOT") == 0 ) {
        rc = read_eot(phtx_info, prule_info, loop,pblk_num, wbuf, rbuf);
     } else if ( strcmp(prule_info->oper, "REOT") == 0 ) {  
        rc = read_teot(phtx_info, prule_info, loop, pblk_num, wbuf, rbuf);
     } else if ( strcmp(prule_info->oper, "RS") == 0 ) {  
        rc = prt_req_sense(phtx_info, prule_info, loop, pblk_num);
	 }
#ifndef __HTX_LINUX__		
     else if ( strcmp(prule_info->oper, "ML") == 0 ) { 
        rc = medium_load(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "MUL") == 0 ) {   
        rc = medium_unload(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "RES") == 0 ) {   
        rc = read_status(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "IE") == 0 ) {   
        rc = init_element(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "RP") == 0 ) {  
        rc = read_posit(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "LB") == 0 ) {   
        rc = loc_block(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "ASF") == 0 ) { 
        rc = asearch_file(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "ASR") == 0 ) { 
        rc = asearch_rec(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "ADUL") == 0 ) {  
        rc = write_unload(phtx_info, prule_info, loop, pblk_num, wbuf);
     } else if ( strcmp(prule_info->oper, "TWIE") == 0 ) {  
        rc = twin_tape(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "TWPE") == 0 ) {   
        rc = twps_tape(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "TWRE") == 0 ) {  
        rc = twrd_stat(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "TWMM") == 0 ) { 
        rc = twmv_tape(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "TWUL") == 0 ) {  
        rc = unload_write(phtx_info, prule_info, loop, pblk_num, wbuf);
     } else if ( strcmp(prule_info->oper, "WUL") == 0 ) {   
        rc = tape_unload(phtx_info, prule_info, loop, pblk_num, wbuf);
     } else if ( strcmp(prule_info->oper, "CDRE") == 0 ) {
        rc = cdrd_stat(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "CDMM") == 0 ) {  
        rc = cdmv_tape(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "HUNL") == 0 ) {
        rc = himove(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "HINI") == 0 ) {
        rc = hiinit(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "HREL") == 0 ) {
        rc = hielem(phtx_info, prule_info, loop, pblk_num);
     } else if ( strcmp(prule_info->oper, "HWUN") == 0 ) {
        rc = hidal_unload(phtx_info, prule_info, loop, pblk_num, wbuf);
     } else if ( strcmp(prule_info->oper, "DBUG") == 0 ) {  
       rc = set_dbug(phtx_info, prule_info, pblk_num);
     } 
#endif
	 else if ( strcmp(prule_info->oper, "XCMD") == 0 ) {
       rc = do_cmd(phtx_info, prule_info, pblk_num);
     } else {
        ;
     }
     hxfupdate(UPDATE, phtx_info);
     if ( phtx_info->run_type[0] == 'O' ) {
        info_msg(phtx_info, prule_info, loop, pblk_num, msg);
        hxfmsg(phtx_info, 0, INFO, msg);
     } 
     if ( rc != 0 )
        break;
  } 
  return(rc);
} 
Esempio n. 8
0
File: main.c Progetto: barosl/b-tree
void process() {
	int i;
	char line[100];
	char cmd, arg[100];
	bool done;
	rec_t rec;

	done = false;
	while (1) {
		printf("> ");
		fflush(stdout);

		if (!fgets(line, sizeof(line), stdin)) break;

		sscanf(line, "%c %[^\n]", &cmd, arg);

		switch (cmd) {
			FILE *fout, *fin;

			case 'i':
				snprintf(rec.name, sizeof(rec.name), "%s", arg);
				rec.x = 0;
				rec.y = 0;
				*rec.addr = '\0';

				if (insert_rec(root_idx, &rec)) {
					fprintf(stderr, "Duplicate found.\n");
				}
				break;

			case 'r':
				snprintf(rec.name, sizeof(rec.name), "%s", arg);
				remove_rec(root_idx, &rec);
				break;

			case 's':
				snprintf(rec.name, sizeof(rec.name), "%s", arg);
				if (!search_rec(root_idx, &rec)) {
					printf("Record found: ");
					rec_print(&rec);
					printf("\n");
				} else {
					fprintf(stderr, "Record not found.\n");
				}
				break;

			case 'p':
				fout = fopen("pout.txt", "w");
				print_node(fout, root_idx);
				fclose(fout);
				break;

			case 'k':
				fin = fopen("../names_200k.txt", "r");
				for (i=0;i<10000;i++) {
					if (!fgets(line, sizeof(line), fin)) break;

					if (*line) {
						char *end = line+strlen(line)-1;
						if (*end == '\n') *end = '\0';
					}

					snprintf(rec.name, sizeof(rec.name), "%s", line);
					remove_rec(root_idx, &rec);
				}
				fclose(fin);

				fout = fopen("pout.txt", "w");
				print_node(fout, root_idx);
				fclose(fout);
				break;

			case 'q':
				done = true;
				break;

			default:
				fprintf(stderr, "Invalid input.\n");
				break;
		}

		if (done) break;
	}

}