JIT: Multiplication management
[scilab.git] / scilab / modules / jit / includes / jitter.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2010-2010 - DIGITEO - Bruno JOFRET
4  *  Copyright (C) 2013-2013 - LIP6 - Peter Senna Tschudin
5  *
6  *  This file must be used under the terms of the CeCILL.
7  *  This source file is licensed as described in the file COPYING, which
8  *  you should have received as part of this distribution.  The terms
9  *  are also available at
10  *  http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt
11  *
12  */
13
14 #ifndef __JITTER_HXX__
15 #define __JITTER_HXX__
16
17 #include <iostream>
18 #include "exp.hxx"
19 #include "execvisitor.hxx"
20 #include "JITvisitor.hxx"
21
22 extern "C"
23 {
24 #include "Thread_Wrapper.h"
25 #include "dynlib_core_gw.h"
26 }
27
28 #include "threadId.hxx"
29
30 class CORE_GW_IMPEXP Jitter
31 {
32 private :
33     Jitter(ast::Exp* _theProgram, ast::JITVisitor *_visitor)
34     {
35         m_theProgram = _theProgram;
36         m_visitor = _visitor;
37     }
38     ~Jitter()
39     {
40         delete m_theProgram;
41         delete m_visitor;
42     }
43
44 public :
45
46     static void init();
47
48     static void execAndWait(ast::Exp* _theProgram, ast::JITVisitor *_visitor);
49
50     void exec(ast::Exp* _theProgram, ast::JITVisitor *_visitor);
51
52     ast::JITVisitor *getVisitor()
53     {
54         return m_visitor;
55     }
56
57     ast::Exp* getProgram()
58     {
59         return m_theProgram;
60     }
61
62     __threadId getThreadId(void)
63     {
64         return m_threadId;
65     }
66
67     void setThreadId(__threadId _threadId)
68     {
69         m_threadId = _threadId;
70     }
71
72     __threadKey getThreadKey(void)
73     {
74         return m_threadKey;
75     }
76
77     void setThreadKey(__threadKey _threadId)
78     {
79         m_threadKey = _threadId;
80     }
81
82     static void UnlockPrompt();
83
84     static void LockPrompt();
85
86 private :
87     static void *launch(void *args);
88
89 private :
90     __threadKey m_threadKey;
91     __threadId m_threadId;
92     ast::Exp*           m_theProgram;
93     ast::JITVisitor*   m_visitor;
94
95 private :
96     static __threadSignal m_awakeScilab;
97     static __threadSignalLock m_awakeScilabLock;
98     static __threadLock m_lock;
99 };
100 #endif /* !__RUNNER_HXX__ */