8edd66a994785592b4885ffa94482552486a8724
[scilab.git] / scilab / modules / ast / includes / types / threadId.hxx
1 /*
2  *  Scilab ( http://www.scilab.org/ ) - This file is part of Scilab
3  *  Copyright (C) 2008-2008 - INRIA - 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 __THREADID_HH__
14 #define __THREADID_HH__
15
16 #include "internal.hxx"
17
18 extern "C"
19 {
20 #include "Thread_Wrapper.h"
21 }
22
23 namespace types
24 {
25 class EXTERN_AST ThreadId : public InternalType
26 {
27 public :
28     ThreadId(__threadId _id, __threadKey _key);
29     virtual                 ~ThreadId();
30
31     bool                    isThreadId()
32     {
33         return true;
34     }
35     bool                    toString(std::wostringstream& ostr);
36
37     /* return type as string ( double, int, cell, list, ... )*/
38     virtual std::wstring    getTypeStr()
39     {
40         return L"ThreadId";
41     }
42     /* return type as short string ( s, i, ce, l, ... )*/
43     virtual std::wstring    getShortTypeStr()
44     {
45         return L"tid";
46     }
47     InternalType*           clone();
48
49     __threadId              getThreadId();
50     void                    setThreadId(__threadId _id);
51     __threadKey             getKey();
52     void                    setKey(__threadKey _key);
53
54     /*
55     ** Status
56     */
57     enum Status
58     {
59         Running,
60         Paused,
61         Aborted,
62         Done
63     };
64
65     Status                  getStatus();
66     void                    setStatus(Status _status);
67
68     void                    suspend();
69     void                    resume();
70     void                    abort();
71
72     void                    setInterrupt(bool _doInterrupt);
73     bool                    getInterrupt();
74
75     void                    setInterruptible(bool _isInterruptible);
76     bool                    isInterruptible();
77
78 private :
79     std::wstring            StatusToString(Status _status);
80
81 protected :
82     inline ScilabType       getType()
83     {
84         return ScilabThreadId;
85     }
86     inline ScilabId         getId()
87     {
88         return IdThreadId;
89     }
90
91
92 private :
93     __threadId              m_threadId;
94     __threadKey             m_threadKey;
95     __threadLock            m_threadLock;
96     Status                  m_threadStatus;
97     bool                    m_doInterrupt;
98     bool                    m_isInterruptible;
99 };
100 }
101 #endif /* !__THREADID_HH__ */