@@ -21,28 +21,24 @@ namespace libOpenCOR {
2121
2222bool Logger::Impl::hasIssues () const
2323{
24- const std::scoped_lock<std::recursive_mutex> lock (mMutex );
25-
26- return !mIssues .empty ();
24+ return mIssueCount .load (std::memory_order_acquire) != 0 ;
2725}
2826
2927size_t Logger::Impl::issueCount () const
3028{
31- const std::scoped_lock<std::recursive_mutex> lock (mMutex );
32-
33- return mIssues .size ();
29+ return mIssueCount .load (std::memory_order_acquire);
3430}
3531
3632IssuePtrs Logger::Impl::issues () const
3733{
38- const std::scoped_lock<std::recursive_mutex > lock (mMutex );
34+ const std::scoped_lock<std::mutex > lock (mMutex );
3935
4036 return mIssues ;
4137}
4238
4339IssuePtr Logger::Impl::issue (size_t pIndex) const
4440{
45- const std::scoped_lock<std::recursive_mutex > lock (mMutex );
41+ const std::scoped_lock<std::mutex > lock (mMutex );
4642
4743 if (pIndex >= mIssues .size ()) {
4844 return nullptr ;
@@ -53,28 +49,24 @@ IssuePtr Logger::Impl::issue(size_t pIndex) const
5349
5450bool Logger::Impl::hasErrors () const
5551{
56- const std::scoped_lock<std::recursive_mutex> lock (mMutex );
57-
58- return !mErrors .empty ();
52+ return mErrorCount .load (std::memory_order_acquire) != 0 ;
5953}
6054
6155size_t Logger::Impl::errorCount () const
6256{
63- const std::scoped_lock<std::recursive_mutex> lock (mMutex );
64-
65- return mErrors .size ();
57+ return mErrorCount .load (std::memory_order_acquire);
6658}
6759
6860IssuePtrs Logger::Impl::errors () const
6961{
70- const std::scoped_lock<std::recursive_mutex > lock (mMutex );
62+ const std::scoped_lock<std::mutex > lock (mMutex );
7163
7264 return mErrors ;
7365}
7466
7567IssuePtr Logger::Impl::error (size_t pIndex) const
7668{
77- const std::scoped_lock<std::recursive_mutex > lock (mMutex );
69+ const std::scoped_lock<std::mutex > lock (mMutex );
7870
7971 if (pIndex >= mErrors .size ()) {
8072 return nullptr ;
@@ -85,28 +77,24 @@ IssuePtr Logger::Impl::error(size_t pIndex) const
8577
8678bool Logger::Impl::hasWarnings () const
8779{
88- const std::scoped_lock<std::recursive_mutex> lock (mMutex );
89-
90- return !mWarnings .empty ();
80+ return mWarningCount .load (std::memory_order_acquire) != 0 ;
9181}
9282
9383size_t Logger::Impl::warningCount () const
9484{
95- const std::scoped_lock<std::recursive_mutex> lock (mMutex );
96-
97- return mWarnings .size ();
85+ return mWarningCount .load (std::memory_order_acquire);
9886}
9987
10088IssuePtrs Logger::Impl::warnings () const
10189{
102- const std::scoped_lock<std::recursive_mutex > lock (mMutex );
90+ const std::scoped_lock<std::mutex > lock (mMutex );
10391
10492 return mWarnings ;
10593}
10694
10795IssuePtr Logger::Impl::warning (size_t pIndex) const
10896{
109- const std::scoped_lock<std::recursive_mutex > lock (mMutex );
97+ const std::scoped_lock<std::mutex > lock (mMutex );
11098
11199 if (pIndex >= mWarnings .size ()) {
112100 return nullptr ;
@@ -139,15 +127,21 @@ void Logger::Impl::addIssues(const libcellml::LoggerPtr &pLogger, const std::str
139127
140128void Logger::Impl::addIssue (Issue::Type pType, const std::string &pDescription, const std::string &pContext)
141129{
142- const std::scoped_lock<std::recursive_mutex > lock (mMutex );
130+ const std::scoped_lock<std::mutex > lock (mMutex );
143131
144132 auto issue {IssuePtr {new Issue {pType, pDescription, pContext}}};
145133 mIssues .push_back (issue);
146134
135+ mIssueCount .fetch_add (1 , std::memory_order_release);
136+
147137 if (pType == Issue::Type::ERROR ) {
148138 mErrors .push_back (std::move (issue));
139+
140+ mErrorCount .fetch_add (1 , std::memory_order_release);
149141 } else {
150142 mWarnings .push_back (std::move (issue));
143+
144+ mWarningCount .fetch_add (1 , std::memory_order_release);
151145 }
152146}
153147
@@ -163,12 +157,15 @@ void Logger::Impl::addWarning(const std::string &pDescription)
163157
164158void Logger::Impl::removeAllIssues ()
165159{
166- const std::scoped_lock<std::recursive_mutex > lock (mMutex );
160+ const std::scoped_lock<std::mutex > lock (mMutex );
167161
168162 mIssues .clear ();
169-
170163 mErrors .clear ();
171164 mWarnings .clear ();
165+
166+ mIssueCount .store (0 , std::memory_order_release);
167+ mErrorCount .store (0 , std::memory_order_release);
168+ mWarningCount .store (0 , std::memory_order_release);
172169}
173170
174171Logger::Logger (std::unique_ptr<Impl> pPimpl)
0 commit comments