Example #1
0
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++;
    }
}
Example #2
0
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;
    }
Example #5
0
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;

}
Example #6
0
void InitNav()
{
	g_potential_fields.resize(1);
	potential_field &pf = *g_potential_fields.begin();
	ComputePotentialField(0, pf);
}
Example #7
0
/**
* 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);
    }
}