From: Arnaud Giersch Date: Sun, 22 Oct 2017 19:13:13 +0000 (+0200) Subject: ContextUnix: add header file with class definitions. X-Git-Tag: v3.18~397^2~23 X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/commitdiff_plain/17633238aa86ea939e453a17e83e8d3274c2bc68 ContextUnix: add header file with class definitions. --- diff --git a/src/kernel/context/ContextUnix.cpp b/src/kernel/context/ContextUnix.cpp index fd6562f6cf..c0d29fb8cc 100644 --- a/src/kernel/context/ContextUnix.cpp +++ b/src/kernel/context/ContextUnix.cpp @@ -5,25 +5,14 @@ /* \file UContext.cpp Context switching with ucontexts from System V */ -#include /* context relative declarations */ +#include "ContextUnix.hpp" #include "mc/mc.h" #include "src/mc/mc_ignore.h" #include "src/simix/ActorImpl.hpp" -#include "src/simix/smx_private.hpp" -#include "xbt/parmap.hpp" XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_context); -namespace simgrid { -namespace kernel { -namespace context { - class UContext; - class SerialUContext; - class ParallelUContext; - class UContextFactory; -}}} - /** Many integers are needed to store a pointer * * Support up to two ints. */ @@ -64,52 +53,6 @@ namespace simgrid { namespace kernel { namespace context { -class UContext : public Context { -private: - ucontext_t uc_; /* the ucontext that executes the code */ - char *stack_ = nullptr; /* the thread stack */ -public: - friend UContextFactory; - UContext(std::function code, - void_pfn_smxprocess_t cleanup_func, smx_actor_t process); - ~UContext() override; - void stop() override; - static void swap(UContext* from, UContext* to) { swapcontext(&from->uc_, &to->uc_); } -}; - -class SerialUContext : public UContext { -public: - SerialUContext(std::function code, - void_pfn_smxprocess_t cleanup_func, smx_actor_t process) - : UContext(std::move(code), cleanup_func, process) - {} - void suspend() override; - void resume(); -}; - -class ParallelUContext : public UContext { -public: - ParallelUContext(std::function code, - void_pfn_smxprocess_t cleanup_func, smx_actor_t process) - : UContext(std::move(code), cleanup_func, process) - {} - void suspend() override; - void resume(); -}; - -class UContextFactory : public ContextFactory { -public: - friend UContext; - friend SerialUContext; - friend ParallelUContext; - - UContextFactory(); - ~UContextFactory() override; - Context* create_context(std::function code, - void_pfn_smxprocess_t cleanup, smx_actor_t process) override; - void run_all() override; -}; - XBT_PRIVATE ContextFactory* sysv_factory() { XBT_VERB("Activating SYSV context factory"); diff --git a/src/kernel/context/ContextUnix.hpp b/src/kernel/context/ContextUnix.hpp new file mode 100644 index 0000000000..94608daac1 --- /dev/null +++ b/src/kernel/context/ContextUnix.hpp @@ -0,0 +1,77 @@ +/* Copyright (c) 2009-2017. 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. */ + +#ifndef SIMGRID_SIMIX_UNIX_CONTEXT_HPP +#define SIMGRID_SIMIX_UNIX_CONTEXT_HPP + +#include /* context relative declarations */ + +#include +#include +#include + +#include +#include +#include + +#include "Context.hpp" +#include "src/internal_config.h" +#include "src/simix/smx_private.hpp" + +namespace simgrid { +namespace kernel { +namespace context { + +class UContext; +class SerialUContext; +class ParallelUContext; +class UContextFactory; + +class UContext : public Context { +private: + ucontext_t uc_; /* the ucontext that executes the code */ + char* stack_ = nullptr; /* the thread stack */ +public: + friend UContextFactory; + UContext(std::function code, void_pfn_smxprocess_t cleanup_func, smx_actor_t process); + ~UContext() override; + void stop() override; + static void swap(UContext* from, UContext* to) { swapcontext(&from->uc_, &to->uc_); } +}; + +class SerialUContext : public UContext { +public: + SerialUContext(std::function code, void_pfn_smxprocess_t cleanup_func, smx_actor_t process) + : UContext(std::move(code), cleanup_func, process) + { + } + void suspend() override; + void resume(); +}; + +class ParallelUContext : public UContext { +public: + ParallelUContext(std::function code, void_pfn_smxprocess_t cleanup_func, smx_actor_t process) + : UContext(std::move(code), cleanup_func, process) + { + } + void suspend() override; + void resume(); +}; + +class UContextFactory : public ContextFactory { +public: + friend UContext; + friend SerialUContext; + friend ParallelUContext; + + UContextFactory(); + ~UContextFactory() override; + Context* create_context(std::function code, void_pfn_smxprocess_t cleanup, smx_actor_t process) override; + void run_all() override; +}; +}}} // namespace + +#endif diff --git a/tools/cmake/DefinePackages.cmake b/tools/cmake/DefinePackages.cmake index 802efdd7a7..29045aa1d9 100644 --- a/tools/cmake/DefinePackages.cmake +++ b/tools/cmake/DefinePackages.cmake @@ -766,9 +766,11 @@ else() # NOT pthread endif() if(${HAVE_UCONTEXT_CONTEXTS}) #ucontext - set(SURF_SRC ${SURF_SRC} src/kernel/context/ContextUnix.cpp) + set(SURF_SRC ${SURF_SRC} src/kernel/context/ContextUnix.hpp + src/kernel/context/ContextUnix.cpp) else() # NOT ucontext - set(EXTRA_DIST ${EXTRA_DIST} src/kernel/context/ContextUnix.cpp) + set(EXTRA_DIST ${EXTRA_DIST} src/kernel/context/ContextUnix.hpp + src/kernel/context/ContextUnix.cpp) endif() ### Simgrid Lib sources