X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;f=source%2Fcore%2Futil%2FMultiRangeExpression.cpp;fp=source%2Fcore%2Futil%2FMultiRangeExpression.cpp;h=3c2307d08d5c11930d8c8ee8a4b8deb02d185012;hb=0c646b4aa99a84ef6976a51b6d4554aea11ded35;hp=75ca5638c8805a90241bf495f60ca99eef824a24;hpb=2dd13851454b7ed734a0d080b2932a0e92d10f0d;p=anna.git diff --git a/source/core/util/MultiRangeExpression.cpp b/source/core/util/MultiRangeExpression.cpp index 75ca563..3c2307d 100644 --- a/source/core/util/MultiRangeExpression.cpp +++ b/source/core/util/MultiRangeExpression.cpp @@ -109,3 +109,46 @@ std::string anna::MultiRangeExpression::getExpandedLiteral(void) const throw() { 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(); +} +