25 #include "colselect.h" 53 const vector<string>& icolumns,
54 const vector<string>& exact_add,
55 const vector<string>& regex_add,
56 const vector<string>& exact_del,
57 const vector<string>& regex_del,
58 vector<string>& ocolumns
59 )
throw ( Exception ) {
61 if ( 0 == (exact_add.size( ) + regex_add.size( ) +
62 exact_del.size( ) + regex_del.size( )) ) {
67 add_set, exact_add_set, regex_add_set,
68 del_set, exact_del_set, regex_del_set,
71 exact_add_set.insert( exact_add.begin( ), exact_add.end( ) );
72 regex_add_set.insert( regex_add.begin( ), regex_add.end( ) );
73 exact_del_set.insert( exact_del.begin( ), exact_del.end( ) );
74 regex_del_set.insert( regex_del.begin( ), regex_del.end( ) );
75 column_set.insert( icolumns.begin( ), icolumns.end( ) );
77 ocolumns.erase( ocolumns.begin( ), ocolumns.end( ) );
80 set_intersection( column_set.begin( ), column_set.end( ),
81 exact_add_set.begin( ), exact_add_set.end( ),
82 inserter( add_set, add_set.begin( ) )
86 for ( set<string>::iterator pat = regex_add_set.begin( );
87 pat != regex_add_set.end( );
90 set<string>::iterator nam = column_set.begin( );
91 nam != column_set.end( );
94 if (
match( *nam, *pat ) )
95 add_set.insert( *nam );
98 set_difference( column_set.begin( ), column_set.end( ),
99 exact_del_set.begin( ), exact_del_set.end( ),
100 inserter( del_set, del_set.begin( ) )
104 for ( set<string>::iterator pat = regex_del_set.begin( );
105 pat != regex_del_set.end( );
108 set<string>::iterator nam = del_set.begin( );
109 nam != del_set.end( );
112 if (
match( *nam, *pat ) )
113 del_set.erase( *nam );
115 if ( exact_add.size( ) + regex_add.size( ) ) {
116 set<string> ocolumn_set;
117 set_intersection( del_set.begin( ), del_set.end( ),
118 add_set.begin( ), add_set.end( ),
119 inserter( ocolumn_set, ocolumn_set.begin( ) ) );
121 for ( vector<string>::size_type idx = 0; idx < icolumns.size( ); idx++ ) {
122 if ( ocolumn_set.end( ) != ocolumn_set.find( icolumns[idx] ) ) {
123 ocolumns.push_back( icolumns[idx] );
128 for ( vector<string>::size_type idx = 0; idx != icolumns.size( ); idx++ ) {
129 if ( del_set.end( ) != del_set.find( icolumns[idx] ) ) {
130 ocolumns.push_back( icolumns[idx] );
bool match(const string &str, const string &pattern)
handles Perl regular expression matching.
The suplib namespace encompasses all of the functions in the suplib++ library.
void colselect(const vector< string > &icolumns, const vector< string > &exact_add, const vector< string > ®ex_add, const vector< string > &exact_del, const vector< string > ®ex_del, vector< string > &ocolumns)
select columns based on exact/regex matching/exclusion.