}
// Update a_data:
- for(register unsigned int k = min; k <= max; k++) {
+ for(unsigned int k = min; k <= max; k++) {
a_data[k] = 0;
if(k == UINT_MAX/* overflow */) break;
return (result);
}
+
+//------------------------------------------------------------------------------
+//-------------------------------------- MultiRangeExpression::simplifyLiteral()
+//------------------------------------------------------------------------------
+const char * anna::MultiRangeExpression::simplifyLiteral(void) throw() {
+ if(a_data.size() == 0) return NULL;
+
+ std::map < unsigned int, int/*dummy*/ >::const_iterator it;
+ std::map < unsigned int, int/*dummy*/ >::const_iterator it_min(a_data.begin());
+ std::map < unsigned int, int/*dummy*/ >::const_iterator it_max(a_data.end());
+ unsigned int min = UINT_MAX;
+ unsigned int max = 0;
+ unsigned int value;
+ unsigned int prevValue = a_data.begin()->first;
+ a_literal = "";
+
+ for(it = it_min; it != it_max; it++) {
+ value = (*it).first;
+
+ if(value < min) min = value;
+
+ if(value - prevValue > 1) {
+ a_literal += anna::functions::asString(min);
+ a_literal += "-";
+ a_literal += anna::functions::asString(max);
+ a_literal += ",";
+ min = value;
+ }
+
+ if(value > max) max = value;
+
+ prevValue = value;
+ }
+
+ a_literal += anna::functions::asString(min);
+
+ if(max != min) {
+ a_literal += "-";
+ a_literal += anna::functions::asString(max);
+ }
+
+ return a_literal.c_str();
+}
+