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
93 {
94  if (mng_)
95  mng_->remove(this);
96 }
97 
98 
99 
100 
101 #endif // INC_THEMIS_MANAGE_H___
Definition: except.h:17
virtual ~Managed()
解體子
Definition: manage.h:92
void forEach(FNC fnc)
被管理オブジェクトすべてに指定處理を實行
Definition: manage.h:85
Manager()
デフォルト構築子
Definition: manage.h:73
virtual ~Manager()
解體子
管理者クラス
Definition: manage.h:56
std::list< T_ * > a_
Definition: manage.h:61
Managed()
デフォルト構築子
Definition: manage.h:45
void remove(themis::Managed *obj)
Definition: manage.h:63
被管理者基底クラス
Definition: manage.h:30
void add(Managed *m)
被管理オブジェクトを追加
Definition: manage.h:77