2 * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3 * Copyright (C) 2010-2010 - DIGITEO - Bruno JOFRET
4 * Copyright (C) 2014-2015 - Scilab Enterprises - Cedric Delamarre
6 * Copyright (C) 2012 - 2016 - Scilab Enterprises
8 * This file is hereby licensed under the terms of the GNU GPL v2.0,
9 * pursuant to article 5.3.4 of the CeCILL v.2.1.
10 * This file was originally licensed under the terms of the CeCILL v2.1,
11 * and continues to be available under such terms.
12 * For more information, see the COPYING file which you should have received
13 * along with this program.
17 #ifndef __RUNNER_HXX__
18 #define __RUNNER_HXX__
24 #include "runvisitor.hxx"
28 #include "dynlib_core.h"
29 #include "storeCommand.h" // command_origin_t
32 class CORE_IMPEXP Runner
35 Runner(ast::Exp* _theProgram, ast::RunVisitor *_visitor) : m_theProgram(_theProgram), m_visitor(_visitor), m_iCommandOrigin(NONE), m_isInterruptible(true)
38 Runner(ast::Exp* _theProgram, ast::RunVisitor *_visitor, command_origin_t _iCommandOrigin, bool _isInterruptible) : m_theProgram(_theProgram), m_visitor(_visitor), m_iCommandOrigin(_iCommandOrigin), m_isInterruptible(_isInterruptible)
46 ast::RunVisitor *getVisitor()
48 return m_visitor.get();
51 ast::Exp* getProgram()
56 command_origin_t getCommandOrigin()
58 return m_iCommandOrigin;
61 void setCommandOrigin(command_origin_t _origin)
63 m_iCommandOrigin = _origin;
66 bool isInterruptible()
68 return m_isInterruptible;
72 ast::Exp* m_theProgram;
73 std::unique_ptr<ast::RunVisitor> m_visitor;
74 command_origin_t m_iCommandOrigin;
75 bool m_isInterruptible;
78 // static members to manage execution
82 static int launch(void);
83 static void setRunner(Runner* _RunMe);
84 static void setCurrentRunner(Runner* _RunMe);
85 static Runner* getRunner(void);
86 static Runner* getCurrentRunner(void);
87 static bool isRunnerAvailable(void);
88 static bool isInterruptibleCommand(void);
89 static void setInterruptibleCommand(bool _isInterruptible);
90 static command_origin_t getCommandOrigin();
91 static command_origin_t getCurrentCommandOrigin();
92 static void setCurrentCommandOrigin(command_origin_t _origin);
93 static void execAndWait(ast::Exp* _theProgram, ast::RunVisitor *_visitor,
94 bool _isInterruptible, bool _isPrioritary, command_origin_t _iCommandOrigin);
95 static bool exec(ast::Exp* _theProgram, ast::RunVisitor *_visitor);
96 static void sendExecDoneSignal();
99 static std::atomic<Runner*> m_RunMe;
100 static std::atomic<Runner*> m_CurrentRunner;
101 static std::atomic<bool> m_bInterruptibleCommand;
106 void StaticRunner_launch(void);
107 int StaticRunner_isRunnerAvailable(void);
108 int StaticRunner_isInterruptibleCommand(void);
109 void StaticRunner_setInterruptibleCommand(int val);
110 command_origin_t StaticRunner_getCommandOrigin(void);
111 command_origin_t StaticRunner_getCurrentCommandOrigin(void);
112 void StaticRunner_setCurrentCommandOrigin(command_origin_t origin);
115 #endif /* !__RUNNER_HXX__ */