44 lines
811 B
C++
44 lines
811 B
C++
|
|
#pragma once
|
|
|
|
template <typename T>
|
|
inline void clamp(T& current, T min, T max)
|
|
{
|
|
if (current < min)
|
|
{
|
|
current = min;
|
|
}
|
|
else if(current > max)
|
|
{
|
|
current = max;
|
|
}
|
|
}
|
|
|
|
// List of numbers from min to max. Next is exponent times bigger than previous.
|
|
|
|
class ExponentialSeries
|
|
{
|
|
public:
|
|
ExponentialSeries(unsigned min, unsigned max, unsigned exponent = 2)
|
|
{
|
|
m_current = m_min = min;
|
|
m_max = max;
|
|
m_exponent = exponent;
|
|
}
|
|
void reset()
|
|
{
|
|
m_current = m_min;
|
|
}
|
|
unsigned operator()()
|
|
{
|
|
unsigned retval = m_current;
|
|
m_current *= m_exponent;
|
|
clamp(m_current, m_min, m_max);
|
|
return retval;
|
|
}
|
|
unsigned m_current;
|
|
unsigned m_min;
|
|
unsigned m_max;
|
|
unsigned m_exponent;
|
|
};
|