diff options
Diffstat (limited to 'branches/1.0/tinySAK/src/tsk_fsm.h')
-rw-r--r-- | branches/1.0/tinySAK/src/tsk_fsm.h | 178 |
1 files changed, 0 insertions, 178 deletions
diff --git a/branches/1.0/tinySAK/src/tsk_fsm.h b/branches/1.0/tinySAK/src/tsk_fsm.h deleted file mode 100644 index b7639aa..0000000 --- a/branches/1.0/tinySAK/src/tsk_fsm.h +++ /dev/null @@ -1,178 +0,0 @@ -/* -* Copyright (C) 2009-2010 Mamadou Diop. -* -* Contact: Mamadou Diop <diopmamadou(at)doubango.org> -* -* This file is part of Open Source Doubango Framework. -* -* DOUBANGO is free software: you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation, either version 3 of the License, or -* (at your option) any later version. -* -* DOUBANGO is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with DOUBANGO. -* -*/ - -/**@file tsk_fsm.h - * @brief Finite-state machine (FSM) implementation. - * @sa http://en.wikipedia.org/wiki/Finite-state_machine. - * - * @author Mamadou Diop <diopmamadou(at)doubango.org> - * - * @date Created: Sat Nov 8 16:54:58 2009 mdiop - */ -#ifndef _TINYSAK_FSM_H_ -#define _TINYSAK_FSM_H_ - -#include "tinysak_config.h" -#include "tsk_list.h" -#include "tsk_safeobj.h" - -/**@ingroup tsk_fsm_group -* @def TSK_FSM_ONTERMINATED -*/ - -TSK_BEGIN_DECLS - -#define TSK_FSM_ONTERMINATED_F(self) (tsk_fsm_onterminated_f)(self) - -/**@ingroup tsk_fsm_group -* @def tsk_fsm_state_any -*/ -/**@ingroup tsk_fsm_group -* @def tsk_fsm_state_default -*/ -/**@ingroup tsk_fsm_group -* @def tsk_fsm_state_none -*/ -/**@ingroup tsk_fsm_group -* @def tsk_fsm_state_final -*/ -#define tsk_fsm_state_any -0xFFFF -#define tsk_fsm_state_default -0xFFF0 -#define tsk_fsm_state_none -0xFF00 -#define tsk_fsm_state_final -0xF000 - -/**@ingroup tsk_fsm_group -* @def tsk_fsm_action_any -*/ -#define tsk_fsm_action_any -0xFFFF - -/**@ingroup tsk_fsm_group -* @def tsk_fsm_state_id_t -*/ -/**@ingroup tsk_fsm_group -* @def tsk_fsm_action_id_t -*/ -/**@ingroup tsk_fsm_group -* @def tsk_fsm_cond -*/ -/**@ingroup tsk_fsm_group -* @def tsk_fsm_exec -*/ -/**@ingroup tsk_fsm_group -* @def tsk_fsm_onterminated -*/ - -typedef int tsk_fsm_state_id; -typedef int tsk_fsm_action_id; -typedef tsk_bool_t (*tsk_fsm_cond)(const void*, const void*); -typedef int (*tsk_fsm_exec)(va_list *app); -typedef int (*tsk_fsm_onterminated_f)(const void*); - - -/**@ingroup tsk_fsm_group -* @def TSK_FSM_ADD -*/ -/**@ingroup tsk_fsm_group -* @def TSK_FSM_ADD_ALWAYS -*/ -/**@ingroup tsk_fsm_group -* @def TSK_FSM_ADD_NOTHING -*/ -/**@ingroup tsk_fsm_group -* @def TSK_FSM_ADD_ALWAYS_NOTHING -*/ -/**@ingroup tsk_fsm_group -* @def TSK_FSM_ADD_DEFAULT -*/ -/**@ingroup tsk_fsm_group -* @def TSK_FSM_ADD_NULL -*/ -#define TSK_FSM_ADD(from, action, cond, to, exec, desc)\ - 1,\ - (tsk_fsm_state_id)from, \ - (tsk_fsm_action_id)action, \ - (tsk_fsm_cond)cond, \ - (tsk_fsm_state_id)to, \ - (tsk_fsm_exec)exec, \ - (const char*)desc -#define TSK_FSM_ADD_ALWAYS(from, action, to, exec, desc) TSK_FSM_ADD(from, action, tsk_fsm_cond_always, to, exec, desc) -#define TSK_FSM_ADD_NOTHING(from, action, cond, desc) TSK_FSM_ADD(from, action, cond, from, tsk_fsm_exec_nothing, desc) -#define TSK_FSM_ADD_ALWAYS_NOTHING(from, desc) TSK_FSM_ADD(from, tsk_fsm_action_any, tsk_fsm_cond_always, from, tsk_fsm_exec_nothing, desc) -#define TSK_FSM_ADD_DEFAULT() -#define TSK_FSM_ADD_NULL()\ - tsk_null - -/**@ingroup tsk_fsm_group -* FSM entry. -*/ -typedef struct tsk_fsm_entry_s -{ - TSK_DECLARE_OBJECT; - - tsk_fsm_state_id from; - tsk_fsm_action_id action; - tsk_fsm_cond cond; - tsk_fsm_state_id to; - tsk_fsm_exec exec; - const char* desc; -} -tsk_fsm_entry_t; - -/**@ingroup tsk_fsm_group -* List of @ref tsk_fsm_entry_t elements. -*/ -typedef tsk_list_t tsk_fsm_entries_L_t; - -/**@ingroup tsk_fsm_group -* FSM. -*/ -typedef struct tsk_fsm_s -{ - TSK_DECLARE_OBJECT; - - unsigned debug:1; - tsk_fsm_state_id current; - tsk_fsm_state_id term; - tsk_fsm_entries_L_t* entries; - - tsk_fsm_onterminated_f callback_term; - const void* callback_data; - - TSK_DECLARE_SAFEOBJ; -} -tsk_fsm_t; - -TINYSAK_API tsk_fsm_t* tsk_fsm_create(tsk_fsm_state_id state_curr, tsk_fsm_state_id state_term); - -TINYSAK_API int tsk_fsm_exec_nothing(va_list *app); -TINYSAK_API tsk_bool_t tsk_fsm_cond_always(const void*, const void*); -TINYSAK_API int tsk_fsm_set(tsk_fsm_t* self, ...); -TINYSAK_API int tsk_fsm_set_callback_terminated(tsk_fsm_t* self, tsk_fsm_onterminated_f callback, const void* callbackdata); -TINYSAK_API int tsk_fsm_act(tsk_fsm_t* self, tsk_fsm_action_id action, const void* cond_data1, const void* cond_data2, ...); -TINYSAK_API tsk_bool_t tsk_fsm_terminated(tsk_fsm_t* self); - -TINYSAK_GEXTERN const tsk_object_def_t *tsk_fsm_def_t; -TINYSAK_GEXTERN const tsk_object_def_t *tsk_fsm_entry_def_t; - -TSK_END_DECLS - -#endif /* _TINYSAK_FSM_H_ */ |