Lunchbox
1.8.0
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
install
include
lunchbox
lockable.h
1
2
/* Copyright (c) 2009-2012, Stefan Eilemann <eile@equalizergraphics.com>
3
*
4
* This library is free software; you can redistribute it and/or modify it under
5
* the terms of the GNU Lesser General Public License version 2.1 as published
6
* by the Free Software Foundation.
7
*
8
* This library is distributed in the hope that it will be useful, but WITHOUT
9
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
10
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
11
* details.
12
*
13
* You should have received a copy of the GNU Lesser General Public License
14
* along with this library; if not, write to the Free Software Foundation, Inc.,
15
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
16
*/
17
18
#ifndef LUNCHBOX_LOCKABLE_H
19
#define LUNCHBOX_LOCKABLE_H
20
21
#include <
lunchbox/log.h
>
// used inline
22
#include <lunchbox/nonCopyable.h>
// base class
23
#include <iostream>
24
25
namespace
lunchbox
26
{
32
template
<
class
D,
class
L = Lock >
class
Lockable
:
public
NonCopyable
33
{
34
public
:
36
explicit
Lockable
() {}
37
39
explicit
Lockable
(
const
D& value ) : data( value ) {}
40
42
template
<
class
P1 >
Lockable
(
const
P1& p1 ) : data( p1 ) {}
43
45
D*
operator->
() {
return
&data; }
46
48
const
D*
operator->
()
const
{
return
&data; }
49
51
D&
operator *
() {
return
data; }
52
54
const
D&
operator*
()
const
{
return
data; }
55
57
bool
operator ==
(
const
D& rhs )
const
{
return
( data == rhs ); }
58
60
Lockable
&
operator =
(
const
D& rhs ) { data = rhs;
return
*
this
; }
61
62
D data;
63
mutable
L lock;
64
};
65
67
template
<
class
D,
class
L >
68
inline
std::ostream&
operator <<
( std::ostream& os,
69
const
Lockable<D, L>
& l )
70
{
71
os <<
disableFlush
<<
"<"
<< l.lock.isSet() <<
" "
<< l.data <<
">"
72
<<
enableFlush
;
73
return
os;
74
}
75
}
76
#endif // LUNCHBOX_LOCKABLE_H
Generated on Thu Jun 27 2013 13:28:50 for Lunchbox by
1.8.1.2