2
0
mirror of https://gitlab.isc.org/isc-projects/kea synced 2025-08-31 22:15:23 +00:00

[#891] use if and else instead of template function

This commit is contained in:
Razvan Becheriu
2020-01-29 18:11:16 +02:00
parent 0fc6654e8f
commit cee2540e10
3 changed files with 150 additions and 53 deletions

View File

@@ -35,48 +35,92 @@ StatsMgr::StatsMgr() :
void void
StatsMgr::setValue(const string& name, const int64_t value) { StatsMgr::setValue(const string& name, const int64_t value) {
MultiThreadingMgr::call(*mutex_, [&]() {setValueInternal(name, value);}); if (MultiThreadingMgr::instance().getMode()) {
lock_guard<mutex> lock(*mutex_);
setValueInternal(name, value);
} else {
setValueInternal(name, value);
}
} }
void void
StatsMgr::setValue(const string& name, const double value) { StatsMgr::setValue(const string& name, const double value) {
MultiThreadingMgr::call(*mutex_, [&]() {setValueInternal(name, value);}); if (MultiThreadingMgr::instance().getMode()) {
lock_guard<mutex> lock(*mutex_);
setValueInternal(name, value);
} else {
setValueInternal(name, value);
}
} }
void void
StatsMgr::setValue(const string& name, const StatsDuration& value) { StatsMgr::setValue(const string& name, const StatsDuration& value) {
MultiThreadingMgr::call(*mutex_, [&]() {setValueInternal(name, value);}); if (MultiThreadingMgr::instance().getMode()) {
lock_guard<mutex> lock(*mutex_);
setValueInternal(name, value);
} else {
setValueInternal(name, value);
}
} }
void void
StatsMgr::setValue(const string& name, const string& value) { StatsMgr::setValue(const string& name, const string& value) {
MultiThreadingMgr::call(*mutex_, [&]() {setValueInternal(name, value);}); if (MultiThreadingMgr::instance().getMode()) {
lock_guard<mutex> lock(*mutex_);
setValueInternal(name, value);
} else {
setValueInternal(name, value);
}
} }
void void
StatsMgr::addValue(const string& name, const int64_t value) { StatsMgr::addValue(const string& name, const int64_t value) {
MultiThreadingMgr::call(*mutex_, [&]() {addValueInternal(name, value);}); if (MultiThreadingMgr::instance().getMode()) {
lock_guard<mutex> lock(*mutex_);
addValueInternal(name, value);
} else {
addValueInternal(name, value);
}
} }
void void
StatsMgr::addValue(const string& name, const double value) { StatsMgr::addValue(const string& name, const double value) {
MultiThreadingMgr::call(*mutex_, [&]() {addValueInternal(name, value);}); if (MultiThreadingMgr::instance().getMode()) {
lock_guard<mutex> lock(*mutex_);
addValueInternal(name, value);
} else {
addValueInternal(name, value);
}
} }
void void
StatsMgr::addValue(const string& name, const StatsDuration& value) { StatsMgr::addValue(const string& name, const StatsDuration& value) {
MultiThreadingMgr::call(*mutex_, [&]() {addValueInternal(name, value);}); if (MultiThreadingMgr::instance().getMode()) {
lock_guard<mutex> lock(*mutex_);
addValueInternal(name, value);
} else {
addValueInternal(name, value);
}
} }
void void
StatsMgr::addValue(const string& name, const string& value) { StatsMgr::addValue(const string& name, const string& value) {
MultiThreadingMgr::call(*mutex_, [&]() {addValueInternal(name, value);}); if (MultiThreadingMgr::instance().getMode()) {
lock_guard<mutex> lock(*mutex_);
addValueInternal(name, value);
} else {
addValueInternal(name, value);
}
} }
ObservationPtr ObservationPtr
StatsMgr::getObservation(const string& name) const { StatsMgr::getObservation(const string& name) const {
return (MultiThreadingMgr::call(*mutex_, if (MultiThreadingMgr::instance().getMode()) {
[&]() {return getObservationInternal(name);})); lock_guard<mutex> lock(*mutex_);
return (getObservationInternal(name));
} else {
return (getObservationInternal(name));
}
} }
ObservationPtr ObservationPtr
@@ -88,7 +132,12 @@ StatsMgr::getObservationInternal(const string& name) const {
void void
StatsMgr::addObservation(const ObservationPtr& stat) { StatsMgr::addObservation(const ObservationPtr& stat) {
MultiThreadingMgr::call(*mutex_, [&]() {addObservationInternal(stat);}); if (MultiThreadingMgr::instance().getMode()) {
lock_guard<mutex> lock(*mutex_);
addObservationInternal(stat);
} else {
addObservationInternal(stat);
}
} }
void void
@@ -100,8 +149,12 @@ StatsMgr::addObservationInternal(const ObservationPtr& stat) {
bool bool
StatsMgr::deleteObservation(const string& name) { StatsMgr::deleteObservation(const string& name) {
return (MultiThreadingMgr::call(*mutex_, if (MultiThreadingMgr::instance().getMode()) {
[&]() {return deleteObservationInternal(name);})); lock_guard<mutex> lock(*mutex_);
return (deleteObservationInternal(name));
} else {
return (deleteObservationInternal(name));
}
} }
bool bool
@@ -113,8 +166,12 @@ StatsMgr::deleteObservationInternal(const string& name) {
bool bool
StatsMgr::setMaxSampleAge(const string& name, const StatsDuration& duration) { StatsMgr::setMaxSampleAge(const string& name, const StatsDuration& duration) {
return (MultiThreadingMgr::call(*mutex_, if (MultiThreadingMgr::instance().getMode()) {
[&]() {return setMaxSampleAgeInternal(name, duration);})); lock_guard<mutex> lock(*mutex_);
return (setMaxSampleAgeInternal(name, duration));
} else {
return (setMaxSampleAgeInternal(name, duration));
}
} }
bool bool
@@ -130,8 +187,12 @@ StatsMgr::setMaxSampleAgeInternal(const string& name,
bool bool
StatsMgr::setMaxSampleCount(const string& name, uint32_t max_samples) { StatsMgr::setMaxSampleCount(const string& name, uint32_t max_samples) {
return (MultiThreadingMgr::call(*mutex_, if (MultiThreadingMgr::instance().getMode()) {
[&]() {return setMaxSampleCountInternal(name, max_samples);})); lock_guard<mutex> lock(*mutex_);
return (setMaxSampleCountInternal(name, max_samples));
} else {
return (setMaxSampleCountInternal(name, max_samples));
}
} }
bool bool
@@ -147,7 +208,12 @@ StatsMgr::setMaxSampleCountInternal(const string& name,
void void
StatsMgr::setMaxSampleAgeAll(const StatsDuration& duration) { StatsMgr::setMaxSampleAgeAll(const StatsDuration& duration) {
MultiThreadingMgr::call(*mutex_, [&]() {setMaxSampleAgeAllInternal(duration);}); if (MultiThreadingMgr::instance().getMode()) {
lock_guard<mutex> lock(*mutex_);
setMaxSampleAgeAllInternal(duration);
} else {
setMaxSampleAgeAllInternal(duration);
}
} }
void void
@@ -157,7 +223,12 @@ StatsMgr::setMaxSampleAgeAllInternal(const StatsDuration& duration) {
void void
StatsMgr::setMaxSampleCountAll(uint32_t max_samples) { StatsMgr::setMaxSampleCountAll(uint32_t max_samples) {
MultiThreadingMgr::call(*mutex_, [&]() {setMaxSampleCountAllInternal(max_samples);}); if (MultiThreadingMgr::instance().getMode()) {
lock_guard<mutex> lock(*mutex_);
setMaxSampleCountAllInternal(max_samples);
} else {
setMaxSampleCountAllInternal(max_samples);
}
} }
void void
@@ -167,7 +238,12 @@ StatsMgr::setMaxSampleCountAllInternal(uint32_t max_samples) {
bool bool
StatsMgr::reset(const string& name) { StatsMgr::reset(const string& name) {
return MultiThreadingMgr::call(*mutex_, [&]() {return resetInternal(name);}); if (MultiThreadingMgr::instance().getMode()) {
lock_guard<mutex> lock(*mutex_);
return (resetInternal(name));
} else {
return (resetInternal(name));
}
} }
bool bool
@@ -182,7 +258,12 @@ StatsMgr::resetInternal(const string& name) {
bool bool
StatsMgr::del(const string& name) { StatsMgr::del(const string& name) {
return (MultiThreadingMgr::call(*mutex_, [&]() {return delInternal(name);})); if (MultiThreadingMgr::instance().getMode()) {
lock_guard<mutex> lock(*mutex_);
return (delInternal(name));
} else {
return (delInternal(name));
}
} }
bool bool
@@ -192,7 +273,12 @@ StatsMgr::delInternal(const string& name) {
void void
StatsMgr::removeAll() { StatsMgr::removeAll() {
MultiThreadingMgr::call(*mutex_, [&]() {removeAllInternal();}); if (MultiThreadingMgr::instance().getMode()) {
lock_guard<mutex> lock(*mutex_);
removeAllInternal();
} else {
removeAllInternal();
}
} }
void void
@@ -202,7 +288,12 @@ StatsMgr::removeAllInternal() {
ConstElementPtr ConstElementPtr
StatsMgr::get(const string& name) const { StatsMgr::get(const string& name) const {
return (MultiThreadingMgr::call(*mutex_, [&]() {return getInternal(name);})); if (MultiThreadingMgr::instance().getMode()) {
lock_guard<mutex> lock(*mutex_);
return (getInternal(name));
} else {
return (getInternal(name));
}
} }
ConstElementPtr ConstElementPtr
@@ -217,7 +308,12 @@ StatsMgr::getInternal(const string& name) const {
ConstElementPtr ConstElementPtr
StatsMgr::getAll() const { StatsMgr::getAll() const {
return (MultiThreadingMgr::call(*mutex_, [&]() {return getAllInternal();})); if (MultiThreadingMgr::instance().getMode()) {
lock_guard<mutex> lock(*mutex_);
return (getAllInternal());
} else {
return (getAllInternal());
}
} }
ConstElementPtr ConstElementPtr
@@ -227,7 +323,12 @@ StatsMgr::getAllInternal() const {
void void
StatsMgr::resetAll() { StatsMgr::resetAll() {
MultiThreadingMgr::call(*mutex_, [&]() {resetAllInternal();}); if (MultiThreadingMgr::instance().getMode()) {
lock_guard<mutex> lock(*mutex_);
resetAllInternal();
} else {
resetAllInternal();
}
} }
void void
@@ -237,7 +338,12 @@ StatsMgr::resetAllInternal() {
size_t size_t
StatsMgr::getSize(const string& name) const { StatsMgr::getSize(const string& name) const {
return (MultiThreadingMgr::call(*mutex_, [&]() {return getSizeInternal(name);})); if (MultiThreadingMgr::instance().getMode()) {
lock_guard<mutex> lock(*mutex_);
return (getSizeInternal(name));
} else {
return (getSizeInternal(name));
}
} }
size_t size_t
@@ -251,7 +357,12 @@ StatsMgr::getSizeInternal(const string& name) const {
size_t size_t
StatsMgr::count() const { StatsMgr::count() const {
return (MultiThreadingMgr::call(*mutex_, [&]() {return countInternal();})); if (MultiThreadingMgr::instance().getMode()) {
lock_guard<mutex> lock(*mutex_);
return (countInternal());
} else {
return (countInternal());
}
} }
size_t size_t

View File

@@ -719,14 +719,14 @@ private:
uint32_t& max_samples, uint32_t& max_samples,
std::string& reason); std::string& reason);
// This is a global context. All statistics will initially be stored here. /// @brief This is a global context. All statistics will initially be stored here.
StatContextPtr global_; StatContextPtr global_;
/// @brief Mutex used to protect internal state /// @brief The mutex used to protect internal state.
const boost::scoped_ptr<std::mutex> mutex_; const boost::scoped_ptr<std::mutex> mutex_;
}; };
}; } // namespace stats
}; } // namespace isc
#endif // STATS_MGR #endif // STATS_MGR

View File

@@ -8,7 +8,6 @@
#define MULTI_THREADING_MGR_H #define MULTI_THREADING_MGR_H
#include <boost/noncopyable.hpp> #include <boost/noncopyable.hpp>
#include <mutex>
namespace isc { namespace isc {
namespace util { namespace util {
@@ -29,14 +28,18 @@ namespace util {
/// For instance for a class protected by its mutex: /// For instance for a class protected by its mutex:
/// @code /// @code
/// namespace locked { /// namespace locked {
/// int foo() { ... } /// void foo() { ... }
/// } // end of locked namespace /// } // end of locked namespace
/// ///
/// int foo() { /// void foo() {
/// return MultiThreadingMgr::call(mutex_, []() {return locked::foo()}); /// if (MultiThreadingMgr::instance().getMode()) {
/// lock_guard<mutex> lock(mutex_);
/// locked::foo();
/// } else {
/// locked::foo();
/// }
/// } /// }
/// @endcode /// @endcode
class MultiThreadingMgr : public boost::noncopyable { class MultiThreadingMgr : public boost::noncopyable {
public: public:
@@ -59,23 +62,6 @@ public:
/// @param enabled The new mode. /// @param enabled The new mode.
void setMode(bool enabled); void setMode(bool enabled);
/// @brief Call a Functor in MT or ST mode
///
/// @tparam Lockable a lock which is used to create a thread safe context
/// @tparam Callable a functor which will be called in MT or ST mode
/// @param lk the lock object to perform lock in MT mode
/// @param f the functor to call
/// @result the result of the functor call
template<typename Lockable, typename Callable>
static auto call(Lockable& lk, const Callable& f) -> decltype(f()) {
if (MultiThreadingMgr::instance().getMode()) {
std::lock_guard<Lockable> lock(lk);
return f();
} else {
return f();
}
}
protected: protected:
/// @brief Constructor. /// @brief Constructor.