Selectable.h
1/*
2 * Copyright (C) 2008-2013 Marc Boris Duerner
3 *
4 * This library is free software; you can redistribute it and/or
5 * modify it under the terms of the GNU Lesser General Public
6 * License as published by the Free Software Foundation; either
7 * version 2.1 of the License, or (at your option) any later version.
8 *
9 * As a special exception, you may use this file as part of a free
10 * software library without restriction. Specifically, if other files
11 * instantiate templates or use macros or inline functions from this
12 * file, or you compile this file and link it with other files to
13 * produce an executable, this file does not by itself cause the
14 * resulting executable to be covered by the GNU General Public
15 * License. This exception does not however invalidate any other
16 * reasons why the executable file might be covered by the GNU Library
17 * General Public License.
18 *
19 * This library is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
22 * Lesser General Public License for more details.
23 *
24 * You should have received a copy of the GNU Lesser General Public
25 * License along with this library; if not, write to the Free Software
26 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
27 */
28
29#ifndef PT_SELECTABLE_H
30#define PT_SELECTABLE_H
31
32#include <Pt/System/Api.h>
33#include <Pt/NonCopyable.h>
34
35namespace Pt {
36
37namespace System {
38
39class EventLoop;
40class SelectableList;
41
59class PT_SYSTEM_API Selectable : protected NonCopyable
60{
61 friend class SelectableList;
62
63 public:
65 virtual ~Selectable();
66
69
71 void detach();
72
74 void cancel();
75
77 bool run();
78
81 { return _parent; }
82
84 Selectable* next()
85 { return _next; }
86
87 protected:
90
93 void post();
94
96 virtual void onAttach(EventLoop&)
97 {}
98
100 virtual void onDetach(EventLoop&)
101 {}
102
104 virtual void onCancel() = 0;
105
107 virtual bool onRun() = 0;
108
109 private:
110 EventLoop* _parent;
111 Selectable* _prev;
112 Selectable* _next;
113};
114
115} // namespace System
116
117} // namespace Pt
118
119#endif // PT_SELECTABLE_H
NonCopyable()
Default constructor.
Definition NonCopyable.h:63
Event loop of a thread or process.
Definition EventLoop.h:83
Operation that runs through an event loop.
Definition Selectable.h:60
void cancel()
Cancels all operations.
bool run()
Run operation if it is ready.
virtual bool onRun()=0
Check if ready and run.
virtual void onCancel()=0
Blocks until operation has cancelled.
Selectable()
Default Constructor.
virtual ~Selectable()
Destructor.
void setActive(EventLoop &parent)
Sets the parent loop, so that operations can be run.
virtual void onDetach(EventLoop &)
Detached from loop.
Definition Selectable.h:100
void post()
Posts this selectable to its event loop from any thread.
void detach()
Remove from event loop and cancels outstanding operations.
virtual void onAttach(EventLoop &)
Attached to loop.
Definition Selectable.h:96
EventLoop * parent() const
Returns the used event loop.
Definition Selectable.h:80
System programming
Definition Connection.h:26
Core module.
Definition Allocator.h:33