#ifndef _HPL_COUNTER_
#define _HPL_COUNTER_

#include <windows.h>

namespace HPL {
namespace General {

namespace CounterStateType {
	enum {
		NONE			= 0x000000,		//! 通常
		ONE_LOOP_END	= 0x000001,		//! 1ループが丁度終了した所
		ALL_LOOP_END	= 0x000002,		//! 
	};
}
/** 有限回/無限回のループカウンタ
  *
  */
class HPLCounter {
private:
	int m_nFrameCounter;		//! 1ループの現在のカウント
	int m_nFrameCounterMax;		//! 1ループのカウント数
	int m_nLoopNum;				//! 現在のループ回数
	int m_nLoopNumMax;			//! 最大ループ数。-1なら無限。0は1と同じ
	DWORD m_dwState;

private:
	void set_State( DWORD dwState );
public:
	HPLCounter();
	HPLCounter(int nFrameCounterMax, int nLoopNumMax);
	~HPLCounter();
	
public: // Getter/Setter
	DWORD get_State();

	int get_FrameCounter();
	int get_FrameCounterMax();
	int get_LoopNum();
	int get_LoopNumMax();

	void set_FrameCounterMax( int nFrameCounterMax);
	void set_LoopNumMax( int nLoopNumMax);
public:
	/** 1ステップ進める
	  * @retval	state
	  */
	DWORD step();

	/** リセット
	  *
	  */
	void reset();
};
}
}
#endif
