DASH
0.3.0
Deferred.h
1
#ifndef DASH__DEFERRED_H__INCLUDED
2
#define DASH__DEFERRED_H__INCLUDED
3
4
#include <functional>
5
6
7
namespace
dash
{
8
9
/* TODO:
10
* Should be
11
*
12
* template <typename T, bool evaluated>
13
* class Deferred;
14
*
15
* with:
16
*
17
* constexpr Deferred<T, true>
18
* Deferred<T, false>::operator T() const {
19
* return Deferred<T, true>(gen_fun());
20
* }
21
*
22
* and:
23
*
24
* constexpr Deferred<T, true>
25
* Deferred<T, true>::operator T() const {
26
* return _value;
27
* }
28
*
29
*
30
*/
31
32
template
<
typename
T>
33
class
Deferred
{
34
35
static
T default_gen() {
36
return
T();
37
}
38
39
std::function<T()> _gen;
40
T _value;
41
bool
_initialized;
42
43
public
:
44
Deferred
()
45
: _gen(default_gen)
46
, _initialized(
false
)
47
{ }
48
49
Deferred
(std::function<T()> gen)
50
: _gen(gen)
51
, _initialized(
false
)
52
{ }
53
54
T &
get
() {
55
if
(!_initialized) {
56
_value = _gen();
57
_initialized =
true
;
58
}
59
return
_value;
60
}
61
62
operator
T() {
63
return
get
();
64
}
65
66
T & operator*() {
67
return
get
();
68
}
69
70
Deferred<T>
& operator=(
const
Deferred<T>
& other) {
71
_gen = other._gen;
72
_initialized =
false
;
73
return
*
this
;
74
}
75
};
76
77
}
// namespace dash
78
79
#endif // DASH__DEFERRED_H__INCLUDED
dash
This class is a simple memory pool which holds allocates elements of size ValueType.
Definition:
AllOf.h:8
dash::Deferred
Definition:
Deferred.h:33
tmp
tmporruphar
dash
include
dash
Deferred.h
Generated by
1.8.13