/*****************************************************************************/
/* ここから                                                                  */
/*****************************************************************************/

#include "WWTimerP.h"
#include "WonX.h"

/*****************************************************************************/
/* メンバ関数の定義                                                          */
/*****************************************************************************/

int WWTimer_ON(   WWTimer ww_timer) { return (ww_timer->timer_on =  1); }
int WWTimer_OFF(  WWTimer ww_timer) { return (ww_timer->timer_on =  0); }
int WWTimer_IsON( WWTimer ww_timer) { return (ww_timer->timer_on != 0); }
int WWTimer_IsOFF(WWTimer ww_timer) { return (ww_timer->timer_on == 0); }

int WWTimer_GetAutoPreset(WWTimer ww_timer)
{ return (ww_timer->auto_preset); }
int WWTimer_GetPresetCounter(WWTimer ww_timer)
{ return (ww_timer->preset_counter); }
int WWTimer_GetCounter(WWTimer ww_timer)
{ return (ww_timer->counter); }

int WWTimer_IsAutoPresetOFF(WWTimer ww_timer)
{ return (WWTimer_GetAutoPreset(ww_timer) == 0); }
int WWTimer_IsAutoPresetON(WWTimer ww_timer)
{ return (WWTimer_GetAutoPreset(ww_timer) == 1); }

int WWTimer_SetAutoPreset(WWTimer ww_timer, int auto_preset)
{ return (ww_timer->auto_preset = auto_preset); }
int WWTimer_SetPresetCounter(WWTimer ww_timer, int preset_counter)
{ return (ww_timer->preset_counter = preset_counter); }
int WWTimer_SetCounter(WWTimer ww_timer, int counter)
{ return (ww_timer->counter = counter); }

int WWTimer_SetAutoPresetOFF(WWTimer ww_timer)
{ return (WWTimer_SetAutoPreset(ww_timer, 0)); }
int WWTimer_SetAutoPresetON(WWTimer ww_timer)
{ return (WWTimer_SetAutoPreset(ww_timer, 1)); }

int WWTimer_Reset(WWTimer ww_timer)
{
  int counter;
  counter = WWTimer_GetCounter(ww_timer);
  WWTimer_SetCounter(ww_timer, WWTimer_GetPresetCounter(ww_timer));
  return (counter);
}

int WWTimer_Count(WWTimer ww_timer)
{
  int ret;
  int counter;

  if (WWTimer_IsOFF(ww_timer)) return (0);

  counter = WWTimer_GetCounter(ww_timer);

  counter--;

  if (counter <= 0) {
    ret = 1;
    if (WWTimer_IsAutoPresetON(ww_timer))
      WWTimer_Reset(ww_timer);
    else
      WWTimer_OFF(ww_timer);
  } else {
    ret = 0;
    WWTimer_SetCounter(ww_timer, counter);
  }

  return (ret);
}

/*---------------------------------------------------------------------------*/
/* オブジェクトの作成                                                        */
/*---------------------------------------------------------------------------*/

WWTimer WWTimer_Create(int auto_preset, int preset)
{
  WWTimer ww_timer;

  ww_timer = (WWTimer)malloc(sizeof(_WWTimer));
  if (ww_timer == NULL)
    WonX_Error("WWTimer_Create", "Cannot allocate memory.");

  WWTimer_OFF(ww_timer);
  WWTimer_SetAutoPreset(ww_timer, auto_preset);
  WWTimer_SetPresetCounter(ww_timer, preset);
  WWTimer_Reset(ww_timer);

  return (ww_timer);
}

/*---------------------------------------------------------------------------*/
/* オブジェクトの削除                                                        */
/*---------------------------------------------------------------------------*/

WWTimer WWTimer_Destroy(WWTimer ww_timer)
{
  if (ww_timer == NULL)
    WonX_Error("WWTimer_Destroy", "Object is not created.");

  free(ww_timer);

  return (NULL);
}

/*****************************************************************************/
/* ここまで                                                                  */
/*****************************************************************************/

/*****************************************************************************/
/* End of File.                                                              */
/*****************************************************************************/
