removeDistant.h

Go to the documentation of this file.
00001 #ifndef ATLFAST_REMOVEDISTANT_H
00002 #define ATLFAST_REMOVEDISTANT_H
00003 
00018 
00019 #ifndef STD_VECTOR_H
00020 #include <vector>
00021 #define STD_VECTOR_H
00022 #endif
00023 namespace Atlfast{
00024   template<class IsClose, class Container, class Dist >
00025     Container removeDistant(const Container& v, Dist dist){
00026       
00027       size_t size = v.size();
00028       
00029       Container close;
00030       if(size<2) {return close;}
00031 
00032       std::vector<bool> keep(size, false);
00033       bool somethingsClose = false;
00034       
00035       const typename Container::const_iterator  vbegin = v.begin();
00036       const typename Container::const_iterator  vend   = v.end();
00037       const typename std::vector<bool>::const_iterator kbegin   = keep.begin();
00038       
00039       typename Container::const_iterator voiter;
00040       typename Container::const_iterator viiter;
00041       std::vector<bool>::const_iterator kiter;
00042       
00043       for(voiter = vbegin; voiter!=vend; ++voiter){
00044         IsClose close(dist, *voiter);
00045         //    Close<double, double> close(dist, *voiter);
00046         for(viiter=voiter+1; viiter!=vend; ++viiter){
00047           if(close(*viiter)){
00048             keep[viiter-vbegin] = true;
00049             keep[voiter-vbegin] = true;
00050             somethingsClose     = true;
00051           }
00052           /*
00053             cout<<"Close "<<close<<" point "
00054             <<*viiter<<" result "<<close(*viiter)<<endl;
00055             copy(keep.begin(), keep.end(), ostream_iterator<int>(cout, " "));
00056             cout<<endl;
00057           */
00058         }
00059       }
00060       
00061       if(somethingsClose){
00062         size_t pos = 0;
00063         for(kiter=kbegin; kiter!=keep.end(); ++kiter, ++pos){
00064           if(*kiter) {close.push_back(v[pos]);}
00065         }
00066       }
00067       return close;
00068   }
00069 }//namespace
00070 #endif
00071 
00072 
00073 
00074 
00075 
00076 
00077 

Generated on Fri Sep 21 13:20:36 2007 for AtlfastUtils by  doxygen 1.5.1