KisaragiLibrary
 
読み取り中…
検索中…
一致する文字列を見つけられません
obu.hpp
[詳解]
1#pragma once
2
3#include "map"
4#include "vector"
5#include "string"
6#include "Const.h"
7
8using std::map;
9using std::string;
10using std::vector;
11
12#pragma region IuU[o[(wnj^)
13
14template <class... Args>
16{
17public:
18 virtual void Notify(Args... _args) = 0;
19
20};
21
22
23//^̃TuXNCo[o^łȂ.
24//vectorAzzɕύXƎv.
25template <class... Args>
26class Store
27{
28private:
29 map<string, vector<Subscriber<Args...>*>> subscribers;
30
31public:
32 void Publish(string _keyName, Args... _args)
33 {
34 for (int i = 0; i < subscribers[_keyName].size(); i++)
35 {
36 subscribers[_keyName][i]->Notify(_args...);
37 }
38 }
39
40 inline Result AddSubscriber(Subscriber<Args...>* _subscriber, string _keyName)
41 {
42 //L[݂邩mF.
43 if (!ToExistKeyMap(_keyName))
44 {
45 return FAIL; //݂ȂA.
46 }
47
48 subscribers[_keyName].push_back(_subscriber);
49
50 return SUCCESS;
51 }
52
53 inline void ResetSubscriber()
54 {
55 subscribers.clear();
56 }
57
58 //̃L[̗vf݂邩mF.
59 inline bool ToExistKeyMap(string _keyName)
60 {
61 return subscribers.count(_keyName);
62 }
63
64 //̃L[̗vf쐬.
65 inline void CreateKeyMap(string _keyName)
66 {
67 subscribers[_keyName];
68 }
69
70};
71
72template <class... Args>
74{
75private:
76 string keyName;
77 Store<Args...>* store = nullptr;
78 bool isInit = false;
79
80public:
81 Result Init(Store<Args...>* _store, string _keyName)
82 {
83 //L[݂邩mF.
84 if (_store->ToExistKeyMap(_keyName))
85 {
86 //Ȃΐݒ肵L[ō쐬.
87 _store->CreateKeyMap(_keyName);
88 }
89
90
91
92 store = _store;
93 keyName = _keyName;
94
95 isInit = true;
96
97 return SUCCESS;
98 }
99
100 Result Publish(Args... _args)
101 {
102 if (!isInit)
103 {
104 return FAIL;
105 }
106
107 store->Publish(keyName, _args...);
108 return SUCCESS;
109 }
110
111#pragma region Qb^֐
112 string GetMyName() const
113 {
114 return keyName;
115 }
116
117 Store<Args...>* GetMyStore() const
118 {
119 return store;
120 }
121#pragma endregion
122
123};
124
125
126
127
128#pragma region Tv
129//****** ėp̍ Subscriber hNX. ******.
130//template <class Args>
131//class A : public Subscriber<Args>
132//{
133//public:
134// void Notify(Args _publishData) override
135// {
136// cout << _publishData << endl;
137// }
138//
139//
140//};
141//
142//A<string> a;
143
144//****** ̌^ Subscriber hNX. ******.
145//class A : public Subscriber<string>
146//{
147//public:
148// void Notify(string _publishData) override
149// {
150// cout << _publishData << endl;
151// }
152//
153//
154//};
155//
156//
157//A a;
158
159/*
160* #include "Publisher.h"
161*
162* Store<string>strStore; //p̂A
163*
164* Publisher<string>strPub; //p̂A
165*
166*
167* int WINMAIN()
168* {
169* strPub.Init(&strStore, "aaa"); //gMStoreKeyo^
170*
171* strStore.AddSubscriber(&a, "aaa"); //KeyɃTuXNCo[o^
172*
173* strPub.Publish("test"); //bZ[W𑗐M
174* }
175*
176*/
177
178#pragma endregion
179
180#pragma endregion
Result
成否を表す.
Definition Const.h:8
@ FAIL
Definition Const.h:9
@ SUCCESS
Definition Const.h:10
std::string string
Definition KisaragiFacade.h:25
Definition obu.hpp:74
Store< Args... > * GetMyStore() const
Definition obu.hpp:117
Store< Args... > * store
Definition obu.hpp:77
string keyName
Definition obu.hpp:76
Result Init(Store< Args... > *_store, string _keyName)
Definition obu.hpp:81
bool isInit
Definition obu.hpp:78
string GetMyName() const
Definition obu.hpp:112
Result Publish(Args... _args)
Definition obu.hpp:100
Definition obu.hpp:27
void CreateKeyMap(string _keyName)
Definition obu.hpp:65
void ResetSubscriber()
Definition obu.hpp:53
Result AddSubscriber(Subscriber< Args... > *_subscriber, string _keyName)
Definition obu.hpp:40
void Publish(string _keyName, Args... _args)
Definition obu.hpp:32
bool ToExistKeyMap(string _keyName)
Definition obu.hpp:59
map< string, vector< Subscriber< Args... > * > > subscribers
Definition obu.hpp:29
Definition obu.hpp:16
virtual void Notify(Args... _args)=0