LibreOffice
LibreOffice 5.0 SDK C/C++ API Reference
Main Page
Related Pages
Namespaces
Classes
Files
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Pages
osl
mutex.hxx
Go to the documentation of this file.
1
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
/*
3
* This file is part of the LibreOffice project.
4
*
5
* This Source Code Form is subject to the terms of the Mozilla Public
6
* License, v. 2.0. If a copy of the MPL was not distributed with this
7
* file, You can obtain one at http://mozilla.org/MPL/2.0/.
8
*
9
* This file incorporates work covered by the following license notice:
10
*
11
* Licensed to the Apache Software Foundation (ASF) under one or more
12
* contributor license agreements. See the NOTICE file distributed
13
* with this work for additional information regarding copyright
14
* ownership. The ASF licenses this file to you under the Apache
15
* License, Version 2.0 (the "License"); you may not use this file
16
* except in compliance with the License. You may obtain a copy of
17
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
18
*/
19
20
#ifndef INCLUDED_OSL_MUTEX_HXX
21
#define INCLUDED_OSL_MUTEX_HXX
22
23
#include <
osl/mutex.h
>
24
25
26
namespace
osl
27
{
30
class
SAL_WARN_UNUSED
Mutex
{
31
32
public
:
37
Mutex
()
38
{
39
mutex =
osl_createMutex
();
40
}
41
45
~Mutex
()
46
{
47
osl_destroyMutex
(mutex);
48
}
49
54
bool
acquire
()
55
{
56
return
osl_acquireMutex
(mutex);
57
}
58
63
bool
tryToAcquire
()
64
{
65
return
osl_tryToAcquireMutex
(mutex);
66
}
67
72
bool
release
()
73
{
74
return
osl_releaseMutex
(mutex);
75
}
76
83
static
Mutex
*
getGlobalMutex
()
84
{
85
return
reinterpret_cast<
Mutex
*
>
(
osl_getGlobalMutex
());
86
}
87
88
private
:
89
oslMutex
mutex;
90
97
Mutex
(
const
Mutex
&)
SAL_DELETED_FUNCTION
;
98
102
Mutex
& operator= (const
Mutex
&) SAL_DELETED_FUNCTION;
103
};
104
107
template<class T>
108
class
Guard
109
{
110
private
:
111
Guard(
const
Guard& )
SAL_DELETED_FUNCTION
;
112
const
Guard& operator = (
const
Guard& )
SAL_DELETED_FUNCTION
;
113
114
protected
:
115
T *
pT
;
116
public
:
117
120
Guard
(T * pT_) : pT(pT_)
121
{
122
pT->acquire();
123
}
124
127
Guard
(T & t) : pT(&t)
128
{
129
pT->acquire();
130
}
131
133
~Guard
()
134
{
135
pT->release();
136
}
137
};
138
141
template
<
class
T>
142
class
ClearableGuard
143
{
144
private
:
145
ClearableGuard
(
const
ClearableGuard
& )
SAL_DELETED_FUNCTION
;
146
const
ClearableGuard
& operator = (
const
ClearableGuard
& )
147
SAL_DELETED_FUNCTION
;
148
protected
:
149
T *
pT
;
150
public
:
151
154
ClearableGuard
(T * pT_) : pT(pT_)
155
{
156
pT->acquire();
157
}
158
161
ClearableGuard
(T & t) : pT(&t)
162
{
163
pT->acquire();
164
}
165
168
~ClearableGuard
()
169
{
170
if
(pT)
171
pT->release();
172
}
173
176
void
clear
()
177
{
178
if
(pT)
179
{
180
pT->release();
181
pT = NULL;
182
}
183
}
184
};
185
188
template
<
class
T >
189
class
ResettableGuard
:
public
ClearableGuard
< T >
190
{
191
private
:
192
ResettableGuard
(
ResettableGuard
&)
SAL_DELETED_FUNCTION
;
193
void
operator =(
ResettableGuard
&)
SAL_DELETED_FUNCTION
;
194
195
protected
:
196
T*
pResetT
;
197
public
:
200
ResettableGuard
( T* pT_ ) :
201
ClearableGuard
<T>( pT_ ),
202
pResetT( pT_ )
203
{}
204
207
ResettableGuard
( T& rT ) :
208
ClearableGuard
<T>( rT ),
209
pResetT( &rT )
210
{}
211
214
void
reset
()
215
{
216
if
( pResetT )
217
{
218
this->pT = pResetT;
219
this->pT->acquire();
220
}
221
}
222
};
223
224
typedef
Guard<Mutex>
MutexGuard
;
225
typedef
ClearableGuard<Mutex>
ClearableMutexGuard
;
226
typedef
ResettableGuard< Mutex >
ResettableMutexGuard
;
227
}
228
229
#endif // INCLUDED_OSL_MUTEX_HXX
230
231
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Generated by
1.8.4