Skip to content

Commit d59ca1f

Browse files
committed
ai perf: more
1 parent eab05b4 commit d59ca1f

File tree

5 files changed

+23
-30
lines changed

5 files changed

+23
-30
lines changed

src/domino/FreeHdlrDomino.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -100,9 +100,9 @@ void FreeHdlrDomino<aDominoType>::triggerHdlr_(const SharedMsgCB& aValidHdlr, co
100100
HID("(FreeHdlrDom) trigger a call-then-rm msg for en=" << this->evName_(aValidEv));
101101
this->msgSelf_->newMsgOK(
102102
[this, aValidEv, weakHdlr = WeakMsgCB(aValidHdlr)]() noexcept {
103-
if (weakHdlr.expired()) // validate
103+
auto hdlr = weakHdlr.lock(); // get & validate
104+
if (! hdlr)
104105
return; // otherwise crash
105-
auto hdlr = weakHdlr.lock(); // get
106106
this->rmOneHdlrOK_(aValidEv, hdlr); // safer to rm first to avoid hdlr does sth strange
107107
try { (*(hdlr.get()))(); } // call; setHdlr() forbid cb==null
108108
catch(...) { ERR("(FreeHdlrDom) except when exe callback!!! ev=" << aValidEv); }

src/domino/HdlrDomino.hpp

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -157,15 +157,15 @@ Domino::Event HdlrDomino<aDominoType>::setHdlr(const Domino::EvName& aEvName, co
157157
return Domino::D_EVENT_FAILED_RET;
158158
}
159159
auto&& newEv = this->newEvent(aEvName);
160-
if (ev_hdlr_S_.find(newEv) != ev_hdlr_S_.end())
160+
161+
// set
162+
auto newHdlr = MAKE_PTR<MsgCB>(aHdlr);
163+
auto&& ev_hdlr = ev_hdlr_S_.emplace(newEv, newHdlr);
164+
if (! ev_hdlr.second)
161165
{
162166
ERR("(HdlrDom) Failed!!! Can't overwrite hdlr for " << aEvName << ". Rm old or Use MultiHdlrDomino instead.");
163167
return Domino::D_EVENT_FAILED_RET;
164168
}
165-
166-
// set
167-
auto newHdlr = MAKE_PTR<MsgCB>(aHdlr);
168-
ev_hdlr_S_.emplace(newEv, newHdlr);
169169
HID("(HdlrDom) Succeed for EvName=" << aEvName);
170170

171171
// call
@@ -207,8 +207,8 @@ void HdlrDomino<aDominoType>::triggerHdlr_(const SharedMsgCB& aValidHdlr, const
207207
msgSelf_->newMsgOK(
208208
[weakMsgCB = WeakMsgCB(aValidHdlr)]() mutable noexcept // WeakMsgCB is to support rm hdlr
209209
{
210-
if (! weakMsgCB.expired()) {
211-
try { (*(weakMsgCB.lock().get()))(); } // setHdlr() forbid cb==null
210+
if (auto cb = weakMsgCB.lock()) {
211+
try { (*(cb.get()))(); } // setHdlr() forbid cb==null
212212
catch(...) {}
213213
}
214214
},

src/domino/MultiHdlrDomino.hpp

Lines changed: 8 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ class MultiHdlrDomino : public aDominoType
3434
{
3535
public:
3636
using HdlrName = std::string;
37-
using HName_Hdlr_S = std::map<HdlrName, SharedMsgCB>;
37+
using HName_Hdlr_S = std::unordered_map<HdlrName, SharedMsgCB>;
3838

3939
explicit MultiHdlrDomino(const LogName& aUniLogName = ULN_DEFAULT) noexcept : aDominoType(aUniLogName) {}
4040

@@ -98,22 +98,14 @@ Domino::Event MultiHdlrDomino<aDominoType>::multiHdlrOnSameEv(const Domino::EvNa
9898

9999
// set hdlr
100100
auto&& newHdlr = MAKE_PTR<MsgCB>(aHdlr);
101-
auto&& ev = this->getEventBy(aEvName);
102-
auto&& ev_hdlrs = ev_hdlrs_S_.find(ev);
103-
if (ev_hdlrs == ev_hdlrs_S_.end())
104-
{
105-
ev = this->newEvent(aEvName);
106-
ev_hdlrs_S_[ev].emplace(aHdlrName, newHdlr);
107-
}
108-
else
101+
auto&& ev = this->newEvent(aEvName);
102+
103+
auto [ev_hdlrs, _] = ev_hdlrs_S_.try_emplace(ev);
104+
auto [name_hdlr, insertNew] = ev_hdlrs->second.try_emplace(aHdlrName, newHdlr);
105+
if (!insertNew)
109106
{
110-
auto&& name_hdlr = ev_hdlrs->second.find(aHdlrName);
111-
if (name_hdlr != ev_hdlrs->second.end())
112-
{
113-
WRN("(MultiHdlrDom)!!! Failed since dup EvName=" << aEvName << " + HdlrName=" << aHdlrName);
114-
return Domino::D_EVENT_FAILED_RET;
115-
}
116-
ev_hdlrs->second.emplace(aHdlrName, newHdlr);
107+
WRN("(MultiHdlrDom)!!! Failed since dup EvName=" << aEvName << " + HdlrName=" << aHdlrName);
108+
return Domino::D_EVENT_FAILED_RET;
117109
}
118110
HID("(MultiHdlrDom) Succeed for EvName=" << aEvName << ", HdlrName=" << aHdlrName);
119111

src/domino/WbasicDatDom.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ bool WbasicDatDom<aDominoType>::replaceDataOK(const Domino::EvName& aEvName, S_P
7575
WRN("(WbasicDatDom) Failed!!! EvName=" << aEvName << " is not write-protect so unavailable via this func!!!")
7676
return false;
7777
}
78-
else return aDominoType::replaceDataOK(aEvName, aData);
78+
else return aDominoType::replaceDataOK(aEvName, std::move(aData));
7979
}
8080

8181
// ***********************************************************************************************
@@ -104,7 +104,7 @@ template<typename aDominoType>
104104
bool WbasicDatDom<aDominoType>::wbasic_replaceDataOK(const Domino::EvName& aEvName, S_PTR<void> aData) noexcept
105105
{
106106
if (isWrCtrl(aEvName))
107-
return aDominoType::replaceDataOK(aEvName, aData);
107+
return aDominoType::replaceDataOK(aEvName, std::move(aData));
108108
else {
109109
WRN("(WbasicDatDom) Failed!!! EvName=" << aEvName << " is not write-protect so unavailable via this func!!!")
110110
return false;

src/msg_self/MsgSelf.cpp

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,13 @@ bool MsgSelf::handleOneMsg_() noexcept
1818
if (oneQueue.empty())
1919
continue;
2020

21-
try { oneQueue.front()(); } // run 1st MsgCB; newMsgOK() prevent nullptr into msgQueues_
22-
catch(...) { ERR("(MsgSelf) except->failed!!!"); }
23-
21+
auto msg = std::move(oneQueue.front());
2422
oneQueue.pop_front(); // except can't recover->terminate
2523
--nMsg_;
2624

25+
try { msg(); } // run 1st MsgCB; newMsgOK() prevent nullptr into msgQueues_
26+
catch(...) { ERR("(MsgSelf) except->failed!!!"); }
27+
2728
if (not nMsg())
2829
return false; // no more to continue
2930
if (isLowPri(EMsgPriority(msgPri)))

0 commit comments

Comments
 (0)