KisaragiLibrary
èªã�¿å�–りä¸â€¦
検索ä¸â€¦
一致ã�™ã‚‹æ–‡å—列を見ã�¤ã�‘られã�¾ã�›ã‚“
obu.hpp
[詳解]
1
#pragma once
2
3
#include "map"
4
#include "vector"
5
#include "string"
6
#include "
Const.h
"
7
8
using
std::map;
9
using
std::string;
10
using
std::vector;
11
12
#pragma region ƒIƒuƒU�[ƒo�[(�w“ÇŒ^)
13
14
template
<
class
... Args>
15
class
Subscriber
16
{
17
public
:
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‚¤.
25
template
<
class
... Args>
26
class
Store
27
{
28
private
:
29
map<
string
, vector<
Subscriber
<Args...>*>>
subscribers
;
30
31
public
:
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
72
template
<
class
... Args>
73
class
Publisher
74
{
75
private
:
76
string
keyName
;
77
Store
<Args...>*
store
=
nullptr
;
78
bool
isInit
=
false
;
79
80
public
:
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
Const.h
Result
Result
��を表�.
Definition
Const.h:8
FAIL
@ FAIL
Definition
Const.h:9
SUCCESS
@ SUCCESS
Definition
Const.h:10
string
std::string string
Definition
KisaragiFacade.h:25
Publisher
Definition
obu.hpp:74
Publisher::GetMyStore
Store< Args... > * GetMyStore() const
Definition
obu.hpp:117
Publisher::store
Store< Args... > * store
Definition
obu.hpp:77
Publisher::keyName
string keyName
Definition
obu.hpp:76
Publisher::Init
Result Init(Store< Args... > *_store, string _keyName)
Definition
obu.hpp:81
Publisher::isInit
bool isInit
Definition
obu.hpp:78
Publisher::GetMyName
string GetMyName() const
Definition
obu.hpp:112
Publisher::Publish
Result Publish(Args... _args)
Definition
obu.hpp:100
Store
Definition
obu.hpp:27
Store::CreateKeyMap
void CreateKeyMap(string _keyName)
Definition
obu.hpp:65
Store::ResetSubscriber
void ResetSubscriber()
Definition
obu.hpp:53
Store::AddSubscriber
Result AddSubscriber(Subscriber< Args... > *_subscriber, string _keyName)
Definition
obu.hpp:40
Store::Publish
void Publish(string _keyName, Args... _args)
Definition
obu.hpp:32
Store::ToExistKeyMap
bool ToExistKeyMap(string _keyName)
Definition
obu.hpp:59
Store::subscribers
map< string, vector< Subscriber< Args... > * > > subscribers
Definition
obu.hpp:29
Subscriber
Definition
obu.hpp:16
Subscriber::Notify
virtual void Notify(Args... _args)=0
src
obu.hpp
構築:
1.13.2