LIBTHEMIS
manage.h
[詳解]
1
/**********************************************************************/
10
#ifndef INC_THEMIS_MANAGE_H___
11
#define INC_THEMIS_MANAGE_H___
12
13
#include <list>
14
#include <algorithm>
15
#include <boost/utility.hpp>
16
17
18
namespace
themis
19
{
20
class
Managed;
21
class
Manager;
22
};
23
24
25
26
27
/*-----------------------------------*/
30
class
themis::Managed
: boost::noncopyable
31
{
32
friend
class
themis::Manager
;
33
34
private
:
35
themis::Manager
* mng_;
36
37
private
:
39
void
atach__(
themis::Manager
* m) {mng_ = m; }
41
void
detach__() { mng_ =
nullptr
; }
42
43
protected
:
45
Managed
() : mng_(nullptr) {}
46
47
public
:
49
virtual
~Managed
();
50
};
51
52
53
/*----------------------------------------------------*/
56
class
themis::Manager
:
public
themis::ManagerBase
57
{
58
friend
class
themis::Managed
;
59
60
protected
:
61
std::list<T_*>
a_
;
62
63
void
remove
(
themis::Managed
* obj)
64
{
65
auto
i = std::find(
a_
.begin();
a_
.end(); obj);
66
if
(i !=
a_
.end()) {
67
obj.detach__();
68
a_
.erase(i);
69
}
70
}
71
72
public
:
73
Manager
() {}
74
virtual
~Manager
();
75
77
void
add
(
Managed
* m)
78
{
79
a_
.push_back(m);
80
m->atach__(
this
);
81
}
82
84
template
<
class
FNC>
85
void
forEach
(FNC fnc) { std::for_each(
a_
.begin(),
a_
.end(), fnc); }
86
};
87
88
90
91
inline
92
themis::Managed::~Managed
()
93
{
94
if
(mng_)
95
mng_->
remove
(
this
);
96
}
97
98
99
100
101
#endif // INC_THEMIS_MANAGE_H___
themis
Definition:
except.h:17
themis::Managed::~Managed
virtual ~Managed()
解體子
Definition:
manage.h:92
themis::Manager::forEach
void forEach(FNC fnc)
被管理オブジェクトすべてに指定處理を實行
Definition:
manage.h:85
themis::Manager::Manager
Manager()
デフォルト構築子
Definition:
manage.h:73
themis::Manager::~Manager
virtual ~Manager()
解體子
themis::Manager
管理者クラス
Definition:
manage.h:56
themis::Manager::a_
std::list< T_ * > a_
Definition:
manage.h:61
themis::Managed::Managed
Managed()
デフォルト構築子
Definition:
manage.h:45
themis::Manager::remove
void remove(themis::Managed *obj)
Definition:
manage.h:63
themis::Managed
被管理者基底クラス
Definition:
manage.h:30
themis::Manager::add
void add(Managed *m)
被管理オブジェクトを追加
Definition:
manage.h:77
2018年12月26日(水) 23時19分43秒作成 - LIBTHEMIS / 構成:
1.8.14