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