Mir
Main Page
Related Pages
Modules
Namespaces
Classes
Files
Examples
File List
File Members
All
Classes
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
shared
mir
cached_ptr.h
Go to the documentation of this file.
1
/*
2
* Copyright © 2013 Canonical Ltd.
3
*
4
* This program is free software: you can redistribute it and/or modify
5
* it under the terms of the GNU Lesser General Public License version 3 as
6
* published by the Free Software Foundation.
7
*
8
* This program is distributed in the hope that it will be useful,
9
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
* GNU Lesser General Public License for more details.
12
*
13
* You should have received a copy of the GNU Lesser General Public License
14
* along with this program. If not, see <http://www.gnu.org/licenses/>.
15
*
16
* Authored by: Robert Carr <robert.carr@canonical.com>
17
*/
18
19
#ifndef MIR_CACHED_PTR_H_
20
#define MIR_CACHED_PTR_H_
21
22
#include <functional>
23
#include <memory>
24
25
namespace
mir
26
{
27
template
<
typename
Type>
28
class
CachedPtr
29
{
30
std::weak_ptr<Type> cache;
31
CachedPtr
(
CachedPtr
const
&) =
delete
;
32
CachedPtr
& operator=(
CachedPtr
const
&) =
delete
;
33
public
:
34
CachedPtr
() =
default
;
35
36
std::shared_ptr<Type>
operator()
(std::function<std::shared_ptr<Type>()> make)
37
{
38
auto
result = cache.lock();
39
if
(!result)
40
{
41
cache = result = make();
42
}
43
return
result;
44
}
45
};
46
}
// namespace mir
47
48
#endif // MIR_CACHED_PTR_H_
Copyright © 2012,2013 Canonical Ltd.
Generated on Wed Oct 30 18:52:19 UTC 2013