distortos  v0.7.0
object-oriented C++ RTOS for microcontrollers
ThreadIdentifier.hpp
Go to the documentation of this file.
1 
12 #ifndef INCLUDE_DISTORTOS_THREADIDENTIFIER_HPP_
13 #define INCLUDE_DISTORTOS_THREADIDENTIFIER_HPP_
14 
15 #include <cstdint>
16 
17 namespace distortos
18 {
19 
20 class Thread;
21 
22 namespace internal
23 {
24 
25 class ThreadControlBlock;
26 
27 } // namespace internal
28 
53 {
54 public:
55 
64  constexpr ThreadIdentifier() :
67  {
68 
69  }
70 
78  ThreadIdentifier(const internal::ThreadControlBlock& threadControlBlock, const uintptr_t sequenceNumber) :
79  sequenceNumber_{sequenceNumber},
80  threadControlBlock_{&threadControlBlock}
81  {
82 
83  }
84 
92  Thread* getThread() const;
93 
94 private:
95 
97  uintptr_t sequenceNumber_;
98 
101 };
102 
118 inline bool operator==(const ThreadIdentifier& left, const ThreadIdentifier& right)
119 {
120  return left.getThread() == right.getThread();
121 }
122 
137 inline bool operator!=(const ThreadIdentifier& left, const ThreadIdentifier& right)
138 {
139  return !(left == right);
140 }
141 
156 inline bool operator<(const ThreadIdentifier& left, const ThreadIdentifier& right)
157 {
158  return left.getThread() < right.getThread();
159 }
160 
175 inline bool operator>(const ThreadIdentifier& left, const ThreadIdentifier& right)
176 {
177  return right < left;
178 }
179 
194 inline bool operator<=(const ThreadIdentifier& left, const ThreadIdentifier& right)
195 {
196  return !(left > right);
197 }
198 
213 inline bool operator>=(const ThreadIdentifier& left, const ThreadIdentifier& right)
214 {
215  return !(left < right);
216 }
217 
218 } // namespace distortos
219 
220 #endif // INCLUDE_DISTORTOS_THREADIDENTIFIER_HPP_
bool operator!=(const ThreadIdentifier &left, const ThreadIdentifier &right)
ThreadIdentifier's inequality comparison operator.
Definition: ThreadIdentifier.hpp:137
constexpr ThreadIdentifier()
ThreadIdentifier's constructor.
Definition: ThreadIdentifier.hpp:64
ThreadControlBlock class is a simple description of a Thread.
Definition: ThreadControlBlock.hpp:39
uintptr_t sequenceNumber_
expected sequence number of threadControlBlock_
Definition: ThreadIdentifier.hpp:97
ThreadIdentifier(const internal::ThreadControlBlock &threadControlBlock, const uintptr_t sequenceNumber)
ThreadIdentifier's constructor.
Definition: ThreadIdentifier.hpp:78
Top-level namespace of distortos project.
Definition: buttons.hpp:33
bool operator==(const ThreadIdentifier &left, const ThreadIdentifier &right)
ThreadIdentifier's equality comparison operator.
Definition: ThreadIdentifier.hpp:118
bool operator<=(const ThreadIdentifier &left, const ThreadIdentifier &right)
ThreadIdentifier's less-than-or-equal comparison operator.
Definition: ThreadIdentifier.hpp:194
bool operator<(const ThreadIdentifier &left, const ThreadIdentifier &right)
ThreadIdentifier's less-than comparison operator.
Definition: ThreadIdentifier.hpp:156
bool operator>(const ThreadIdentifier &left, const ThreadIdentifier &right)
ThreadIdentifier's greater-than comparison operator.
Definition: ThreadIdentifier.hpp:175
const internal::ThreadControlBlock * threadControlBlock_
pointer to thread control block
Definition: ThreadIdentifier.hpp:100
ThreadIdentifier class is an identifier of thread.
Definition: ThreadIdentifier.hpp:52
Thread * getThread() const
Tries to obtain the thread represented by this identifier.
Definition: ThreadIdentifier.cpp:24
bool operator>=(const ThreadIdentifier &left, const ThreadIdentifier &right)
ThreadIdentifier's greater-than-or-equal comparison operator.
Definition: ThreadIdentifier.hpp:213