ca16f25be5d34496b005e2e13db9bf23d0ab160c
[scilab.git] / scilab / modules / core / includes / runner.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 __RUNNER_HXX__
14 #define __RUNNER_HXX__
15
16 #include <iostream>
17 #include "exp.hxx"
18 #include "execvisitor.hxx"
19
20 extern "C"
21 {
22 #include "Thread_Wrapper.h"
23 #include "dynlib_core.h"
24 }
25
26 #include "threadId.hxx"
27
28 class CORE_IMPEXP Runner
29 {
30 private :
31     Runner(ast::Exp* _theProgram, ast::ExecVisitor *_visitor)
32     {
33         m_theProgram = _theProgram;
34         m_visitor = _visitor;
35     }
36     ~Runner()
37     {
38         delete m_theProgram;
39         delete m_visitor;
40     }
41
42 public :
43
44     static void init();
45
46     static void execAndWait(ast::Exp* _theProgram, ast::ExecVisitor *_visitor);
47
48     void exec(ast::Exp* _theProgram, ast::ExecVisitor *_visitor);
49
50     ast::ExecVisitor *getVisitor()
51     {
52         return m_visitor;
53     }
54
55     ast::Exp* getProgram()
56     {
57         return m_theProgram;
58     }
59
60     __threadId getThreadId(void)
61     {
62         return m_threadId;
63     }
64
65     void setThreadId(__threadId _threadId)
66     {
67         m_threadId = _threadId;
68     }
69
70     __threadKey getThreadKey(void)
71     {
72         return m_threadKey;
73     }
74
75     void setThreadKey(__threadKey _threadId)
76     {
77         m_threadKey = _threadId;
78     }
79
80     static void UnlockPrompt();
81
82     static void LockPrompt();
83
84 private :
85     static void *launch(void *args);
86
87 private :
88     __threadKey m_threadKey;
89     __threadId m_threadId;
90     ast::Exp*           m_theProgram;
91     ast::ExecVisitor*   m_visitor;
92
93 private :
94     static __threadSignal m_awakeScilab;
95     static __threadSignalLock m_awakeScilabLock;
96     static __threadLock m_lock;
97 };
98 #endif /* !__RUNNER_HXX__ */