Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
a6051cc82cb394b93fd3bbc393a35a3f1ce9e449
[simgrid.git] / src / simix / smx_private.hpp
1 /* Copyright (c) 2007-2010, 2012-2015. The SimGrid Team.
2  * All rights reserved.                                                     */
3
4 /* This program is free software; you can redistribute it and/or modify it
5  * under the terms of the license (GNU LGPL) which comes with this package. */
6
7 #ifndef SIMGRID_SIMIX_PRIVATE_HPP
8 #define SIMGRID_SIMIX_PRIVATE_HPP
9
10 #include <simgrid/simix.hpp>
11 #include "smx_private.h"
12
13 /**
14  * \brief destroy a context
15  * \param context the context to destroy
16  * Argument must be stopped first -- runs in maestro context
17  */
18 static XBT_INLINE void SIMIX_context_free(smx_context_t context)
19 {
20   delete context;
21 }
22
23 /**
24  * \brief stops the execution of a context
25  * \param context to stop
26  */
27 static XBT_INLINE void SIMIX_context_stop(smx_context_t context)
28 {
29   context->stop();
30 }
31
32 /**
33  \brief suspends a context and return the control back to the one which
34         scheduled it
35  \param context the context to be suspended (it must be the running one)
36  */
37 static XBT_INLINE void SIMIX_context_suspend(smx_context_t context)
38 {
39   context->suspend();
40 }
41
42 /**
43  \brief Executes all the processes to run (in parallel if possible).
44  */
45 static XBT_INLINE void SIMIX_context_runall(void)
46 {
47   if (!xbt_dynar_is_empty(simix_global->process_to_run))
48     simix_global->context_factory->run_all();
49 }
50
51 /**
52  \brief returns the current running context
53  */
54 static XBT_INLINE smx_context_t SIMIX_context_self(void)
55 {
56   if (simix_global && simix_global->context_factory)
57     return simix_global->context_factory->self();
58   else
59     return nullptr;
60 }
61
62 /**
63  \brief returns the SIMIX process associated to a context
64  \param context The context
65  \return The SIMIX process
66  */
67 static XBT_INLINE smx_process_t SIMIX_context_get_process(smx_context_t context)
68 {
69   return context->process();
70 }
71
72 namespace simgrid {
73 namespace simix {
74
75 XBT_PRIVATE ContextFactory* thread_factory();
76 XBT_PRIVATE ContextFactory* sysv_factory();
77 XBT_PRIVATE ContextFactory* raw_factory();
78 XBT_PRIVATE ContextFactory* boost_factory();
79
80 }
81 }
82
83 #endif