#ifndef _SIMIX_PRIVATE_H
#define _SIMIX_PRIVATE_H
-#include "simix/simix.h"
+#include "simgrid/simix.h"
#include "surf/surf.h"
#include "xbt/fifo.h"
#include "xbt/swag.h"
#include "smx_network_private.h"
#include "smx_smurf_private.h"
#include "smx_synchro_private.h"
-#include "simix/context.h"
/* Define only for SimGrid benchmarking purposes */
#undef TIME_BENCH
extern smx_global_t simix_global;
extern unsigned long simix_process_maxpid;
+/******************************** Exceptions *********************************/
+
+#define SMX_EXCEPTION(issuer, c, v, m) \
+ if (1) { \
+ smx_process_t _smx_throw_issuer = (issuer); \
+ THROW_PREPARE(_smx_throw_issuer->running_ctx, (c), (v), xbt_strdup(m)); \
+ _smx_throw_issuer->doexception = 1; \
+ } else ((void)0)
+
+#define SMX_THROW() RETHROW
+
+/* ******************************** File ************************************ */
+typedef struct s_smx_file {
+ surf_file_t surf_file;
+} s_smx_file_t;
+
+typedef struct s_smx_stat {
+ s_file_stat_t surf_stat;
+} s_smx_stat_t;
+
/*********************************** Time ************************************/
/** @brief Timer datatype */
SIMIX_COMM_DONE
} e_smx_comm_type_t;
+typedef enum {
+ SIMIX_IO_OPEN,
+ SIMIX_IO_WRITE,
+ SIMIX_IO_READ,
+ SIMIX_IO_STAT
+} e_smx_io_type_t;
+
/** @brief Action datatype */
typedef struct s_smx_action {
int detached; /* If detached or not */
void (*clean_fun)(void*); /* Function to clean the detached src_buf if something goes wrong */
+ int (*match_fun)(void*,void*,smx_action_t); /* Filter function used by the other side. It is used when
+ looking if a given communication matches my needs. For that, myself must match the
+ expectations of the other side, too. See */
/* Surf action data */
surf_action_t surf_comm; /* The Surf communication action encapsulated */
void *dst_buff;
size_t src_buff_size;
size_t *dst_buff_size;
- char copied;
+ unsigned copied:1; /* whether the data were already copied */
- void* src_data; /* User data associated to communication */
+ void* src_data; /* User data associated to communication */
void* dst_data;
} comm;
/**
\brief Executes all the processes to run (in parallel if possible).
*/
-static XBT_INLINE void SIMIX_context_runall()
+static XBT_INLINE void SIMIX_context_runall(void)
{
simix_global->context_factory->runall();
}
*/
static XBT_INLINE smx_context_t SIMIX_context_self(void)
{
- if (simix_global && simix_global->context_factory != NULL) {
+ if (simix_global && simix_global->context_factory) {
return simix_global->context_factory->self();
}