blocxx
src
blocxx
SelectEngine.hpp
Go to the documentation of this file.
1
/*******************************************************************************
2
* Copyright (C) 2005, Vintela, Inc. All rights reserved.
3
* Copyright (C) 2006, Novell, Inc. All rights reserved.
4
*
5
* Redistribution and use in source and binary forms, with or without
6
* modification, are permitted provided that the following conditions are met:
7
*
8
* * Redistributions of source code must retain the above copyright notice,
9
* this list of conditions and the following disclaimer.
10
* * Redistributions in binary form must reproduce the above copyright
11
* notice, this list of conditions and the following disclaimer in the
12
* documentation and/or other materials provided with the distribution.
13
* * Neither the name of
14
* Vintela, Inc.,
15
* nor Novell, Inc.,
16
* nor the names of its contributors or employees may be used to
17
* endorse or promote products derived from this software without
18
* specific prior written permission.
19
*
20
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
21
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE
24
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
25
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
26
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
27
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
28
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
29
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
30
* POSSIBILITY OF SUCH DAMAGE.
31
*******************************************************************************/
32
33
39
#ifndef BLOCXX_SELECT_ENGINE_HPP_
40
#define BLOCXX_SELECT_ENGINE_HPP_
41
#include "blocxx/BLOCXX_config.h"
42
#include "
blocxx/SelectableIFC.hpp
"
43
#include "
blocxx/SelectableCallbackIFC.hpp
"
44
#include "
blocxx/SortedVectorMap.hpp
"
45
#include "
blocxx/Exception.hpp
"
46
47
// The classes and functions defined in this file are not meant for general
48
// use, they are internal implementation details. They may change at any time.
49
50
namespace
BLOCXX_NAMESPACE
51
{
52
53
BLOCXX_DECLARE_APIEXCEPTION
(Select, BLOCXX_COMMON_API)
54
class BLOCXX_COMMON_API
SelectEngine
55
{
56
public
:
61
void
addSelectableObject(
const
Select_t
& obj,
62
const
SelectableCallbackIFCRef
&
cb
,
SelectableCallbackIFC::EEventType
eventType);
64
bool
removeSelectableObject(
const
Select_t
& obj,
SelectableCallbackIFC::EEventType
eventType);
65
void
go(
const
Timeout
& timeout);
// Throws SelectException on error
66
void
stop();
67
private
:
68
69
struct
Data
70
{
71
Data
(
const
SelectableCallbackIFCRef
& callback_,
72
SelectableCallbackIFC::EEventType
eventType_)
73
: callback(callback_)
74
, eventType(eventType_)
75
{
76
}
77
78
SelectableCallbackIFCRef
callback
;
79
SelectableCallbackIFC::EEventType
eventType
;
80
81
};
82
83
SortedVectorMap<Select_t, Data>
m_table
;
// the key is Data::selectObj->getSelectObj()
84
85
bool
m_stopFlag
;
86
};
87
88
class
BLOCXX_COMMON_API
SelectEngineStopper
:
public
SelectableCallbackIFC
89
{
90
public
:
91
SelectEngineStopper
(
SelectEngine
& engine);
92
protected
:
93
virtual
void
doSelected(
Select_t
& selectedObject,
EEventType
eventType);
94
private
:
95
SelectEngine
&
m_engine
;
96
};
97
98
}
// end namespace BLOCXX_NAMESPACE
99
100
#endif
Exception.hpp
BLOCXX_DECLARE_APIEXCEPTION
#define BLOCXX_DECLARE_APIEXCEPTION(NAME, LINKAGE_SPEC)
Declare a new exception class named <NAME>Exception that derives from Exception This macro is typical...
Definition
Exception.hpp:396
SelectableCallbackIFC.hpp
SelectableIFC.hpp
SortedVectorMap.hpp
cb
ThreadDoneCallbackRef cb
Definition
Thread.cpp:84
BLOCXX_NAMESPACE::IntrusiveReference< SelectableCallbackIFC >
BLOCXX_NAMESPACE::SelectEngine
Definition
SelectEngine.hpp:55
BLOCXX_NAMESPACE::SelectEngine::m_stopFlag
bool m_stopFlag
Definition
SelectEngine.hpp:85
BLOCXX_NAMESPACE::SelectEngine::m_table
SortedVectorMap< Select_t, Data > m_table
Definition
SelectEngine.hpp:83
BLOCXX_NAMESPACE::SelectEngineStopper
Definition
SelectEngine.hpp:89
BLOCXX_NAMESPACE::SelectEngineStopper::m_engine
SelectEngine & m_engine
Definition
SelectEngine.hpp:95
BLOCXX_NAMESPACE::SelectableCallbackIFC
Definition
SelectableCallbackIFC.hpp:53
BLOCXX_NAMESPACE::SelectableCallbackIFC::EEventType
EEventType
Definition
SelectableCallbackIFC.hpp:57
BLOCXX_NAMESPACE::SortedVectorMap
Definition
SortedVectorMap.hpp:98
BLOCXX_NAMESPACE::Timeout
A timeout can be absolute, which means that it will happen at the specified DateTime.
Definition
Timeout.hpp:56
BLOCXX_NAMESPACE
Taken from RFC 1321.
Definition
AppenderLogger.cpp:48
BLOCXX_NAMESPACE::Select_t
int Select_t
Definition
NetworkTypes.hpp:146
BLOCXX_NAMESPACE::SelectEngine::Data
Definition
SelectEngine.hpp:70
BLOCXX_NAMESPACE::SelectEngine::Data::eventType
SelectableCallbackIFC::EEventType eventType
Definition
SelectEngine.hpp:79
BLOCXX_NAMESPACE::SelectEngine::Data::callback
SelectableCallbackIFCRef callback
Definition
SelectEngine.hpp:78
BLOCXX_NAMESPACE::SelectEngine::Data::Data
Data(const SelectableCallbackIFCRef &callback_, SelectableCallbackIFC::EEventType eventType_)
Definition
SelectEngine.hpp:71
Generated by
1.12.0