/*
 *	clipdlyq.h
 *
 *	遅延コールバックキュー
 *
 *	CLiP - Common Library for P/ECE
 *	Copyright (C) 2017-2018 Naoyuki Sawa
 *
 *	* Mon Jan 30 21:41:16 JST 2017 Naoyuki Sawa
 *	- 1st リリース。
 *	* Wed Apr 11 23:59:59 JST 2018 Naoyuki Sawa
 *	- DlyQue_AddArg_l(),DlyQue_AddArg_a(),DlyQue_AddArg_v()を追加しました。
 *	  遅延コールバックキューをアドホックに利用するための関数です。
 *	  clipcbkq.cモジュールにも実装可能なのですが、遅延コールバックキューでしか使わないと思ったので、clipdlyq.cモジュールに実装する事にしました。
 *	  もし今後、clipcbkq.cモジュールでもこのような使い方が出来た方が便利だと判断した場合は、clipcbkq.cモジュールにも同等の関数を追加して下さい。
 */
#ifndef __CLIP_DLYQ_H__
#define __CLIP_DLYQ_H__
#ifdef  __cplusplus
extern "C" {
#endif//__cplusplus
/*****************************************************************************
 *	構造体
 *****************************************************************************/
typedef struct _ST_DlyQue ST_DlyQue;	//opaque datatype
/*****************************************************************************
 *	グローバル関数
 *****************************************************************************/
ST_DlyQue* DlyQue_New();
void DlyQue_Free(ST_DlyQue* pDlyQue);
void DlyQue_Add(ST_DlyQue* pDlyQue, int dly, int pri/*SHRT_MIN〜SHRT_MAX*/, void (*fn)(ST_DlyQue* pDlyQue, int pri, void* param), void* param);
void* DlyQue_AddMem(ST_DlyQue* pDlyQue, int dly, int pri/*SHRT_MIN〜SHRT_MAX*/, void (*fn)(ST_DlyQue* pDlyQue, int pri, void* param), int memBytes);
//{{2018/04/11追加:DlyQue_AddArg_l(),DlyQue_AddArg_a(),DlyQue_AddArg_v()を追加しました。
void DlyQue_AddArg_l(ST_DlyQue* pDlyQue, int dly, int pri/*SHRT_MIN〜SHRT_MAX*/, void (*fn)(), int argc, ...);
void DlyQue_AddArg_a(ST_DlyQue* pDlyQue, int dly, int pri/*SHRT_MIN〜SHRT_MAX*/, void (*fn)(), int argc, va_list ap);
void DlyQue_AddArg_v(ST_DlyQue* pDlyQue, int dly, int pri/*SHRT_MIN〜SHRT_MAX*/, void (*fn)(), int argc, void* argv[/*argc*/]);
//}}2018/04/11追加:DlyQue_AddArg_l(),DlyQue_AddArg_a(),DlyQue_AddArg_v()を追加しました。
void DlyQue_Exec(ST_DlyQue* pDlyQue);
#ifdef  __cplusplus
}//extern "C"
#endif//__cplusplus
#endif//__CLIP_DLYQ_H__
