]> Creatis software - bbtk.git/blobdiff - packages/std/src/bbstdVectorFilterString.cxx
#3495 box VectorFilterString with EraseDuplicateLines option
[bbtk.git] / packages / std / src / bbstdVectorFilterString.cxx
index ee02ef6d2436fcfff7323b9e218aab7ebbe505a7..19953563937501163d5efc1e3a603583311855a5 100644 (file)
@@ -15,6 +15,40 @@ BBTK_BLACK_BOX_IMPLEMENTATION(VectorFilterString,bbtk::AtomicBlackBox);
 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)
 //===== 
 
+void VectorFilterString::CountConnectedRepetitions()
+{
+    std::vector<std::string> vOut0;
+    std::vector<std::string> vOut1;
+    std::vector<std::string> vOut2;
+    std::vector<std::string> vOut3;
+    std::vector<std::string> vOut4;
+    std::vector<std::string> vOut5;
+    std::vector<std::string> vOut6;
+    std::vector<std::string> vOut7;
+    std::vector<std::string> vOut8;
+    std::vector<std::string> vOut9;
+    ConnectionRepetitions( bbGetInputIn0() , &vOut0 );
+    ConnectionRepetitions( bbGetInputIn1() , &vOut1 );
+    ConnectionRepetitions( bbGetInputIn2() , &vOut2 );
+    ConnectionRepetitions( bbGetInputIn3() , &vOut3 );
+    ConnectionRepetitions( bbGetInputIn4() , &vOut4 );
+    ConnectionRepetitions( bbGetInputIn5() , &vOut5 );
+    ConnectionRepetitions( bbGetInputIn6() , &vOut6 );
+    ConnectionRepetitions( bbGetInputIn7() , &vOut7 );
+    ConnectionRepetitions( bbGetInputIn8() , &vOut8 );
+    ConnectionRepetitions( bbGetInputIn9() , &vOut9 );
+    bbSetOutputOut0( vOut0 );
+    bbSetOutputOut1( vOut1 );
+    bbSetOutputOut2( vOut2 );
+    bbSetOutputOut3( vOut3 );
+    bbSetOutputOut4( vOut4 );
+    bbSetOutputOut5( vOut5 );
+    bbSetOutputOut6( vOut6 );
+    bbSetOutputOut7( vOut7 );
+    bbSetOutputOut8( vOut8 );
+    bbSetOutputOut9( vOut9 );
+}
+
 void VectorFilterString::ConnectionRepetitions( std::vector<std::string> vIn,std::vector<std::string> *vOut  )
 {
        int i,size=vIn.size();
@@ -273,6 +307,103 @@ void VectorFilterString::SubString()
 }
 
 
