Ejemplo n.º 1
0
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);
}
Ejemplo n.º 2
0
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;
}
Ejemplo n.º 3
0
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;
	}
}