X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3111b4d9bcae48261dfa4990fcc27ea9e7a7f0aa..8e970353f6db8e98fd13fcc1bf80e57e84f3d25c:/src/xbt/xbt_context_private.h?ds=sidebyside diff --git a/src/xbt/xbt_context_private.h b/src/xbt/xbt_context_private.h index b073653c7f..bf01c289bf 100644 --- a/src/xbt/xbt_context_private.h +++ b/src/xbt/xbt_context_private.h @@ -7,16 +7,19 @@ SG_BEGIN_DECL() +/* *********************** */ +/* Context type definition */ +/* *********************** */ + /* the following function pointers describe the interface that all context concepts must implement */ - typedef void (*xbt_pfn_context_free_t)(xbt_context_t); /* pointer type to the function used to destroy the specified context */ typedef void (*xbt_pfn_context_kill_t)(xbt_context_t); /* pointer type to the function used to kill the specified context */ typedef void (*xbt_pfn_context_schedule_t)(xbt_context_t); /* pointer type to the function used to resume the specified context */ -typedef void (*xbt_pfn_context_yield_t)(void); /* pointer type to the function used to yield the specified context */ +typedef void (*xbt_pfn_context_yield_t)(void); /* pointer type to the function used to yield the specified context */ typedef void (*xbt_pfn_context_start_t)(xbt_context_t); /* pointer type to the function used to start the specified context */ -typedef void (*xbt_pfn_context_stop_t)(int); /* pointer type to the function used to stop the current context */ +typedef void (*xbt_pfn_context_stop_t)(int); /* pointer type to the function used to stop the current context */ -/* each context concept must use this macro in its declaration */ +/* each context type must contain this macro at its begining -- OOP in C :/ */ #define XBT_CTX_BASE_T \ s_xbt_swag_hookup_t hookup; \ char *name; \ @@ -36,11 +39,14 @@ typedef void (*xbt_pfn_context_stop_t)(int); /* pointer type to the function xbt_pfn_context_start_t start; \ xbt_pfn_context_stop_t stop -/* all other contexts derive from this structure */ -typedef struct s_xbt_context -{ +/* all other context types derive from this structure */ +typedef struct s_xbt_context { XBT_CTX_BASE_T; -}s_xbt_context_t; +} s_xbt_context_t; + +/* ****************** */ +/* Globals definition */ +/* ****************** */ /* Important guys */ extern xbt_context_t current_context; @@ -49,13 +55,53 @@ extern xbt_context_t maestro_context; extern xbt_swag_t context_living; extern xbt_swag_t context_to_destroy; +/* *********************** */ +/* factory type definition */ +/* *********************** */ +typedef struct s_xbt_context_factory * xbt_context_factory_t; + +/* this function describes the interface that all context factory must implement */ +typedef xbt_context_t (*xbt_pfn_context_factory_create_context_t)(const char*, xbt_main_func_t, void_f_pvoid_t, void*, void_f_pvoid_t, void*, int, char**); +typedef int (*xbt_pfn_context_factory_create_maestro_context_t)(xbt_context_t*); + +/* this function finalize the specified context factory */ +typedef int (*xbt_pfn_context_factory_finalize_t)(xbt_context_factory_t*); + +/* this interface is used by the xbt context module to create the appropriate concept */ +typedef struct s_xbt_context_factory { + xbt_pfn_context_factory_create_maestro_context_t create_maestro_context; /* create the context of the maestro */ + xbt_pfn_context_factory_create_context_t create_context; /* create a new context */ + xbt_pfn_context_factory_finalize_t finalize; /* finalize the context factory */ + const char* name; /* the name of the context factory */ + +} s_xbt_context_factory_t; + +/** + * This function select a context factory associated with the name specified by + * the parameter name. + * If successful the function returns 0. Otherwise the function returns the error + * code. + */ +int +xbt_context_select_factory(const char* name); + +/** + * This function initialize a context factory from the name specified by the parameter + * name. + * If successful the factory specified by the parameter factory is initialized and the + * function returns 0. Otherwise the function returns the error code. + */ +int +xbt_context_init_factory_by_name(xbt_context_factory_t* factory, const char* name); + /* All factories init */ -typedef struct s_xbt_context_factory* xbt_context_factory_t; +int xbt_ctx_thread_factory_init(xbt_context_factory_t* factory); +int xbt_ctx_sysv_factory_init(xbt_context_factory_t* factory); +int xbt_ctx_java_factory_init(xbt_context_factory_t* factory); + + -int xbt_thread_context_factory_init(xbt_context_factory_t* factory); -int xbt_ucontext_factory_init(xbt_context_factory_t* factory); -int xbt_jcontext_factory_init(xbt_context_factory_t* factory); SG_END_DECL()