KisaragiLibrary
èªã�¿å�–りä¸â€¦
検索ä¸â€¦
一致ã�™ã‚‹æ–‡å—列を見ã�¤ã�‘られã�¾ã�›ã‚“
Publisher.h
[詳解]
1
#pragma once
2
3
#include "map"
4
#include "vector"
5
#include "string"
6
#include "
Const.h
"
7
8
9
#pragma region ƒIƒuƒU�[ƒo�[(�w“ÇŒ^)
10
11
template
<
class
T>
12
class
Subscriber
13
{
14
public
:
15
virtual
void
Notify
(T _publishData) = 0;
16
17
};
18
19
20
//“¯‚¶Œ^‚̃TƒuƒXƒNƒ‰ƒCƒo�[‚µ‚©“o˜^‚Å‚«‚È‚¢.
21
//vector‚ð˜A‘z”z—ñ‚É•Ï�X‚µ‚½•û‚ª‚¢‚¢‚ÆŽv‚¤.
22
template
<
class
T>
23
class
Store
24
{
25
private
:
26
map<string,vector<Subscriber<T>*>>
subscribers
;
27
28
public
:
29
void
Publish
(
string
_keyName,T _publishData)
30
{
31
for
(
int
i = 0; i <
subscribers
[_keyName].size(); i++)
32
{
33
subscribers
[_keyName][i]->Notify(_publishData);
34
}
35
}
36
37
inline
Result
AddSubscriber
(
Subscriber<T>
* _subscriber,
string
_keyName)
38
{
39
//ƒL�[‚ª‘¶�Ý‚·‚é‚©Šm”F.
40
if
(!
ToExistKeyMap
(_keyName))
41
{
42
return
FAIL
;
//‘¶�Ý‚µ‚È‚©‚Á‚½‚ç‹A‚é.
43
}
44
45
subscribers
[_keyName].push_back(_subscriber);
46
47
return
SUCCESS
;
48
}
49
50
inline
void
ResetSubscriber
()
51
{
52
subscribers
.clear();
53
}
54
55
//ˆø�”‚̃L�[‚Ì—v‘f‚ª‘¶�Ý‚·‚é‚©Šm”F.
56
inline
bool
ToExistKeyMap
(
string
_keyName)
57
{
58
return
subscribers
.count(_keyName);
59
}
60
61
//ˆø�”‚̃L�[‚Ì—v‘f‚ð�ì�¬.
62
inline
void
CreateKeyMap
(
string
_keyName)
63
{
64
subscribers
[_keyName];
65
}
66
67
};
68
69
template
<
class
T>
70
class
Publisher
71
{
72
private
:
73
string
keyName
;
74
Store<T>
*
store
=
nullptr
;
75
bool
isInit
=
false
;
76
77
public
:
78
Result
Init
(
Store<T>
* _store,
string
_keyName)
79
{
80
//ƒL�[‚ª‘¶�Ý‚·‚é‚©Šm”F.
81
if
(_store->
ToExistKeyMap
(_keyName))
82
{
83
//‚È‚¯‚ê‚Î�ݒ肵‚½ƒL�[‚Å�ì�¬.
84
_store->
CreateKeyMap
(_keyName);
85
}
86
87
88
89
store
= _store;
90
keyName
= _keyName;
91
92
isInit
=
true
;
93
94
return
SUCCESS
;
95
}
96
97
Result
Publish
(T _pubData)
98
{
99
if
(!
isInit
)
100
{
101
return
FAIL
;
102
}
103
104
store
->Publish(
keyName
, _pubData);
105
return
SUCCESS
;
106
}
107
108
#pragma region ƒQƒbƒ^ŠÖ�”
109
string
GetMyName
()
const
110
{
111
return
keyName
;
112
}
113
114
Store<T>
*
GetMyStore
()
const
115
{
116
return
store
;
117
}
118
#pragma endregion
119
120
};
121
122
123
124
125
#pragma region ƒTƒ“ƒvƒ‹
126
//****** ”Ä—p�«‚Ì�‚‚¢ Subscriber ”h�¶ƒNƒ‰ƒX. ******.
127
//template <class T>
128
//class A : public Subscriber<T>
129
//{
130
//public:
131
// void Notify(T _publishData) override
132
// {
133
// cout << _publishData << endl;
134
// }
135
//
136
//
137
//};
138
//
139
//A<string> a;
140
141
//****** “Á’è‚ÌŒ^‚Ì Subscriber ”h�¶ƒNƒ‰ƒX. ******.
142
//class A : public Subscriber<string>
143
//{
144
//public:
145
// void Notify(string _publishData) override
146
// {
147
// cout << _publishData << endl;
148
// }
149
//
150
//
151
//};
152
//
153
//
154
//A a;
155
156
/*
157
* #include "Publisher.h"
158
*
159
* Store<string>strStore; //Œp�³‚·‚é‚Ì‚àƒAƒŠ
160
*
161
* Publisher<string>strPub; //Œp�³‚·‚é‚Ì‚àƒAƒŠ
162
*
163
*
164
* int WINMAIN(—ª)
165
* {
166
* strPub.Init(&strStore, "aaa");
167
*
168
* strStore.AddSubscriber(&a, "aaa");
169
*
170
* strPub.Publish("test");
171
* }
172
*
173
*/
174
175
#pragma endregion
176
177
#pragma endregion
Const.h
Result
Result
��を表�.
Definition
Const.h:8
FAIL
@ FAIL
Definition
Const.h:9
SUCCESS
@ SUCCESS
Definition
Const.h:10
Publisher
Definition
obu.hpp:74
Publisher::store
Store< Args... > * store
Definition
obu.hpp:77
Publisher::keyName
string keyName
Definition
obu.hpp:76
Publisher::isInit
bool isInit
Definition
obu.hpp:78
Publisher::Init
Result Init(Store< T > *_store, string _keyName)
Definition
Publisher.h:78
Publisher::GetMyName
string GetMyName() const
Definition
Publisher.h:109
Publisher::GetMyStore
Store< T > * GetMyStore() const
Definition
Publisher.h:114
Publisher::Publish
Result Publish(T _pubData)
Definition
Publisher.h:97
Store
Definition
obu.hpp:27
Store::CreateKeyMap
void CreateKeyMap(string _keyName)
Definition
Publisher.h:62
Store::ResetSubscriber
void ResetSubscriber()
Definition
Publisher.h:50
Store::AddSubscriber
Result AddSubscriber(Subscriber< T > *_subscriber, string _keyName)
Definition
Publisher.h:37
Store::ToExistKeyMap
bool ToExistKeyMap(string _keyName)
Definition
obu.hpp:59
Store::Publish
void Publish(string _keyName, T _publishData)
Definition
Publisher.h:29
Store::subscribers
map< string, vector< Subscriber< Args... > * > > subscribers
Definition
obu.hpp:29
Subscriber
Definition
obu.hpp:16
Subscriber::Notify
virtual void Notify(T _publishData)=0
src
Publisher.h
構築:
1.13.2