X-Git-Url: https://git.teslayout.com/public/public/public/?a=blobdiff_plain;ds=sidebyside;f=source%2Fcore%2Futil%2FMultiRangeExpression.cpp;h=84e722c6cfab3f567daf1c557ce70cd97b9431e8;hb=2032c82d206dd40e35d118242272417431094823;hp=75ca5638c8805a90241bf495f60ca99eef824a24;hpb=5256cb543a9d35b610df19bd227cde977186aef0;p=anna.git diff --git a/source/core/util/MultiRangeExpression.cpp b/source/core/util/MultiRangeExpression.cpp index 75ca563..84e722c 100644 --- a/source/core/util/MultiRangeExpression.cpp +++ b/source/core/util/MultiRangeExpression.cpp @@ -109,3 +109,47 @@ 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(); +} +