void SympleksToGraphConvereter::generateFacesAndConnect(list<int> & sympleks){ if(sympleks.size() == 1) return; int cnumber = sympleksMap[sympleks]; for(list<int>::iterator it = sympleks.begin() ; it!=sympleks.end() ; ++it){ list<int> templist(sympleks); templist.remove(*it); int tag = addSympleks(templist); if( edge.size() <= cnumber) edge.resize(cnumber + 1); edge[cnumber].push_back(tag); ++E; } }
void driver_enumerator::find_approximate_matches(const char *string, int count, int *results) { #undef rand // if no name, pick random entries if (string == NULL || string[0] == 0) { // seed the RNG first srand(osd_ticks()); // allocate a temporary list dynamic_array<int> templist(m_filtered_count); int arrayindex = 0; for (int index = 0; index < s_driver_count; index++) if (m_included[index]) templist[arrayindex++] = index; assert(arrayindex == m_filtered_count); // shuffle for (int shufnum = 0; shufnum < 4 * s_driver_count; shufnum++) { int item1 = rand() % m_filtered_count; int item2 = rand() % m_filtered_count; int temp = templist[item1]; templist[item1] = templist[item2]; templist[item2] = temp; } // copy out the first few entries for (int matchnum = 0; matchnum < count; matchnum++) results[matchnum] = templist[matchnum % m_filtered_count]; return; } // allocate memory to track the penalty value dynamic_array<int> penalty(count); // initialize everyone's states for (int matchnum = 0; matchnum < count; matchnum++) { penalty[matchnum] = 9999; results[matchnum] = -1; } // scan the entire drivers array for (int index = 0; index < s_driver_count; index++) if (m_included[index]) { // skip things that can't run if ((s_drivers_sorted[index]->flags & GAME_NO_STANDALONE) != 0) continue; // pick the best match between driver name and description int curpenalty = penalty_compare(string, s_drivers_sorted[index]->description); int tmp = penalty_compare(string, s_drivers_sorted[index]->name); curpenalty = MIN(curpenalty, tmp); // insert into the sorted table of matches for (int matchnum = count - 1; matchnum >= 0; matchnum--) { // stop if we're worse than the current entry if (curpenalty >= penalty[matchnum]) break; // as long as this isn't the last entry, bump this one down if (matchnum < count - 1) { penalty[matchnum + 1] = penalty[matchnum]; results[matchnum + 1] = results[matchnum]; } results[matchnum] = index; penalty[matchnum] = curpenalty; } } }