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 IuU[o[(wnj^)
10
11template <class T>
12class Subscriber
13{
14public:
15 virtual void Notify(T _publishData) = 0;
16
17};
18
19
20//^̃TuXNCo[o^łȂ.
21//vectorAzzɕύXƎv.
22template <class T>
23class Store
24{
25private:
26 map<string,vector<Subscriber<T>*>> subscribers;
27
28public:
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[݂邩mF.
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[̗vf݂邩mF.
56 inline bool ToExistKeyMap(string _keyName)
57 {
58 return subscribers.count(_keyName);
59 }
60
61 //̃L[̗vf쐬.
62 inline void CreateKeyMap(string _keyName)
63 {
64 subscribers[_keyName];
65 }
66
67};
68
69template <class T>
70class Publisher
71{
72private:
73 string keyName;
74 Store<T>* store=nullptr;
75 bool isInit = false;
76
77public:
78 Result Init(Store<T>* _store,string _keyName)
79 {
80 //L[݂邩mF.
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 Qb^֐
109 string GetMyName() const
110 {
111 return keyName;
112 }
113
115 {
116 return store;
117 }
118#pragma endregion
119
120};
121
122
123
124
125#pragma region Tv
126//****** ėp̍ Subscriber hNX. ******.
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 hNX. ******.
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
Result
成否を表す.
Definition Const.h:8
@ FAIL
Definition Const.h:9
@ SUCCESS
Definition Const.h:10
Definition obu.hpp:74
Store< Args... > * store
Definition obu.hpp:77
string keyName
Definition obu.hpp:76
bool isInit
Definition obu.hpp:78
Result Init(Store< T > *_store, string _keyName)
Definition Publisher.h:78
string GetMyName() const
Definition Publisher.h:109
Store< T > * GetMyStore() const
Definition Publisher.h:114
Result Publish(T _pubData)
Definition Publisher.h:97
Definition obu.hpp:27
void CreateKeyMap(string _keyName)
Definition Publisher.h:62
void ResetSubscriber()
Definition Publisher.h:50
Result AddSubscriber(Subscriber< T > *_subscriber, string _keyName)
Definition Publisher.h:37
bool ToExistKeyMap(string _keyName)
Definition obu.hpp:59
void Publish(string _keyName, T _publishData)
Definition Publisher.h:29
map< string, vector< Subscriber< Args... > * > > subscribers
Definition obu.hpp:29
Definition obu.hpp:16
virtual void Notify(T _publishData)=0