X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/dc061ae1d3507d0e3b7d3569553b31cb6709702e..907e0ad42ebe9ac4074648201519ecc10d1f8812:/src/simix/smx_context_private.h diff --git a/src/simix/smx_context_private.h b/src/simix/smx_context_private.h index 7ee1ce0fdf..cce495c403 100644 --- a/src/simix/smx_context_private.h +++ b/src/simix/smx_context_private.h @@ -1,7 +1,7 @@ /* a fast and simple context switching library */ -/* Copyright (c) 2004-2008 the SimGrid team. */ -/* All rights reserved. */ +/* Copyright (c) 2009, 2010. The SimGrid Team. + * All rights reserved. */ /* This program is free software; you can redistribute it and/or modify it * under the terms of the license (GNU LGPL) which comes with this package. */ @@ -9,91 +9,41 @@ #ifndef _XBT_CONTEXT_PRIVATE_H #define _XBT_CONTEXT_PRIVATE_H -/*#include "xbt/sysdep.h"*/ -#include "simix/private.h" #include "xbt/swag.h" +#include "simix/private.h" SG_BEGIN_DECL() +/*Hack: let msg load directly the right factory */ +typedef void (*SIMIX_ctx_factory_initializer_t)(smx_context_factory_t *); +extern SIMIX_ctx_factory_initializer_t factory_initializer_to_use; /* *********************** */ /* Context type definition */ /* *********************** */ /* the following function pointers types describe the interface that all context concepts must implement */ - -/* each context type must contain this macro at its begining -- OOP in C :/ */ -#define SMX_CTX_BASE_T \ - s_xbt_swag_hookup_t hookup; \ - ex_ctx_t *exception; \ - xbt_main_func_t code; \ - -/* all other context types derive from this structure */ +/* each context type derive from this structure, so they must contain this structure + * at their begining -- OOP in C :/ */ typedef struct s_smx_context { - SMX_CTX_BASE_T; -} s_smx_context_t; - -/* *********************** */ -/* factory type definition */ -/* *********************** */ - -/* The following function pointer types describe the interface that any context - factory should implement */ - -/* function used to create a new context */ -typedef int (*smx_pfn_context_factory_create_context_t) (smx_process_t *, xbt_main_func_t); - -/* function used to create the context for the maestro process */ -typedef int (*smx_pfn_context_factory_create_maestro_context_t) (smx_process_t*); - -/* this function finalize the specified context factory */ -typedef int (*smx_pfn_context_factory_finalize_t) (smx_context_factory_t*); - -/* function used to destroy the specified context */ -typedef void (*smx_pfn_context_free_t) (smx_process_t); - -/* function used to kill the specified context */ -typedef void (*smx_pfn_context_kill_t) (smx_process_t); - -/* function used to resume the specified context */ -typedef void (*smx_pfn_context_schedule_t) (smx_process_t); - -/* function used to yield the specified context */ -typedef void (*smx_pfn_context_yield_t) (void); - -/* function used to start the specified context */ -typedef void (*smx_pfn_context_start_t) (smx_process_t); - -/* function used to stop the current context */ -typedef void (*smx_pfn_context_stop_t) (int); - -/* interface of the context factories */ -typedef struct s_smx_context_factory { - smx_pfn_context_factory_create_context_t create_context; - smx_pfn_context_factory_finalize_t finalize; - smx_pfn_context_free_t free; - smx_pfn_context_kill_t kill; - smx_pfn_context_schedule_t schedule; - smx_pfn_context_yield_t yield; - smx_pfn_context_stop_t stop; - const char *name; -} s_smx_context_factory_t; - -/* Selects 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 SIMIX_context_select_factory(const char *name); - -/* Initializes a context factory from the name specified by the parameter name. - * If the factory cannot be found, an exception is raised. - */ -void SIMIX_context_init_factory_by_name(smx_context_factory_t * factory, const char *name); - -/* All factories init */ -void SIMIX_ctx_thread_factory_init(smx_context_factory_t * factory); - -void SIMIX_ctx_sysv_factory_init(smx_context_factory_t * factory); - -void SIMIX_ctx_java_factory_init(smx_context_factory_t * factory); + s_xbt_swag_hookup_t hookup; + xbt_main_func_t code; + int argc; + char **argv; + void_f_pvoid_t cleanup_func; + void *cleanup_arg; +} s_smx_ctx_base_t; +/* methods of this class */ +void smx_ctx_base_factory_init(smx_context_factory_t * factory); +int smx_ctx_base_factory_finalize(smx_context_factory_t * factory); + +smx_context_t +smx_ctx_base_factory_create_context_sized(size_t size, + xbt_main_func_t code, int argc, + char **argv, + void_f_pvoid_t cleanup_func, + void *cleanup_arg); +void smx_ctx_base_free(smx_context_t context); +void smx_ctx_base_stop(smx_context_t context); SG_END_DECL() -#endif /* !_XBT_CONTEXT_PRIVATE_H */ +#endif /* !_XBT_CONTEXT_PRIVATE_H */