#ifndef COUNTER_HPP_INCLUDED
#define COUNTER_HPP_INCLUDED

#include <iostream>
#include <cstdint>

/** @addtogroup Types
* @{ */
class Counter
{
    public:

        Counter();
        Counter(std::int32_t MaxIterations);

        void Reset();
        bool Increment(std::int32_t Amount = 1);
        bool IsFinished() const;
        std::int32_t GetIterations() const;
        std::int32_t GetMaxIterations() const;
        friend std::ostream& operator<<(std::ostream& OS, const Counter& C);
        ~Counter();
    private:
        std::int32_t MaxIterations;
        std::int32_t Iterations;
};

/** @} */

#endif // COUNTER_HPP_INCLUDED
