//
// (c) Copyright 2005-2014 Eduardo Ramos Testillano & Francisco Ruiz Rayo
//
-// https://bitbucket.org/testillano/anna
+// http://redmine.teslayout.com/projects/anna-suite
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
-// * Neither the name of Google Inc. nor the names of its
+// * Neither the name of the copyright holder nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
}
// 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();
+}
+