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(); } } }
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; } }
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; }
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); }
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); }
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; } }