+void VectorFilterString::EraseDuplicateLines()
+{
+    std::vector< std::vector< std::string > * >  pLstVec;
+    std::vector< std::vector< std::string > * >  pLstVecOut;
+    std::vector< std::string > In0 = bbGetInputIn0();
+    std::vector< std::string > In1 = bbGetInputIn1();
+    std::vector< std::string > In2 = bbGetInputIn2();
+    std::vector< std::string > In3 = bbGetInputIn3();
+    std::vector< std::string > In4 = bbGetInputIn4();
+    std::vector< std::string > In5 = bbGetInputIn5();
+    std::vector< std::string > In6 = bbGetInputIn6();
+    std::vector< std::string > In7 = bbGetInputIn7();
+    std::vector< std::string > In8 = bbGetInputIn8();
+    std::vector< std::string > In9 = bbGetInputIn9();
+    if (bbGetInputIn0().size()!=0) { pLstVec.push_back( &In0 ); }
+    if (bbGetInputIn1().size()!=0) { pLstVec.push_back( &In1 ); }
+    if (bbGetInputIn2().size()!=0) { pLstVec.push_back( &In2 ); }
+    if (bbGetInputIn3().size()!=0) { pLstVec.push_back( &In3 ); }
+    if (bbGetInputIn4().size()!=0) { pLstVec.push_back( &In4 ); }
+    if (bbGetInputIn5().size()!=0) { pLstVec.push_back( &In5 ); }
+    if (bbGetInputIn6().size()!=0) { pLstVec.push_back( &In6 ); }
+    if (bbGetInputIn7().size()!=0) { pLstVec.push_back( &In7 ); }
+    if (bbGetInputIn8().size()!=0) { pLstVec.push_back( &In8 ); }
+    if (bbGetInputIn9().size()!=0) { pLstVec.push_back( &In9 ); }
+    std::vector< std::string > Out0;
+    std::vector< std::string > Out1;
+    std::vector< std::string > Out2;
+    std::vector< std::string > Out3;
+    std::vector< std::string > Out4;
+    std::vector< std::string > Out5;
+    std::vector< std::string > Out6;
+    std::vector< std::string > Out7;
+    std::vector< std::string > Out8;
+    std::vector< std::string > Out9;
+    pLstVecOut.push_back( &Out0 );
+    pLstVecOut.push_back( &Out1 );
+    pLstVecOut.push_back( &Out2 );
+    pLstVecOut.push_back( &Out3 );
+    pLstVecOut.push_back( &Out4 );
+    pLstVecOut.push_back( &Out5 );
+    pLstVecOut.push_back( &Out6 );
+    pLstVecOut.push_back( &Out7 );
+    pLstVecOut.push_back( &Out8 );
+    pLstVecOut.push_back( &Out9 );
+    std::string tmp1;
+    std::string tmp2;
+        if (bbGetInputIn0().size()!=0)  // At least one element
+        {
+            bool okSizeVec=true;
+            int ipLstvec;
+            for (ipLstvec=1;ipLstvec<pLstVec.size();ipLstvec++)
+            {
+                if ( (*pLstVec[ipLstvec]).size()!=(*pLstVec[0]).size() )  { okSizeVec=false; }
+            }
+            if ( okSizeVec==false)
+            {
+                printf("EED VectorFilterString::Process WARNING! vectors are not of the same size.\n");
+            } else {
+                int iLine;
+                int ipLstvec2;
+                bool okLine;
+                int size=0;
+                if (bbGetInputType()==8) { size = pLstVec.size(); }
+                if (bbGetInputType()==9) { size = 1;              }
+                for (iLine=0 ; iLine < (*pLstVec[0]).size() ; iLine++ )
+                {
+                    okLine=false;
+//                    for ( ipLstvec2=0 ; ipLstvec2<pLstVec.size() ; ipLstvec2++)
+//                    for ( ipLstvec2=0 ; ipLstvec2<1 ; ipLstvec2++)
+                    for ( ipLstvec2=0 ; ipLstvec2<size   ; ipLstvec2++)
+                    {
+                        tmp1=(*pLstVec[ipLstvec2])[iLine];
+                        tmp2=(*pLstVec[ipLstvec2])[iLine-1];
+                        if ( tmp1.compare(tmp2)!=0 )  { okLine=true; }
+                    } // for ipLstVec2
+                    if ( (okLine==true) || (iLine==0) )
+                    {
+                        for (ipLstvec2=0 ; ipLstvec2<pLstVec.size() ; ipLstvec2++)
+                        {
+                            (*pLstVecOut[ipLstvec2]).push_back( (*pLstVec[ipLstvec2])[iLine] );
+                        } // for
+                    } // if okLine
+                } // for iLine
+            } // if okSizeVec
+        } // bbGetInputIn0()  size
+    bbSetOutputOut0( Out0 );
+    bbSetOutputOut1( Out1 );
+    bbSetOutputOut2( Out2 );
+    bbSetOutputOut3( Out3 );
+    bbSetOutputOut4( Out4 );
+    bbSetOutputOut5( Out5 );
+    bbSetOutputOut6( Out6 );
+    bbSetOutputOut7( Out7 );
+    bbSetOutputOut8( Out8 );
+    bbSetOutputOut9( Out9 );
+}
+
 
 
 void VectorFilterString::Process()
@@ -295,36 +426,7 @@ void VectorFilterString::Process()
   
        if (bbGetInputType()==0) 
        {
-               std::vector<std::string> vOut0;
-               std::vector<std::string> vOut1;
-               std::vector<std::string> vOut2;
-               std::vector<std::string> vOut3;
-               std::vector<std::string> vOut4;
-               std::vector<std::string> vOut5;
-               std::vector<std::string> vOut6;
-               std::vector<std::string> vOut7;
-               std::vector<std::string> vOut8;
-               std::vector<std::string> vOut9;
-               ConnectionRepetitions( bbGetInputIn0() , &vOut0 );
-               ConnectionRepetitions( bbGetInputIn1() , &vOut1 );
-               ConnectionRepetitions( bbGetInputIn2() , &vOut2 );
-               ConnectionRepetitions( bbGetInputIn3() , &vOut3 );
-               ConnectionRepetitions( bbGetInputIn4() , &vOut4 );
-               ConnectionRepetitions( bbGetInputIn5() , &vOut5 );
-               ConnectionRepetitions( bbGetInputIn6() , &vOut6 );
-               ConnectionRepetitions( bbGetInputIn7() , &vOut7 );
-               ConnectionRepetitions( bbGetInputIn8() , &vOut8 );
-               ConnectionRepetitions( bbGetInputIn9() , &vOut9 );
-               bbSetOutputOut0( vOut0 );
-               bbSetOutputOut1( vOut1 );
-               bbSetOutputOut2( vOut2 );
-               bbSetOutputOut3( vOut3 );
-               bbSetOutputOut4( vOut4 );
-               bbSetOutputOut5( vOut5 );
-               bbSetOutputOut6( vOut6 );
-               bbSetOutputOut7( vOut7 );
-               bbSetOutputOut8( vOut8 );
-               bbSetOutputOut9( vOut9 );
+        CountConnectedRepetitions();
        }
 
     if (bbGetInputType()==2)
@@ -351,8 +453,10 @@ void VectorFilterString::Process()
     {
         SubString();
     }
-
-
+    if ( (bbGetInputType()==8)  ||  (bbGetInputType()==9)  )
+    {
+        EraseDuplicateLines();
+    }
 }
 //===== 
 // Before editing this file, make sure it's a file of your own (i.e.: it wasn't generated from xml description; if so : your modifications will be lost)