Finish implementing operator+= for positive offsets.
This commit is contained in:
parent
dbdc814049
commit
e3345c5cca
3 changed files with 11 additions and 4 deletions
|
@ -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;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue