Finish implementing operator+= for positive offsets.

This commit is contained in:
King_DuckZ 2015-08-14 22:13:14 +02:00
commit e3345c5cca
3 changed files with 11 additions and 4 deletions

View file

@ -1,5 +1,8 @@
namespace dk {
namespace implem {
///----------------------------------------------------------------------
///Equivalent to (parA + parB) % parDiv
///----------------------------------------------------------------------
inline CoordinateScalarType sum_mod (CoordinateScalarType parA, CoordinateScalarType parB, CoordinateScalarType parDiv) {
//const auto sum = m_pos[index] + parValue;
//const auto sz = m_size[index] + 1;
@ -12,6 +15,9 @@ namespace dk {
return std::max(parA, parB) - rounded_sum + std::min(parA, parB);
}
///----------------------------------------------------------------------
///Equivalent to (parA + parB) / parDiv
///----------------------------------------------------------------------
inline CoordinateScalarType sum_div (CoordinateScalarType parA, CoordinateScalarType parB, CoordinateScalarType parDiv) {
const auto x = ((parA % parDiv) + (parB % parDiv)) / parDiv;
return parA / parDiv + parB / parDiv + x;
@ -88,12 +94,13 @@ namespace dk {
//parValue += m_pos[index];
//m_pos[index] = parValue % (m_size[index] + 1);
//parValue /= (m_size[index] + 1);
//++index;
//overflow-aware implementation
const auto new_pos = implem::sum_mod(m_pos[index], parValue, m_size[index] + 1);
parValue = implem::sum_div(m_pos[index], parValue, m_size[index] + 1);
m_pos[index] = new_pos;
++index;
}
return *this;
}