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 ƒIƒuƒU�[ƒo�[(�w“ÇŒ^)
13
14template <class... Args>
16{
17public:
18 virtual void Notify(Args... _args) = 0;
19
20};
21
22
23//“¯‚¶Œ^‚̃TƒuƒXƒNƒ‰ƒCƒo�[‚µ‚©“o˜^‚Å‚«‚È‚¢.
24//vector‚ð˜A‘z”z—ñ‚É•Ï�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�[‚ª‘¶�Ý‚·‚é‚©Šm”F.
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�[‚Ì—v‘f‚ª‘¶�Ý‚·‚é‚©Šm”F.
59 inline bool ToExistKeyMap(string _keyName)
60 {
61 return subscribers.count(_keyName);
62 }
63
64 //ˆø�”‚̃L�[‚Ì—v‘f‚ð�ì�¬.
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�[‚ª‘¶�Ý‚·‚é‚©Šm”F.
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 ƒQƒbƒ^ŠÖ�”
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 ƒTƒ“ƒvƒ‹
129//****** ”Ä—p�«‚Ì�‚‚¢ Subscriber ”h�¶ƒNƒ‰ƒX. ******.
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 ”h�¶ƒNƒ‰ƒX. ******.
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"); //Ž©�g‚ª‘—�M‚·‚éStore‚ÆKey‚ð“o˜^
170*
171* strStore.AddSubscriber(&a, "aaa"); //Key‚ɃTƒuƒXƒNƒ‰ƒCƒo�[‚ð“o˜^
172*
173* strPub.Publish("test"); //ƒ�ƒbƒZ�[ƒ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