--- gigedit/trunk/src/gigedit/CombineInstrumentsDialog.cpp 2020/05/29 21:37:07 3779 +++ gigedit/trunk/src/gigedit/CombineInstrumentsDialog.cpp 2020/05/29 21:40:51 3780 @@ -225,6 +225,9 @@ static Dimensions getDimensionsForRegionGroup(RegionGroup& regionGroup) { std::map > dimUpperLimits; + #if DEBUG_COMBINE_INSTRUMENTS + printf("dimUpperLimits = {\n"); + #endif // collect all dimension region zones' upper limits for (RegionGroup::iterator it = regionGroup.begin(); it != regionGroup.end(); ++it) @@ -233,6 +236,9 @@ int previousBits = 0; for (uint d = 0; d < rgn->Dimensions; ++d) { const gig::dimension_def_t& def = rgn->pDimensionDefinitions[d]; + #if DEBUG_COMBINE_INSTRUMENTS + printf("\t[rgn=%p,dim=%#x] = {", rgn, def.dimension); + #endif for (uint z = 0; z < def.zones; ++z) { int dr = z << previousBits; gig::DimensionRegion* dimRgn = rgn->pDimensionRegions[dr]; @@ -245,22 +251,37 @@ // velocity splits of all regions is stored here, and when their // individual DimensionRegions are finally copied (later), the // individual velocity split size are copied by that. - dimUpperLimits[def.dimension].insert( + const int upperLimit = (def.dimension == gig::dimension_velocity) ? z : (def.split_type == gig::split_type_bit) ? - ((z+1) * 128/def.zones - 1) : dimRgn->DimensionUpperLimits[dr] - ); + ((z+1) * 128/def.zones - 1) : dimRgn->DimensionUpperLimits[dr]; + #if DEBUG_COMBINE_INSTRUMENTS + printf(" %d,", upperLimit); + #endif + dimUpperLimits[def.dimension].insert(upperLimit); } previousBits += def.bits; + #if DEBUG_COMBINE_INSTRUMENTS + printf(" }\n"); + #endif } } + #if DEBUG_COMBINE_INSTRUMENTS + printf("}\n"); + #endif // convert upper limit set to range vector Dimensions dims; + #if DEBUG_COMBINE_INSTRUMENTS + printf("dims = {\n"); + #endif for (std::map >::const_iterator it = dimUpperLimits.begin(); it != dimUpperLimits.end(); ++it) { gig::dimension_t type = it->first; + #if DEBUG_COMBINE_INSTRUMENTS + printf("\t[dim=%#x] = {", type); + #endif int iLow = 0; for (std::set::const_iterator itNums = it->second.begin(); itNums != it->second.end(); ++itNums) @@ -268,9 +289,18 @@ const int iUpperLimit = *itNums; DLS::range_t range = { uint16_t(iLow), uint16_t(iUpperLimit) }; dims[type].push_back(range); + #if DEBUG_COMBINE_INSTRUMENTS + printf(" %d..%d,", iLow, iUpperLimit); + #endif iLow = iUpperLimit + 1; } + #if DEBUG_COMBINE_INSTRUMENTS + printf(" }\n"); + #endif } + #if DEBUG_COMBINE_INSTRUMENTS + printf("}\n"); + #endif return dims; }