int main(int argc, char **argv) { if (argc <= 1) { fprintf(stderr, "Usage:\n"); fprintf(stderr, "%s <options> <benchmark>\n", argv[0]); exit(1); } init_isa(); // read options including (1) actions; (2) processor configuration read_opt(argc, argv); /* liangyun: read jump table if necessary */ read_injp(argv[argc - 1]); /* liangyun: read depth table for recursive function */ read_recursive(argv[argc - 1]); path_analysis(argv[argc-1]); if (strcmp(run_opt, "CFG") == 0) run_cfg(argv[argc - 1]); else run_est(argv[argc - 1]); }
void FlagTreeItem::read_recursive(FlagTreeItem *root,const std::map<std::string,bool>& parse_map) { ChildIterator iter; std::map<std::string,bool>::const_iterator iter_show; std::map<std::string,bool>::const_iterator iter_hide; for( iter = root->m_child.begin(); iter != root->m_child.end(); ++iter) { iter_show = parse_map.find((*iter)->m_showName); iter_hide = parse_map.find((*iter)->m_hideName); if( iter_show != parse_map.end() && iter_hide != parse_map.end() ) { bool show = iter_show->second; bool hide = iter_hide->second; if(show || hide) { tristate merge_showhide; if (show) merge_showhide = tristate::true_value; if (hide) merge_showhide = tristate::false_value; (*iter)->setValue(merge_showhide); } else { (*iter)->m_state = tristate::neutral_value; read_recursive(*iter,parse_map); } } } }
std::istream& FlagTreeItem::read(std::istream &in) { std::map<std::string, bool> parse_map; create_parse_map(this,parse_map); std::string token; while(in >> token) { if( parse_map.find(token) != parse_map.end() ) { parse_map[token] = true; } else msg_error("DisplayFlags") << "FlagTreeItem: unknown token " << token; } if( in.rdstate() & std::ios_base::eofbit ) { in.clear(); } read_recursive(this,parse_map); return in; }