]> Creatis software - bbtk.git/blob - packages/std/src/bbstdVectorFilterString.cxx
fc996ad37f5e4e59b470156913fe70bc65bdcba4
[bbtk.git] / packages / std / src / bbstdVectorFilterString.cxx
1 //===== 
2 // 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)
3 //===== 
4 #include "bbstdVectorFilterString.h"
5 #include "bbstdPackage.h"
6
7 #include <string>
8 #include <stdlib.h>
9 namespace bbstd
10 {
11
12 BBTK_ADD_BLACK_BOX_TO_PACKAGE(std,VectorFilterString)
13 BBTK_BLACK_BOX_IMPLEMENTATION(VectorFilterString,bbtk::AtomicBlackBox);
14 //===== 
15 // 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)
16 //===== 
17
18 void VectorFilterString::ConnectionRepetitions( std::vector<std::string> vIn,std::vector<std::string> *vOut  )
19 {
20         int i,size=vIn.size();
21         int itmp=0, acum=0;
22         std::string stmp;
23         for( i=0;i<size;i++)
24         {
25                 if (vIn[i].compare( vIn[itmp])==0) 
26                 {
27                         acum++;
28                 } else {
29                         itmp = i;
30                         vOut->push_back(std::to_string(acum));
31                         acum = 1;
32                 }
33         } // for
34         vOut->push_back(std::to_string(acum));
35 }
36
37 void VectorFilterString::FilterByFindinIn0()
38 {
39         std::vector<std::string> vOut0;
40         std::vector<std::string> vOut1;
41         std::vector<std::string> vOut2;
42         std::vector<std::string> vOut3;
43         std::vector<std::string> vOut4;
44         std::vector<std::string> vOut5;
45         std::vector<std::string> vOut6;
46         std::vector<std::string> vOut7;
47         std::vector<std::string> vOut8;
48         std::vector<std::string> vOut9;
49
50         int i,size = bbGetInputIn0().size();
51         int pos;
52         for (i=0; i<size; i++)
53         {
54                 pos=bbGetInputIn0()[i].find( bbGetInputsk1());
55                 if (  pos  >= 0)
56                 {
57                         vOut0.push_back( bbGetInputIn0()[i] );
58                         if ( i < bbGetInputIn1().size() ) { vOut1.push_back( bbGetInputIn1()[i] ); }
59                         if ( i < bbGetInputIn2().size() ) { vOut2.push_back( bbGetInputIn2()[i] ); }
60                         if ( i < bbGetInputIn3().size() ) { vOut3.push_back( bbGetInputIn3()[i] ); }
61                         if ( i < bbGetInputIn4().size() ) { vOut4.push_back( bbGetInputIn4()[i] ); }
62                         if ( i < bbGetInputIn5().size() ) { vOut5.push_back( bbGetInputIn5()[i] ); }
63                         if ( i < bbGetInputIn6().size() ) { vOut6.push_back( bbGetInputIn6()[i] ); }
64                         if ( i < bbGetInputIn7().size() ) { vOut7.push_back( bbGetInputIn7()[i] ); }
65                         if ( i < bbGetInputIn8().size() ) { vOut8.push_back( bbGetInputIn8()[i] ); }
66                         if ( i < bbGetInputIn9().size() ) { vOut9.push_back( bbGetInputIn9()[i] ); }
67                 } // if pos
68         } // for i
69         
70         bbSetOutputOut0( vOut0 );
71         bbSetOutputOut1( vOut1 );
72         bbSetOutputOut2( vOut2 );
73         bbSetOutputOut3( vOut3 );
74         bbSetOutputOut4( vOut4 );
75         bbSetOutputOut5( vOut5 );
76         bbSetOutputOut6( vOut6 );
77         bbSetOutputOut7( vOut7 );
78         bbSetOutputOut8( vOut8 );
79         bbSetOutputOut9( vOut9 );
80 }
81
82 void VectorFilterString::InsertStringPos()
83 {
84     std::vector<std::string> vOut0;
85     std::vector<std::string> vOut1;
86     std::vector<std::string> vOut2;
87     std::vector<std::string> vOut3;
88     std::vector<std::string> vOut4;
89     std::vector<std::string> vOut5;
90     std::vector<std::string> vOut6;
91     std::vector<std::string> vOut7;
92     std::vector<std::string> vOut8;
93     std::vector<std::string> vOut9;
94     int i,size      = bbGetInputIn0().size();
95     std::string sk1 = bbGetInputsk1();
96     int pos         = atoi( bbGetInputsk2().c_str() );
97     for (i=0; i<size; i++)
98     {
99         vOut0.push_back( bbGetInputIn0()[i].insert(pos,sk1) );
100         if ( i < bbGetInputIn1().size() ) { vOut1.push_back( bbGetInputIn1()[i].insert(pos,sk1) ); }
101         if ( i < bbGetInputIn2().size() ) { vOut2.push_back( bbGetInputIn2()[i].insert(pos,sk1) ); }
102         if ( i < bbGetInputIn3().size() ) { vOut3.push_back( bbGetInputIn3()[i].insert(pos,sk1) ); }
103         if ( i < bbGetInputIn4().size() ) { vOut4.push_back( bbGetInputIn4()[i].insert(pos,sk1) ); }
104         if ( i < bbGetInputIn5().size() ) { vOut5.push_back( bbGetInputIn5()[i].insert(pos,sk1) ); }
105         if ( i < bbGetInputIn6().size() ) { vOut6.push_back( bbGetInputIn6()[i].insert(pos,sk1) ); }
106         if ( i < bbGetInputIn7().size() ) { vOut7.push_back( bbGetInputIn7()[i].insert(pos,sk1) ); }
107         if ( i < bbGetInputIn8().size() ) { vOut8.push_back( bbGetInputIn8()[i].insert(pos,sk1) ); }
108         if ( i < bbGetInputIn9().size() ) { vOut9.push_back( bbGetInputIn9()[i].insert(pos,sk1) ); }
109     } // for i
110     bbSetOutputOut0( vOut0 );
111     bbSetOutputOut1( vOut1 );
112     bbSetOutputOut2( vOut2 );
113     bbSetOutputOut3( vOut3 );
114     bbSetOutputOut4( vOut4 );
115     bbSetOutputOut5( vOut5 );
116     bbSetOutputOut6( vOut6 );
117     bbSetOutputOut7( vOut7 );
118     bbSetOutputOut8( vOut8 );
119     bbSetOutputOut9( vOut9 );
120 }
121
122 void VectorFilterString::InvertLists()
123 {
124     std::vector<std::string> vOut0;
125     std::vector<std::string> vOut1;
126     std::vector<std::string> vOut2;
127     std::vector<std::string> vOut3;
128     std::vector<std::string> vOut4;
129     std::vector<std::string> vOut5;
130     std::vector<std::string> vOut6;
131     std::vector<std::string> vOut7;
132     std::vector<std::string> vOut8;
133     std::vector<std::string> vOut9;
134     int i,size      = bbGetInputIn0().size();
135     for (i=size-1; i>=0; i--)
136     {
137             if ( i < bbGetInputIn0().size() ) { vOut0.push_back( bbGetInputIn0()[i] );  }
138             if ( i < bbGetInputIn1().size() ) { vOut1.push_back( bbGetInputIn1()[i] );  }
139             if ( i < bbGetInputIn2().size() ) { vOut2.push_back( bbGetInputIn2()[i] );  }
140             if ( i < bbGetInputIn3().size() ) { vOut3.push_back( bbGetInputIn3()[i] );  }
141             if ( i < bbGetInputIn4().size() ) { vOut4.push_back( bbGetInputIn4()[i] );  }
142             if ( i < bbGetInputIn5().size() ) { vOut5.push_back( bbGetInputIn5()[i] );  }
143             if ( i < bbGetInputIn6().size() ) { vOut6.push_back( bbGetInputIn6()[i] );  }
144             if ( i < bbGetInputIn7().size() ) { vOut7.push_back( bbGetInputIn7()[i] );  }
145             if ( i < bbGetInputIn8().size() ) { vOut8.push_back( bbGetInputIn8()[i] );  }
146             if ( i < bbGetInputIn9().size() ) { vOut9.push_back( bbGetInputIn9()[i] );  }
147     } // for i
148     bbSetOutputOut0( vOut0 );
149     bbSetOutputOut1( vOut1 );
150     bbSetOutputOut2( vOut2 );
151     bbSetOutputOut3( vOut3 );
152     bbSetOutputOut4( vOut4 );
153     bbSetOutputOut5( vOut5 );
154     bbSetOutputOut6( vOut6 );
155     bbSetOutputOut7( vOut7 );
156     bbSetOutputOut8( vOut8 );
157     bbSetOutputOut9( vOut9 );
158 }
159
160
161 void VectorFilterString::SwitchElement(std::vector<std::string> *pVec, int i, int ii )
162 {
163     std::string tmp;
164     
165     if  ( (i<pVec->size()) && (ii<pVec->size()) )
166     {
167         tmp         = (*pVec)[i];
168         (*pVec)[i]  = (*pVec)[ii];
169         (*pVec)[ii] = tmp;
170     } // if size
171 }
172
173 void VectorFilterString::OrderLists()
174 {
175     std::vector<std::string> vOut0=bbGetInputIn0();
176     std::vector<std::string> vOut1=bbGetInputIn1();
177     std::vector<std::string> vOut2=bbGetInputIn2();
178     std::vector<std::string> vOut3=bbGetInputIn3();
179     std::vector<std::string> vOut4=bbGetInputIn4();
180     std::vector<std::string> vOut5=bbGetInputIn5();
181     std::vector<std::string> vOut6=bbGetInputIn6();
182     std::vector<std::string> vOut7=bbGetInputIn7();
183     std::vector<std::string> vOut8=bbGetInputIn8();
184     std::vector<std::string> vOut9=bbGetInputIn9();
185     int i,ii,size      = bbGetInputIn0().size();
186     bool ok;
187     for (i=0; i<=size; i++)
188     {
189         for (ii=i; ii<=size; ii++)
190         {
191             ok=false;
192             if (bbGetInputType()==5)
193             {
194                 if ( vOut0[i] > vOut0[ii] )
195                 {
196                     ok = true;
197                 }  // if vIn0[i] > vIn0[ii]     // string version
198             } // if Type == 5
199             if (bbGetInputType()==6)
200             {
201 //                if ( std::stod( vOut0[i] ) > std::stod( vOut0[ii] ) )
202                 if ( ::atof( vOut0[i].c_str() ) > ::atof( vOut0[ii].c_str() ) )
203                 {
204                     ok = true;
205                 }  // if vIn0[i] > vIn0[ii]     double version
206             } // if Type == 6
207
208             if (ok==true)
209             {
210                 SwitchElement( &vOut0 , i ,ii );
211                 SwitchElement( &vOut1 , i ,ii );
212                 SwitchElement( &vOut2 , i ,ii );
213                 SwitchElement( &vOut3 , i ,ii );
214                 SwitchElement( &vOut4 , i ,ii );
215                 SwitchElement( &vOut5 , i ,ii );
216                 SwitchElement( &vOut6 , i ,ii );
217                 SwitchElement( &vOut7 , i ,ii );
218                 SwitchElement( &vOut8 , i ,ii );
219                 SwitchElement( &vOut9 , i ,ii );
220             }  // if ok
221         } // for ii
222     } // for i
223     bbSetOutputOut0( vOut0 );
224     bbSetOutputOut1( vOut1 );
225     bbSetOutputOut2( vOut2 );
226     bbSetOutputOut3( vOut3 );
227     bbSetOutputOut4( vOut4 );
228     bbSetOutputOut5( vOut5 );
229     bbSetOutputOut6( vOut6 );
230     bbSetOutputOut7( vOut7 );
231     bbSetOutputOut8( vOut8 );
232     bbSetOutputOut9( vOut9 );
233 }
234
235 void VectorFilterString::SubString()
236 {
237     std::vector<std::string> vOut0;
238     std::vector<std::string> vOut1;
239     std::vector<std::string> vOut2;
240     std::vector<std::string> vOut3;
241     std::vector<std::string> vOut4;
242     std::vector<std::string> vOut5;
243     std::vector<std::string> vOut6;
244     std::vector<std::string> vOut7;
245     std::vector<std::string> vOut8;
246     std::vector<std::string> vOut9;
247     int i,size  = bbGetInputIn0().size();
248     int sk1     = atoi( bbGetInputsk1().c_str() );
249     int sk2     = atoi( bbGetInputsk2().c_str() );
250     for (i=0; i<size; i++)
251     {
252             if ( i < bbGetInputIn0().size() ) { vOut0.push_back( bbGetInputIn0()[i].substr(sk1,sk2) );  }
253             if ( i < bbGetInputIn1().size() ) { vOut1.push_back( bbGetInputIn1()[i].substr(sk1,sk2) );  }
254             if ( i < bbGetInputIn2().size() ) { vOut2.push_back( bbGetInputIn2()[i].substr(sk1,sk2) );  }
255             if ( i < bbGetInputIn3().size() ) { vOut3.push_back( bbGetInputIn3()[i].substr(sk1,sk2) );  }
256             if ( i < bbGetInputIn4().size() ) { vOut4.push_back( bbGetInputIn4()[i].substr(sk1,sk2) );  }
257             if ( i < bbGetInputIn5().size() ) { vOut5.push_back( bbGetInputIn5()[i].substr(sk1,sk2) );  }
258             if ( i < bbGetInputIn6().size() ) { vOut6.push_back( bbGetInputIn6()[i].substr(sk1,sk2) );  }
259             if ( i < bbGetInputIn7().size() ) { vOut7.push_back( bbGetInputIn7()[i].substr(sk1,sk2) );  }
260             if ( i < bbGetInputIn8().size() ) { vOut8.push_back( bbGetInputIn8()[i].substr(sk1,sk2) );  }
261             if ( i < bbGetInputIn9().size() ) { vOut9.push_back( bbGetInputIn9()[i].substr(sk1,sk2) );  }
262     } // for i
263     bbSetOutputOut0( vOut0 );
264     bbSetOutputOut1( vOut1 );
265     bbSetOutputOut2( vOut2 );
266     bbSetOutputOut3( vOut3 );
267     bbSetOutputOut4( vOut4 );
268     bbSetOutputOut5( vOut5 );
269     bbSetOutputOut6( vOut6 );
270     bbSetOutputOut7( vOut7 );
271     bbSetOutputOut8( vOut8 );
272     bbSetOutputOut9( vOut9 );
273 }
274
275
276
277
278 void VectorFilterString::Process()
279 {
280
281 // THE MAIN PROCESSING METHOD BODY
282 //   Here we simply set the input 'In' value to the output 'Out'
283 //   And print out the output value
284 // INPUT/OUTPUT ACCESSORS ARE OF THE FORM :
285 //    void bbSet{Input|Output}NAME(const TYPE&)
286 //    const TYPE& bbGet{Input|Output}NAME() const 
287 //    Where :
288 //    * NAME is the name of the input/output
289 //      (the one provided in the attribute 'name' of the tag 'input')
290 //    * TYPE is the C++ type of the input/output
291 //      (the one provided in the attribute 'type' of the tag 'input')
292
293 //    bbSetOutputOut( bbGetInputIn() );
294 //    std::cout << "Output value = " <<bbGetOutputOut() << std::endl;
295   
296         if (bbGetInputType()==0) 
297         {
298                 std::vector<std::string> vOut0;
299                 std::vector<std::string> vOut1;
300                 std::vector<std::string> vOut2;
301                 std::vector<std::string> vOut3;
302                 std::vector<std::string> vOut4;
303                 std::vector<std::string> vOut5;
304                 std::vector<std::string> vOut6;
305                 std::vector<std::string> vOut7;
306                 std::vector<std::string> vOut8;
307                 std::vector<std::string> vOut9;
308                 ConnectionRepetitions( bbGetInputIn0() , &vOut0 );
309                 ConnectionRepetitions( bbGetInputIn1() , &vOut1 );
310                 ConnectionRepetitions( bbGetInputIn2() , &vOut2 );
311                 ConnectionRepetitions( bbGetInputIn3() , &vOut3 );
312                 ConnectionRepetitions( bbGetInputIn4() , &vOut4 );
313                 ConnectionRepetitions( bbGetInputIn5() , &vOut5 );
314                 ConnectionRepetitions( bbGetInputIn6() , &vOut6 );
315                 ConnectionRepetitions( bbGetInputIn7() , &vOut7 );
316                 ConnectionRepetitions( bbGetInputIn8() , &vOut8 );
317                 ConnectionRepetitions( bbGetInputIn9() , &vOut9 );
318                 bbSetOutputOut0( vOut0 );
319                 bbSetOutputOut1( vOut1 );
320                 bbSetOutputOut2( vOut2 );
321                 bbSetOutputOut3( vOut3 );
322                 bbSetOutputOut4( vOut4 );
323                 bbSetOutputOut5( vOut5 );
324                 bbSetOutputOut6( vOut6 );
325                 bbSetOutputOut7( vOut7 );
326                 bbSetOutputOut8( vOut8 );
327                 bbSetOutputOut9( vOut9 );
328         }
329
330     if (bbGetInputType()==2)
331     {
332         FilterByFindinIn0();
333     }
334
335     if (bbGetInputType()==3)
336     {
337         InsertStringPos();
338     }
339     
340     if (bbGetInputType()==4)
341     {
342         InvertLists();
343     }
344
345     if ( (bbGetInputType()==5)  ||  (bbGetInputType()==6)  )
346     {
347         OrderLists();
348     }
349     
350     if (bbGetInputType()==7)
351     {
352         SubString();
353     }
354
355
356 }
357 //===== 
358 // 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)
359 //===== 
360 void VectorFilterString::bbUserSetDefaultValues()
361 {
362
363 //  SET HERE THE DEFAULT INPUT/OUTPUT VALUES OF YOUR BOX 
364 //    Here we initialize the input 'In' to 0
365    bbSetInputType(0);
366    bbSetInputsk1("");
367    bbSetInputsk2("");
368 }
369 //===== 
370 // 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)
371 //===== 
372 void VectorFilterString::bbUserInitializeProcessing()
373 {
374
375 //  THE INITIALIZATION METHOD BODY :
376 //    Here does nothing 
377 //    but this is where you should allocate the internal/output pointers 
378 //    if any 
379
380   
381 }
382 //===== 
383 // 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)
384 //===== 
385 void VectorFilterString::bbUserFinalizeProcessing()
386 {
387
388 //  THE FINALIZATION METHOD BODY :
389 //    Here does nothing 
390 //    but this is where you should desallocate the internal/output pointers 
391 //    if any
392   
393 }
394
395 } // EO namespace bbstd
396
397