155 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			155 lines
		
	
	
		
			3.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
|  | /*
 | ||
|  |  * $Id$ | ||
|  |  * | ||
|  |     Copyright (c) 2016-2018 Chung, Hyung-Hwan. All rights reserved. | ||
|  | 
 | ||
|  |     Redistribution and use in source and binary forms, with or without | ||
|  |     modification, are permitted provided that the following conditions | ||
|  |     are met: | ||
|  |     1. Redistributions of source code must retain the above copyright | ||
|  |        notice, this list of conditions and the following disclaimer. | ||
|  |     2. Redistributions in binary form must reproduce the above copyright | ||
|  |        notice, this list of conditions and the following disclaimer in the | ||
|  |        documentation and/or other materials provided with the distribution. | ||
|  | 
 | ||
|  |     THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR | ||
|  |     IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | ||
|  |     OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | ||
|  |     IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | ||
|  |     INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT | ||
|  |     NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, | ||
|  |     DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY | ||
|  |     THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
|  |     (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | ||
|  |     THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
|  |  */ | ||
|  | 
 | ||
|  | #ifndef _HCL_TMR_H_
 | ||
|  | #define _HCL_TMR_H_
 | ||
|  | 
 | ||
|  | #include "hcl-cmn.h"
 | ||
|  | 
 | ||
|  | typedef struct hcl_tmr_t hcl_tmr_t; | ||
|  | typedef struct hcl_tmr_event_t hcl_tmr_event_t; | ||
|  | typedef hcl_oow_t hcl_tmr_index_t; | ||
|  | 
 | ||
|  | typedef void (*hcl_tmr_handler_t) ( | ||
|  | 	hcl_tmr_t*         tmr, | ||
|  | 	const hcl_ntime_t* now,  | ||
|  | 	hcl_tmr_event_t*   evt | ||
|  | ); | ||
|  | 
 | ||
|  | typedef void (*hcl_tmr_updater_t) ( | ||
|  | 	hcl_tmr_t*        tmr, | ||
|  | 	hcl_tmr_index_t   old_index, | ||
|  | 	hcl_tmr_index_t   new_index, | ||
|  | 	hcl_tmr_event_t*  evt | ||
|  | ); | ||
|  | 
 | ||
|  | struct hcl_tmr_t | ||
|  | { | ||
|  | 	hcl_t*           hcl; | ||
|  | 	hcl_oow_t        capa; | ||
|  | 	hcl_oow_t        size; | ||
|  | 	hcl_tmr_event_t* event; | ||
|  | }; | ||
|  | 
 | ||
|  | struct hcl_tmr_event_t | ||
|  | { | ||
|  | 	void*              ctx;    /* primary context pointer */ | ||
|  | 	hcl_ntime_t        when; | ||
|  | 	hcl_tmr_handler_t  handler; | ||
|  | 	hcl_tmr_updater_t  updater; | ||
|  | }; | ||
|  | 
 | ||
|  | #define HCL_TMR_INVALID_INDEX ((hcl_tmr_index_t)-1)
 | ||
|  | 
 | ||
|  | #define HCL_TMR_SIZE(tmr) ((tmr)->size)
 | ||
|  | #define HCL_TMR_CAPA(tmr) ((tmr)->capa);
 | ||
|  | 
 | ||
|  | #if defined(__cplusplus)
 | ||
|  | extern "C" { | ||
|  | #endif
 | ||
|  | 
 | ||
|  | HCL_EXPORT hcl_tmr_t* hcl_tmr_open ( | ||
|  | 	hcl_t*     mmgr,  | ||
|  | 	hcl_oow_t  xtnsize, | ||
|  | 	hcl_oow_t  capa | ||
|  | ); | ||
|  | 
 | ||
|  | HCL_EXPORT void hcl_tmr_close ( | ||
|  | 	hcl_tmr_t* tmr | ||
|  | ); | ||
|  | 
 | ||
|  | HCL_EXPORT int hcl_tmr_init ( | ||
|  | 	hcl_tmr_t*  tmr,  | ||
|  | 	hcl_t*      mmgr, | ||
|  | 	hcl_oow_t   capa | ||
|  | ); | ||
|  | 
 | ||
|  | HCL_EXPORT void hcl_tmr_fini ( | ||
|  | 	hcl_tmr_t* tmr | ||
|  | ); | ||
|  | 
 | ||
|  | /*
 | ||
|  | HCL_EXPORT hcl_mmgr_t* hcl_tmr_getmmgr ( | ||
|  | 	hcl_tmr_t* tmr | ||
|  | );*/ | ||
|  | 
 | ||
|  | HCL_EXPORT void* hcl_tmr_getxtn ( | ||
|  | 	hcl_tmr_t* tmr | ||
|  | ); | ||
|  | 
 | ||
|  | HCL_EXPORT void hcl_tmr_clear ( | ||
|  | 	hcl_tmr_t* tmr | ||
|  | ); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * The hcl_tmr_insert() function schedules a new event. | ||
|  |  * | ||
|  |  * \return #HCL_TMR_INVALID_INDEX on failure, valid index on success. | ||
|  |  */ | ||
|  | 
 | ||
|  | HCL_EXPORT hcl_tmr_index_t hcl_tmr_insert ( | ||
|  | 	hcl_tmr_t*             tmr, | ||
|  | 	const hcl_tmr_event_t* event | ||
|  | ); | ||
|  | 
 | ||
|  | HCL_EXPORT hcl_tmr_index_t hcl_tmr_update ( | ||
|  | 	hcl_tmr_t*             tmr, | ||
|  | 	hcl_tmr_index_t        index, | ||
|  | 	const hcl_tmr_event_t* event | ||
|  | ); | ||
|  | 
 | ||
|  | HCL_EXPORT void hcl_tmr_delete ( | ||
|  | 	hcl_tmr_t*      tmr, | ||
|  | 	hcl_tmr_index_t index | ||
|  | ); | ||
|  | 
 | ||
|  | HCL_EXPORT int hcl_tmr_fire ( | ||
|  | 	hcl_tmr_t*         tmr, | ||
|  | 	const hcl_ntime_t* tm, | ||
|  | 	hcl_oow_t*         firecnt | ||
|  | ); | ||
|  | 
 | ||
|  | HCL_EXPORT int hcl_tmr_gettmout ( | ||
|  | 	hcl_tmr_t*         tmr, | ||
|  | 	const hcl_ntime_t* tm, | ||
|  | 	hcl_ntime_t*       tmout | ||
|  | ); | ||
|  | 
 | ||
|  | /**
 | ||
|  |  * The hcl_tmr_getevent() function returns the | ||
|  |  * pointer to the registered event at the given index. | ||
|  |  */ | ||
|  | HCL_EXPORT hcl_tmr_event_t* hcl_tmr_getevent ( | ||
|  | 	hcl_tmr_t*        tmr, | ||
|  | 	hcl_tmr_index_t   index | ||
|  | ); | ||
|  | 
 | ||
|  | #if defined(__cplusplus)
 | ||
|  | } | ||
|  | #endif
 | ||
|  | 
 | ||
|  | #endif
 |