El Octavio  1.0
This is a video game about adventures.
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
Thread.inl
Go to the documentation of this file.
1
2//
3// SFML - Simple and Fast Multimedia Library
4// Copyright (C) 2007-2018 Laurent Gomila (laurent@sfml-dev.org)
5//
6// This software is provided 'as-is', without any express or implied warranty.
7// In no event will the authors be held liable for any damages arising from the use of this software.
8//
9// Permission is granted to anyone to use this software for any purpose,
10// including commercial applications, and to alter it and redistribute it freely,
11// subject to the following restrictions:
12//
13// 1. The origin of this software must not be misrepresented;
14// you must not claim that you wrote the original software.
15// If you use this software in a product, an acknowledgment
16// in the product documentation would be appreciated but is not required.
17//
18// 2. Altered source versions must be plainly marked as such,
19// and must not be misrepresented as being the original software.
20//
21// 3. This notice may not be removed or altered from any source distribution.
22//
24
25namespace priv
26{
27// Base class for abstract thread functions
29{
30 virtual ~ThreadFunc() {}
31 virtual void run() = 0;
32};
33
34// Specialization using a functor (including free functions) with no argument
35template <typename T>
37{
38 ThreadFunctor(T functor) : m_functor(functor) {}
39 virtual void run() {m_functor();}
41};
42
43// Specialization using a functor (including free functions) with one argument
44template <typename F, typename A>
46{
47 ThreadFunctorWithArg(F function, A arg) : m_function(function), m_arg(arg) {}
48 virtual void run() {m_function(m_arg);}
51};
52
53// Specialization using a member function
54template <typename C>
56{
57 ThreadMemberFunc(void(C::*function)(), C* object) : m_function(function), m_object(object) {}
58 virtual void run() {(m_object->*m_function)();}
59 void(C::*m_function)();
61};
62
63} // namespace priv
64
65
67template <typename F>
68Thread::Thread(F functor) :
69m_impl (NULL),
70m_entryPoint(new priv::ThreadFunctor<F>(functor))
71{
72}
73
74
76template <typename F, typename A>
77Thread::Thread(F function, A argument) :
78m_impl (NULL),
79m_entryPoint(new priv::ThreadFunctorWithArg<F, A>(function, argument))
80{
81}
82
83
85template <typename C>
86Thread::Thread(void(C::*function)(), C* object) :
87m_impl (NULL),
88m_entryPoint(new priv::ThreadMemberFunc<C>(function, object))
89{
90}
Thread(F function)
Construct the thread from a functor with no argument.
Definition: Thread.inl:26
virtual ~ThreadFunc()
Definition: Thread.inl:30
virtual void run()=0
ThreadFunctor(T functor)
Definition: Thread.inl:38
virtual void run()
Definition: Thread.inl:39
virtual void run()
Definition: Thread.inl:48
ThreadFunctorWithArg(F function, A arg)
Definition: Thread.inl:47
void(C::* m_function)()
Definition: Thread.inl:59
virtual void run()
Definition: Thread.inl:58
ThreadMemberFunc(void(C::*function)(), C *object)
Definition: Thread.inl:57