voidadd(uint64_tunits,uint32_tordinal,uint32_twindow_size/* must be positive */)
{
// check for some numerical limits before doing any state mutations
EOS_ASSERT(units<=max_raw_value,rate_limiting_state_inconsistent,"Usage exceeds maximum value representable after extending for precision");
EOS_ASSERT(std::numeric_limits<decltype(consumed)>::max()-consumed>=units,rate_limiting_state_inconsistent,"Overflow in tracked usage when adding usage!");
EOS_ASSERT(std::numeric_limits<decltype(value_ex)>::max()-value_ex>=value_ex_contrib,rate_limiting_state_inconsistent,"Overflow in accumulated value when adding usage!");