32 #include <Exception/Exception.h> 33 #include <suplib/range.h> 37 inline bool mycmp(
const std::pair< long, long >& a,
const std::pair< long, long >& b ) {
38 return a.first < b.first;
41 Row::Row(
const std::vector< std::string >& row_options ) {
43 std::vector< std::string >::const_iterator iter = row_options.begin( );
44 std::vector< std::string >::const_iterator the_end = row_options.end( );
46 if ( iter == the_end ) {
48 start_end.push_back( std::pair< long, long > ( 1, LONG_MAX ) );
52 for ( ; iter != the_end; ++iter ) {
54 RangeLList* rll = NULL;
57 (RangeOpts) ( Range_SORT | Range_MERGE | Range_INCOMPLETE );
58 long where, start = 1, end = LONG_MAX;
61 if ( (myerr=rangel_parse( &rll, (
char*) iter->c_str( ), opt,
62 start, end, &where )) ) {
64 std::ostringstream ost;
65 ost <<
"Row::Row( ) : Unable to parse '" << *iter <<
"'\n";
66 throw Exception( ost.str( ) );
69 for (
size_t ii = 0; ii < rll->n ; ii++ )
70 start_end.emplace_back( rll->range[ ii ].start, rll->range[ ii ].end );
72 sort( start_end.begin( ), start_end.end( ), ptr_fun( mycmp ) );
80 void Row::print( std::ostream& os )
const {
82 std::vector< std::pair< long, long > > ::const_iterator iter = start_end.begin( );
83 std::vector< std::pair< long, long > >::const_iterator end = start_end.end( );
84 for ( ; iter != end; ++iter ) {
85 os <<
'[' << iter->first <<
',' << iter->second <<
']';
86 if ( iter + 1 != end )