inline void insertInOrder(list<T>& currDist, list<int>& currList, const int j, const T distIJ, const int maxNeighbors) { typename list<T>::iterator it; typename list<int>::iterator it2; it2 = currList.begin(); T currMax = currDist.back(); if (distIJ > currMax) return; for (it=currDist.begin(); it!=currDist.end(); it++) { if (distIJ < (*it)) { // Insert into appropriate place in list currDist.insert(it,distIJ); currList.insert(it2, j); // Trim end of list currList.resize(maxNeighbors); currDist.resize(maxNeighbors); return; } it2++; } }
void destroy() { spaces.resize(0); spacesDeleteList.resize(0); plans.resize(0); plansDeleteList.resize(0); }
void TransportApp::setup() { airports = pointLoader.loadAirports( "airports.xml" ); map<int, Airport>::iterator ai = airports_map.begin(); for ( list<Airport>::iterator it = airports.begin(); it != airports.end(); ++it ) { airports_map.insert(ai, pair<int, Airport>( it->getId(), *it ) ); } routes_map = pointLoader.loadRoutes( "routes.xml" ); map<int, Airport>::iterator from, to; map<int, list<int> >::iterator f1, f2; for ( list< pair<int, int> >::iterator ri = routes_map.begin(); ri != routes_map.end(); ++ri ) { from = airports_map.find( ri->first ); to = airports_map.find( ri->second ); if ( from == airports_map.end() || to == airports_map.end()) { continue; } from->second.pushFrom( 1 ); to->second.pushTo( 1 ); routes.push_back( Route( from->second, to->second ) ); // f1 = airport_routes.find( ri->first ); // if ( f1 == airport_routes.end() ) { // list<int> tmp_list; // tmp_list.push_back( ri->second ); // airport_routes.insert( airport_routes.begin(), pair<int, list<int> >( ri->first, tmp_list ) ); // } else { // f1->second.push_back( ri->second ); // } // // f2 = airport_routes.find( ri->second ); // if ( f2 == airport_routes.end() ) { // list<int> tmp_list; // tmp_list.push_back( ri->first ); // airport_routes.insert( airport_routes.begin(), pair<int, list<int> >( ri->second, tmp_list ) ); // } else { // f2->second.push_back( ri->first ); // } } routes.sort( Route::sort ); routes.resize( ROUTES_LIMIT ); console() << routes.size() << endl; this->active_route_iterator = routes.begin(); this->active_airport_iterator = airports_map.begin(); background = gl::Texture( loadImage( loadResource( BACKGROUND_IMAGE ) ) ); // f1 = airport_routes.begin(); // if ( f1 != airport_routes.end() ) { // addActiveRoute( f1->first, -1 ); // } }
void write(const char *text, int ttl, int font) { len++; msg.resize(len); it=msg.end(); --it; it->life=ttl; it->text=text; it->font=font; }
bool KmeansCsFactory::Kmedoid( vector<int>& vecHeadNames, list<list<int> >& listCluMembers ) { int retryTimes = 0; double* tempHeadX = new double [m_numMaxHeads]; double* tempHeadY = new double [m_numMaxHeads]; int* tempHeadList = new int [m_numMaxHeads]; bool convergedFlag = false; bool sameHeadFlag = true; vector <vector <int> > tempGroup; while(sameHeadFlag) { sameHeadFlag = false; convergedFlag = false; //Clear before added members if (retryTimes > ( m_numNodes - m_numMaxHeads + 1 ) ) { return false; } for (unsigned int i=0 ; i<tempGroup.size(); i++)tempGroup[i].clear(); tempGroup.clear(); for (int i = 0; i < m_numMaxHeads; i++) { vector <int> tempV; tempGroup.push_back(tempV); tempHeadX[i] = m_ptrMap->GetNodeXPos(i); tempHeadY[i] = m_ptrMap->GetNodeYPos(i); tempHeadList[i] = i + retryTimes; } while(!convergedFlag) { for (unsigned int i=0 ; i<tempGroup.size(); i++) tempGroup[i].clear(); for (int i = 0; i < m_numNodes; i++) { double closetDistance = std::numeric_limits<double>::max(); int closetHeadIndex = -1; for(int j = 0; j < m_numMaxHeads; j++ ) { double tempDistance = (tempHeadX[j] - m_ptrMap->GetNodeXPos(i)) * (tempHeadX[j] - m_ptrMap->GetNodeXPos(i)) + (tempHeadY[j] - m_ptrMap->GetNodeYPos(i)) * (tempHeadY[j] - m_ptrMap->GetNodeYPos(i)); if (closetDistance > tempDistance ) { closetDistance = tempDistance; closetHeadIndex = j; } } tempGroup[closetHeadIndex].push_back(i); } convergedFlag = true; #ifdef DEBUG for (int i = 0; i < tempGroup.size(); i++) { cout << "cluster: " << i <<"-th "; for (int j = 0; j < tempGroup[i].size(); j++) { cout << tempGroup[i][j] << ' '; } cout << endl; } #endif for(int i=0; i<m_numMaxHeads; i++) { float newHx = 0; float newHy = 0; arma::vec vecDistance = arma::zeros<arma::vec>(tempGroup[i].size()); for(unsigned int j=0; j<tempGroup[i].size(); j++) { float tempDistance = 0.0; for (int k = 0; k < tempGroup[i].size(); k++) { if ( j == k ) continue; tempDistance += sqrt ( (m_ptrMap->GetNodeXPos(tempGroup[i][j]) - m_ptrMap->GetNodeXPos(tempGroup[i][k]) ) * (m_ptrMap->GetNodeXPos(tempGroup[i][j]) - m_ptrMap->GetNodeXPos(tempGroup[i][k])) + (m_ptrMap->GetNodeYPos(tempGroup[i][j]) - m_ptrMap->GetNodeYPos(tempGroup[i][k])) * (m_ptrMap->GetNodeYPos(tempGroup[i][j]) - m_ptrMap->GetNodeYPos(tempGroup[i][k]))) ; } vecDistance.at(j) = tempDistance; } arma::uword idx; vecDistance.min(idx); newHx = m_ptrMap->GetNodeXPos(tempGroup[i][idx]); newHy = m_ptrMap->GetNodeYPos(tempGroup[i][idx]); if ( (abs(newHx-tempHeadX[i]) > 0.01) || (abs(newHy-tempHeadY[i])>0.01) ) convergedFlag = false; tempHeadX[i] = newHx; tempHeadY[i] = newHy; tempHeadList[i] = tempGroup[i][idx]; } } for (int i=0; i<m_numMaxHeads; i++) for (int j=i+1; j<m_numMaxHeads; j++) if (tempHeadList[i] == tempHeadList[j]) sameHeadFlag = true; retryTimes++; } vecHeadNames.assign(tempHeadList, tempHeadList + m_numMaxHeads); listCluMembers.resize(m_numMaxHeads); list<list<int> >::iterator iterRows = listCluMembers.begin(); for (int i = 0; iterRows != listCluMembers.end(); ++iterRows, ++i) { iterRows->assign(tempGroup[i].begin(), tempGroup[i].end()); } #ifdef DEBUG iterRows = listCluMembers.begin(); for (int i = 0; iterRows != listCluMembers.end(); ++iterRows, ++i) { list<int>::iterator iterCols = iterRows->begin(); cout << "cluster: " << i <<"-th "; for (; iterCols != iterRows->end(); ++iterCols) { cout << *iterCols << ' '; } cout << endl; } for (int i = 0; i < m_numMaxHeads; ++i) { cout << tempHeadList[i] << ' '; } cout << endl; #endif delete [] tempHeadX; delete [] tempHeadY; delete [] tempHeadList; return true; }
void InitNav() { g_potential_fields.resize(1); potential_field &pf = *g_potential_fields.begin(); ComputePotentialField(0, pf); }
/** * split and trim comma-separated list of values (other delimiters can be used too, ie: semicolon). * * RFC 4180 difference: it does skip space-only lines and trim values unless it is " quoted ". * * @param[in] i_values source string of comma separated values. * @param[in,out] io_resultLst source string of comma separated values. * @param[in] i_delimiters list of delimiters, default: comma. * @param[in] i_isUnquote if true then do "unquote ""csv"" ", default: false. * @param[in] i_quote quote character, default: sql single ' quote. * @param[in] i_locale locale to trim space characters, defaut: user default locale. */ void openm::splitCsv( const string & i_values, list<string> & io_resultLst, const char * i_delimiters, bool i_isUnquote, char i_quote, const locale & i_locale) { // if source is empty then return empty result string::size_type nSrcLen = i_values.length(); if (nSrcLen <= 0) { io_resultLst.clear(); // source string is empty: return empty list return; } // no delimiters: return entire source string as first element of result list size_t nDelimLen = (i_delimiters != nullptr) ? strnlen(i_delimiters, OM_STRLEN_MAX) : 0; if (0 == nDelimLen) { io_resultLst.clear(); io_resultLst.push_back(trim(i_values)); return; } // position and size in already existing list to set new values size_t lstSize = io_resultLst.size(); size_t lstPos = 0; list<string>::iterator lstIt = io_resultLst.begin(); // find delimiter(s) and append values into output list string::size_type nStart = 0; bool isInside = false; bool isDelim = false; for (string::size_type nPos = 0; nPos < nSrcLen; nPos++) { char chNow = i_values[nPos]; // if unquote required and this is quote then toogle 'inside '' quote' status if (i_isUnquote && chNow == i_quote) { isInside = !isInside; } // if not 'inside' of quoted value then check for any of delimiters if (!isInside) { isDelim = any_of( i_delimiters, i_delimiters + nDelimLen, [chNow](const char i_delim) -> bool { return chNow == i_delim; } ); } // if this is delimiter or end of string then unquote value and append to the list if (isDelim || nPos == nSrcLen - 1) { // column size: until end of line or until next delimiter size_t nLen = (nPos == nSrcLen - 1 && !isDelim) ? nSrcLen - nStart : nPos - nStart; // if previous list had enough columns then use it else append new column // trim spaces and unquote value if required if (lstPos < lstSize) { lstIt->clear(); // clear previous value lstIt->append(( i_isUnquote ? toUnQuoted(i_values.substr(nStart, nLen), i_quote, i_locale) : trim(i_values.substr(nStart, nLen), i_locale) )); ++lstIt; // next column in existing list buffer } else { // append new column io_resultLst.emplace_back(( i_isUnquote ? toUnQuoted(i_values.substr(nStart, nLen), i_quote, i_locale) : trim(i_values.substr(nStart, nLen), i_locale) )); } ++lstPos; // column count in the current list // if this is like: a,b, where delimiter at the end of line then append empty "" value if (nPos == nSrcLen - 1 && isDelim) { if (lstPos < lstSize) { lstIt->clear(); // clear previous column value ++lstIt; } else { io_resultLst.emplace_back(""); // append new empty column } ++lstPos; } nStart = nPos + 1; // skip delimiter and continue isDelim = false; } } // if current line have less columns than previous buffer then trim extra columns from result if (lstPos < lstSize) { io_resultLst.resize(lstPos); } }