source: trunk/src/STIdxIter.h@ 3145

Last change on this file since 3145 was 3106, checked in by Takeshi Nakazato, 8 years ago

New Development: No

JIRA Issue: No

Ready for Test: Yes/No

Interface Changes: Yes/No

What Interface Changed: Please list interface changes

Test Programs: List test programs

Put in Release Notes: Yes/No

Module(s): Module Names change impacts.

Description: Describe your changes here...


Check-in asap modifications from Jim regarding casacore namespace conversion.

File size: 2.7 KB
Line 
1#ifndef _ASAP_INDEX_ITERATOR_H_
2#define _ASAP_INDEX_ITERATOR_H_
3
4#include <vector>
5#include <casa/Containers/Block.h>
6#include <casa/Arrays/Vector.h>
7#include <casa/Arrays/Matrix.h>
8#include <casa/Arrays/IPosition.h>
9#include <casa/BasicSL/String.h>
10
11#include <casa/Utilities/Sort.h>
12
13#include "Scantable.h"
14
15using namespace std ;
16using namespace casacore;
17
18//namespace {
19//vector<string> split(const string &str, char delim)
20//{
21// vector<string> result;
22// size_t current = 0;
23// size_t found;
24// while ((found = str.find_first_of(delim, current)) != string::npos) {
25// result.push_back(string(str, current, found - current));
26// current = found + 1;
27// }
28// result.push_back(string(str, current, str.size() - current));
29// return result;
30//}
31//} // anonymous namespace
32
33namespace asap {
34class STIdxIter2
35{
36public:
37 template<class T>
38 static void Iterate(T &processor, const string cols_list)
39 {
40 vector<string> cols = split(cols_list, ',');
41 // for (vector<string>::iterator i = cols.begin(); i != cols.end(); ++i)
42 // cout << *i << endl;
43 STIdxIter2 iter(processor.target(), cols);
44 STSelector sel ;
45 while ( !iter.pastEnd() ) {
46 const Record current = iter.currentValue() ;
47 Vector<uInt> rows = iter.getRows( SHARE ) ;
48 // any process
49 processor.Process(cols, current, rows);
50 // go next
51 iter.next() ;
52 }
53 }
54 STIdxIter2() ;
55 STIdxIter2( const string &name,
56 const vector<string> &cols ) ;
57 STIdxIter2( const CountedPtr<Scantable> &s,
58 const vector<string> &cols ) ;
59 virtual ~STIdxIter2() ;
60 Record currentValue();
61 Bool pastEnd() ;
62 void next() ;
63 Vector<uInt> getRows(StorageInitPolicy policy=COPY) ;
64 vector<uInt> getRowsSTL() { return tovector( getRows() ) ; } ;
65 virtual void init();
66private:
67 static vector<string> split(const string &str, char delim)
68 {
69 vector<string> result;
70 size_t current = 0;
71 size_t found;
72 while ((found = str.find_first_of(delim, current)) != string::npos) {
73 result.push_back(string(str, current, found - current));
74 current = found + 1;
75 }
76 result.push_back(string(str, current, str.size() - current));
77 return result;
78 }
79 vector<uInt> tovector(Vector<uInt> v);
80 void addSortKey(const string &name);
81 template<class T, DataType U> void addColumnToKey(const string &name);
82 void addColumnToKeyTpString(const string &name);
83 void deallocate();
84 vector<string> cols_;
85 Table table_;
86 uInt counter_;
87 uInt num_iter_;
88 uInt num_row_;
89 Sort sorter_;
90 Vector<uInt> index_;
91 Vector<uInt> unique_;
92 vector<void*> pointer_;
93 vector<Vector<String> > string_storage_;
94} ;
95
96} // namespace
97#endif /* _ASAP_INDEX_ITERATOR_H_ */
Note: See TracBrowser for help on using the repository browser.