vrpn
07.35
Virtual Reality Peripheral Network
Toggle main menu visibility
Loading...
Searching...
No Matches
vrpn_MainloopObject.h
Go to the documentation of this file.
1
13
14
// Copyright Iowa State University 2011.
15
// Distributed under the Boost Software License, Version 1.0.
16
// (See accompanying file LICENSE_1_0.txt or copy at
17
// http://www.boost.org/LICENSE_1_0.txt)
18
19
#ifndef INCLUDED_vrpn_MainloopObject_h_GUID_38f638e4_40e0_4c6d_bebc_21c463794b88
20
#define INCLUDED_vrpn_MainloopObject_h_GUID_38f638e4_40e0_4c6d_bebc_21c463794b88
21
22
// Internal Includes
23
#include "
vrpn_Connection.h
"
24
25
// Library/third-party includes
26
// - none
27
28
// Standard includes
29
#include <stdexcept>
30
31
#ifdef VRPN_MAINLOOPOBJECT_VERBOSE
32
#include <iostream>
33
#define VRPN_MAINLOOPOBJECT_MSG(_x) \
34
std::cout << __FILE__ << ":" << __LINE__ << ": " << _x << std::endl;
35
#else
36
#define VRPN_MAINLOOPOBJECT_MSG(_x)
37
#endif
38
39
class
VRPN_API
vrpn_Connection
;
40
43
class
vrpn_MainloopObject
{
44
public
:
46
struct
CannotWrapNullPointerIntoMainloopObject
:
public
std::logic_error {
47
CannotWrapNullPointerIntoMainloopObject
()
48
: std::logic_error(
49
"Cannot wrap a null pointer into a vrpn_MainloopObject!"
)
50
{
51
}
52
};
53
55
virtual
~vrpn_MainloopObject
() {}
56
58
virtual
void
mainloop
() = 0;
59
62
virtual
bool
broken
() = 0;
63
65
template
<
class
T>
static
vrpn_MainloopObject
*
wrap
(T o);
66
69
template
<
class
T>
static
vrpn_MainloopObject
*
wrap
(T o,
bool
owner);
70
71
protected
:
74
virtual
void
*
_returnContained
()
const
= 0;
75
vrpn_MainloopObject
() {}
76
friend
bool
operator==
(
vrpn_MainloopObject
const
&lhs,
77
vrpn_MainloopObject
const
&rhs);
78
friend
bool
operator!=
(
vrpn_MainloopObject
const
&lhs,
79
vrpn_MainloopObject
const
&rhs);
80
};
81
85
inline
bool
operator==
(
vrpn_MainloopObject
const
&lhs,
86
vrpn_MainloopObject
const
&rhs)
87
{
88
return
lhs.
_returnContained
() == rhs.
_returnContained
();
89
}
90
91
inline
bool
operator!=
(
vrpn_MainloopObject
const
&lhs,
92
vrpn_MainloopObject
const
&rhs)
93
{
94
return
lhs.
_returnContained
() == rhs.
_returnContained
();
95
}
96
97
99
namespace
detail
{
100
template
<
class
T>
class
TypedMainloopObject;
101
104
template
<
class
T>
105
class
TypedMainloopObject
<T *> :
public
vrpn_MainloopObject
{
106
public
:
107
TypedMainloopObject
(T *o,
bool
do_delete =
true
)
108
:
_instance
(o)
109
,
_do_delete
(do_delete)
110
{
111
if
(!o) {
112
throw
vrpn_MainloopObject::
113
CannotWrapNullPointerIntoMainloopObject();
114
}
115
VRPN_MAINLOOPOBJECT_MSG
(
"Wrapping vrpn object "
<< o)
116
}
117
virtual
~TypedMainloopObject
()
118
{
119
if
(
_do_delete
) {
120
try
{
121
delete
_instance
;
122
}
catch
(...) {
123
fprintf(stderr,
"TypedMainloopObject::~TypedMainloopObject: delete failed\n"
);
124
return
;
125
}
126
VRPN_MAINLOOPOBJECT_MSG
(
"Deleted contained vrpn object "
127
<<
_instance
)
128
}
129
else
{
130
VRPN_MAINLOOPOBJECT_MSG
(
"NOT deleting contained vrpn object "
131
<<
_instance
)
132
}
133
}
134
135
virtual
void
mainloop
() {
_instance
->mainloop(); }
136
137
virtual
bool
broken
() {
return
(
_instance
->connectionPtr() == NULL); }
138
139
protected
:
140
virtual
void
*
_returnContained
()
const
{
return
_instance
; }
141
T *
_instance
;
142
bool
_do_delete
;
143
};
144
146
template
<>
147
class
TypedMainloopObject
<
vrpn_Connection
*> :
public
vrpn_MainloopObject
{
148
public
:
149
TypedMainloopObject
(
vrpn_Connection
*o)
150
:
_instance
(o)
151
{
152
if
(!o) {
153
throw
vrpn_MainloopObject::
154
CannotWrapNullPointerIntoMainloopObject();
155
}
156
VRPN_MAINLOOPOBJECT_MSG
(
"Wrapping vrpn connection "
<< o)
157
}
158
virtual
~TypedMainloopObject
()
159
{
160
VRPN_MAINLOOPOBJECT_MSG
(
"Unreferencing contained vrpn connection "
161
<<
_instance
)
162
_instance
->removeReference();
163
}
164
165
virtual
void
mainloop
() {
_instance
->mainloop(); }
166
167
virtual
bool
broken
() {
return
(!
_instance
->doing_okay()); }
168
169
protected
:
170
virtual
void
*
_returnContained
()
const
{
return
_instance
; }
171
vrpn_Connection
*
_instance
;
172
};
173
174
}
// end of namespace detail
175
176
template
<
class
T>
inline
vrpn_MainloopObject
*
vrpn_MainloopObject::wrap
(T o)
177
{
178
vrpn_MainloopObject
*ret = NULL;
179
try
{
180
ret =
new
detail::TypedMainloopObject<T>
(o);
181
}
catch
(...) {}
182
return
ret;
183
}
184
185
template
<
class
T>
186
inline
vrpn_MainloopObject
*
vrpn_MainloopObject::wrap
(T o,
bool
owner)
187
{
188
vrpn_MainloopObject
*ret = NULL;
189
try
{
190
ret =
new
detail::TypedMainloopObject<T>
(o, owner);
191
}
catch
(...) { }
192
return
ret;
193
}
194
195
#endif
// INCLUDED_vrpn_MainloopObject_h_GUID_38f638e4_40e0_4c6d_bebc_21c463794b88
detail::TypedMainloopObject< T * >::broken
virtual bool broken()
Checks the connectionPtr() for the VRPN object to make sure it is not NULL.
Definition
vrpn_MainloopObject.h:137
detail::TypedMainloopObject< T * >::_instance
T * _instance
Definition
vrpn_MainloopObject.h:141
detail::TypedMainloopObject< T * >::_returnContained
virtual void * _returnContained() const
Internal function to return a typeless pointer of the contained object, for comparison purposes.
Definition
vrpn_MainloopObject.h:140
detail::TypedMainloopObject< T * >::mainloop
virtual void mainloop()
The mainloop function: the primary thing we look for in a VRPN object.
Definition
vrpn_MainloopObject.h:135
detail::TypedMainloopObject< T * >::_do_delete
bool _do_delete
Definition
vrpn_MainloopObject.h:142
detail::TypedMainloopObject< T * >::~TypedMainloopObject
virtual ~TypedMainloopObject()
Definition
vrpn_MainloopObject.h:117
detail::TypedMainloopObject< T * >::TypedMainloopObject
TypedMainloopObject(T *o, bool do_delete=true)
Definition
vrpn_MainloopObject.h:107
detail::TypedMainloopObject< vrpn_Connection * >::mainloop
virtual void mainloop()
The mainloop function: the primary thing we look for in a VRPN object.
Definition
vrpn_MainloopObject.h:165
detail::TypedMainloopObject< vrpn_Connection * >::_instance
vrpn_Connection * _instance
Definition
vrpn_MainloopObject.h:171
detail::TypedMainloopObject< vrpn_Connection * >::broken
virtual bool broken()
Checks the connectionPtr() for the VRPN object to make sure it is not NULL.
Definition
vrpn_MainloopObject.h:167
detail::TypedMainloopObject< vrpn_Connection * >::_returnContained
virtual void * _returnContained() const
Internal function to return a typeless pointer of the contained object, for comparison purposes.
Definition
vrpn_MainloopObject.h:170
detail::TypedMainloopObject< vrpn_Connection * >::~TypedMainloopObject
virtual ~TypedMainloopObject()
Definition
vrpn_MainloopObject.h:158
detail::TypedMainloopObject< vrpn_Connection * >::TypedMainloopObject
TypedMainloopObject(vrpn_Connection *o)
Definition
vrpn_MainloopObject.h:149
detail::TypedMainloopObject
Definition
vrpn_ConnectionPtr.h:226
vrpn_Connection
Generic connection class not specific to the transport mechanism.
Definition
vrpn_Connection.h:561
vrpn_MainloopObject
An interface for all VRPN objects that have a "mainloop" method. Not instantiated directly: use vrpn_...
Definition
vrpn_MainloopObject.h:43
vrpn_MainloopObject::~vrpn_MainloopObject
virtual ~vrpn_MainloopObject()
Destructor.
Definition
vrpn_MainloopObject.h:55
vrpn_MainloopObject::broken
virtual bool broken()=0
Checks the connectionPtr() for the VRPN object to make sure it is not NULL.
vrpn_MainloopObject::wrap
static vrpn_MainloopObject * wrap(T o)
Templated wrapping function.
Definition
vrpn_MainloopObject.h:176
vrpn_MainloopObject::mainloop
virtual void mainloop()=0
The mainloop function: the primary thing we look for in a VRPN object.
vrpn_MainloopObject::operator!=
friend bool operator!=(vrpn_MainloopObject const &lhs, vrpn_MainloopObject const &rhs)
Definition
vrpn_MainloopObject.h:91
vrpn_MainloopObject::vrpn_MainloopObject
vrpn_MainloopObject()
Definition
vrpn_MainloopObject.h:75
vrpn_MainloopObject::_returnContained
virtual void * _returnContained() const =0
Internal function to return a typeless pointer of the contained object, for comparison purposes.
vrpn_MainloopObject::operator==
friend bool operator==(vrpn_MainloopObject const &lhs, vrpn_MainloopObject const &rhs)
Definition
vrpn_MainloopObject.h:85
detail
Namespace enclosing internal implementation details.
Definition
vrpn_ConnectionPtr.h:225
vrpn_MainloopObject::CannotWrapNullPointerIntoMainloopObject::CannotWrapNullPointerIntoMainloopObject
CannotWrapNullPointerIntoMainloopObject()
Definition
vrpn_MainloopObject.h:47
VRPN_API
#define VRPN_API
Definition
vrpn_Configure.h:648
vrpn_Connection.h
VRPN_MAINLOOPOBJECT_MSG
#define VRPN_MAINLOOPOBJECT_MSG(_x)
Definition
vrpn_MainloopObject.h:36
vrpn_MainloopObject.h
Generated by
1.17.0