Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[simix] Port JavaContext to C++
[simgrid.git] / src / bindings / java / JavaContext.hpp
1 /* Copyright (c) 2009-2010, 2012-2014. 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_JAVA_JAVA_CONTEXT_HPP
8 #define SIMGRID_JAVA_JAVA_CONTEXT_HPP
9
10 #include <jni.h>
11
12 #include <xbt/misc.h>
13 #include <simgrid/simix.h>
14 #include <xbt/xbt_os_thread.h>
15
16 #include "src/simix/smx_private.hpp"
17
18 #include "jmsg.h"
19 #include "jmsg_process.h"
20
21 namespace simgrid {
22 namespace java {
23
24 class JavaContext;
25 class JavacontextFactory;
26
27 class JavaContext : public simgrid::simix::Context {
28 public:
29   // The java process instance bound with the msg process structure:
30   jobject jprocess;
31   // JNI interface pointer associated to this thread:
32   JNIEnv *jenv;
33   xbt_os_thread_t thread;
34   // Sempahore used to schedule/yield the process:
35   xbt_os_sem_t begin;
36   // Semaphore used to schedule/unschedule the process:
37   xbt_os_sem_t end;
38 public:
39   friend class JavaContextFactory;
40   JavaContext(xbt_main_func_t code,
41           int argc, char **argv,
42           void_pfn_smxprocess_t cleanup_func,
43           smx_process_t process);
44   ~JavaContext() override;
45   void stop() override;
46   void suspend() override;
47   void resume();
48 private:
49   static void* wrapper(void *data);
50 };
51
52 class JavaContextFactory : public simgrid::simix::ContextFactory {
53 public:
54   JavaContextFactory();
55   ~JavaContextFactory() override;
56   JavaContext* self() override;
57   JavaContext* create_context(
58     xbt_main_func_t, int, char **, void_pfn_smxprocess_t,
59     smx_process_t process
60     ) override;
61   void run_all() override;
62 };
63
64 XBT_PRIVATE simgrid::simix::ContextFactory* java_factory();
65
66 }
67 }
68
69 #endif                          /* !_XBT_CONTEXT_JAVA_H */