path *craStar::getPath(graphAbstraction *aMap, node *from, node *to, reservationProvider *rp) { // std::cout<<"find path from "<<*from<<"\nto "<<*to<<std::endl; std::vector<node *> fromChain; std::vector<node *> toChain; path *lastPath = 0; if (aMap->getAbstractGraph(from->getLabelL(kAbstractionLevel))->findEdge(from->getNum(), to->getNum())) return new path(from, new path(to)); setupSearch(aMap, fromChain, from, toChain, to); if (fromChain.size() == 0) return 0; // do { // // lastPath = buildNextAbstractPath(aMap, lastPath, fromChain, toChain, rp); // // lastPath = buildNextAbstractPathQuick(aMap,lastPath,fromChain,toChain,rp); // } while (lastPath->n->getLabelL(kAbstractionLevel) > 0); path* abs = buildAbstractPath(aMap, fromChain, toChain, rp); if (partialLimit > 0) { path *trav = abs; path *thisPart = new path(trav->n); for (int x = 0; x < partialLimit-1; x++) { if (trav->next) { trav = trav->next; thisPart->tail()->next = new path(trav->n); } else break; } toChain.clear(); findGoalNode(aMap,trav->n,toChain); lastPath = doRefinement(aMap, thisPart, fromChain,toChain); //delete thisPart; } else lastPath = doRefinement(aMap, abs, fromChain, toChain); // if (verbose){ // std::cout<<"before smoothing :"; // lastPath->print(); // std::cout<<std::endl; //} if (smoothing) { path* p = lastPath; lastPath = smoothPath(aMap,lastPath); delete p; } return lastPath; //return trimPath(lastPath, to); }
bool getExtractionData(const Game *g, Search &search, ExtractMap &map) { SearchMap searchMap; const int *needList = getNeedList(g); if (!needList) { fprintf(stderr, "ERROR: No entry need list available\n"); return false; } if (!setupSearch(g, needList, search, searchMap)) return false; // Process the data search Search::ResultList results; search.search(results); if (results.empty()) { fprintf(stderr, "ERROR: Couldn't find any required data\n"); return false; } ExtractMap temporaryExtractMap; for (const int *entry = needList; *entry != -1; ++entry) { typedef std::pair<SearchMap::const_iterator, SearchMap::const_iterator> KeyRange; KeyRange idRange = searchMap.equal_range(*entry); for (Search::ResultList::const_iterator i = results.begin(); i != results.end(); ++i) { for (SearchMap::const_iterator j = idRange.first; j != idRange.second; ++j) { if (j->second.hint == i->data) temporaryExtractMap.insert(ExtractMapEntry(*entry, ExtractData(j->second, i->offset))); } } } // Free up some memory results.clear(); searchMap.clear(); bool result = true; for (const int *entry = needList; *entry != -1; ++entry) { MatchList possibleMatches = filterPlatformMatches(g, temporaryExtractMap.equal_range(*entry)); if (possibleMatches.empty()) { fprintf(stderr, "ERROR: No entry found for id %d/%s\n", *entry, getIdString(*entry)); result = false; continue; } if (isLangSpecific(*entry)) { for (int i = 0; i < 3; ++i) { if (g->lang[i] == -1) continue; MatchList langMatches = filterLanguageMatches(g->lang[i], possibleMatches); MatchList::const_iterator bestMatch = filterOutBestMatch(langMatches); if (bestMatch == langMatches.end()) { // TODO: Add nice language name to output message. fprintf(stderr, "ERROR: No entry found for id %d/%s for language %d\n", *entry, getIdString(*entry), g->lang[i]); result = false; continue; } #ifdef DEBUG_EXTRACTION_TABLES if (((*bestMatch)->second.desc.platform != kPlatformUnknown && (*bestMatch)->second.desc.platform != g->platform)) printf("%s: %.8X %.8X %d %d\n", getIdString(*entry), (*bestMatch)->second.desc.hint.size, (*bestMatch)->second.desc.hint.byteSum, (*bestMatch)->second.desc.lang, (*bestMatch)->second.desc.platform); #endif map.insert(**bestMatch); } } else { MatchList::const_iterator bestMatch = filterOutBestMatch(possibleMatches); if (bestMatch == possibleMatches.end()) { fprintf(stderr, "ERROR: No entry found for id %d/%s\n", *entry, getIdString(*entry)); result = false; continue; } #ifdef DEBUG_EXTRACTION_TABLES if (((*bestMatch)->second.desc.platform != kPlatformUnknown && (*bestMatch)->second.desc.platform != g->platform)) printf("%s: %.8X %.8X %d %d\n", getIdString(*entry), (*bestMatch)->second.desc.hint.size, (*bestMatch)->second.desc.hint.byteSum, (*bestMatch)->second.desc.lang, (*bestMatch)->second.desc.platform); #endif map.insert(**bestMatch); } } return result; }
void processInput(int option) { switch (option) { //setup an entry case 1: printf_s("\n[Setting Up An Entry]...\n"); entry = MakeEntry(); break; //setup a search case 2: printf_s("\n[Setting Up A Search]...\n"); key = MakeSearchKey(); break; case 3: //que an entry printf_s("\n[Queing An Entry]...\n"); //lets see if entry is empty first if (strcmp(entry.getFirstName(), "\0") == 0) { printf_s("\nERROR: NO ENTRY DEFINED!\n\n"); break; } printf_s("\nChecking to see if entry exists using query...\n"); printf_s("%s\n", entry.getEntryAsKey()); //works if (!ABman->entryExists(entry)) { printf("\n\n[Entry not found...]\n[Adding Entry...]\n\n"); ABman->addNewEntry(entry); //works } else { printf("\n\n[Entry already exists!]\n\n"); } break; //que a search case 4: printf_s("\n[Queing A Search]...\n"); //lets see if key is empty first if (strcmp(key.getFirstName(), "\0") == 0) { printf_s("\nERROR: NO SEARCH DEFINED!\n\n"); break; } printf_s("\nChecking to see if entry exists using key...\n"); printf_s("%s\n", key.getEntryAsKey()); //works if (!ABman->entryExists(key)) { printf("\n\n[Entry not found...]\n\n"); } else { printf("\n\n[Entry found!]\n\n"); } break; //edit an entry case 5: printf_s("\n[Editing an entry]\n\n"); //lets see if key is empty first if (strcmp(key.getFirstName(), "\0") == 0) { printf_s("\nERROR: NO SEARCH DEFINED!\n\n"); break; } printf_s("\nChecking to see if entry exists using key...\n"); printf_s("%s\n", key.getEntryAsKey()); //works if (!ABman->entryExists(key)) { printf_s("\n\n[Entry not found. Cannot edit...]\n\n"); } else { printf_s("\n\n[Entry found! Beginning Editing Process]\n\n"); printf_s("first create the new entry\n"); entry = MakeEntry(); ABman->editOldEntry(key, entry); printf_s("\n\n[Finished with editing]\n\n"); } break; //Remove an entry case 6: printf_s("\n[Removing an entry]\n\n"); //lets see if key is empty first if (strcmp(key.getFirstName(), "\0") == 0) { printf_s("\nERROR: NO SEARCH DEFINED!\n\n"); break; } printf_s("\nChecking to see if entry exists using key...\n"); printf_s("%s\n", key.getEntryAsKey()); //works if (!ABman->entryExists(key)) { printf_s("\n\n[Entry not found. Cannot delete...]\n\n"); } else { //make sure i want to delete the entry printf_s("\n\n[Entry found!]\n"); printf_s("Are you sure you want to delete this entry?(y/n)\n"); printf_s("//:> "); char *c = new char[2]; scanf_s("%s", c); switch (c[0]) { case 'y': printf("[Entry Deleted!]\n\n"); ABman->removeEntry(key); break; case 'n': printf("[Entry not deleted!]\n\n"); break; default: printf("[Entry not deleted!]\n\n"); break; } delete c; } break; //Look at address book case 7: printf("\n\n[Retrieving Entries]\n\n"); setupSearch(); break; //Exit case 8: printf("\n\n[Exiting the application]\n"); break; //Just print menu default: printMenu(); break; } }