diff --git a/include/base/problem/problem.h b/include/base/problem/problem.h index 0832f30e6ee998cc9999e6f65a916071d0e83a32..938074f78020ebff96905714d70d7f1259a168e1 100644 --- a/include/base/problem/problem.h +++ b/include/base/problem/problem.h @@ -252,13 +252,9 @@ class Problem : public std::enable_shared_from_this<Problem> */ void removeStateBlock(StateBlockPtr _state_ptr); - /** \brief Returns the size of the map of state block notification - */ - SizeStd getStateBlockNotificationMapSize() const; - - /** \brief Returns if the state block has been notified, and the notification via parameter + /** \brief Returns the map of factor notification to be handled by the solver (the map stored in this is emptied) */ - bool getStateBlockNotification(const StateBlockPtr& sb_ptr, Notification& notif) const; + std::map<StateBlockPtr,Notification> consumeStateBlockNotificationMap(); /** \brief Notifies a new factor to be added to the solver manager */ @@ -268,24 +264,10 @@ class Problem : public std::enable_shared_from_this<Problem> */ void removeFactor(FactorBasePtr _factor_ptr); - /** \brief Returns the size of the map of factor notification - */ - SizeStd getFactorNotificationMapSize() const; - - /** \brief Returns if the factor has been notified, and the notification via parameter - */ - bool getFactorNotification(const FactorBasePtr& fac_ptr, Notification& notif) const; - - protected: - /** \brief Returns the map of state block notification to be handled by the solver (the map stored in this is emptied) - */ - std::map<StateBlockPtr,Notification> consumeStateBlockNotificationMap(); - /** \brief Returns the map of factor notification to be handled by the solver (the map stored in this is emptied) */ std::map<FactorBasePtr, Notification> consumeFactorNotificationMap(); - public: // Print and check --------------------------------------- /** * \brief print wolf tree @@ -329,25 +311,12 @@ inline std::map<StateBlockPtr,Notification> Problem::consumeStateBlockNotificati return std::move(state_block_notification_map_); } -inline SizeStd Problem::getStateBlockNotificationMapSize() const -{ - std::lock_guard<std::mutex> lock(mut_state_block_notifications_); - return state_block_notification_map_.size(); -} - inline std::map<FactorBasePtr,Notification> Problem::consumeFactorNotificationMap() { std::lock_guard<std::mutex> lock(mut_factor_notifications_); return std::move(factor_notification_map_); } -inline wolf::SizeStd Problem::getFactorNotificationMapSize() const -{ - std::lock_guard<std::mutex> lock(mut_factor_notifications_); - return factor_notification_map_.size(); -} - - } // namespace wolf #endif // PROBLEM_H diff --git a/src/problem/problem.cpp b/src/problem/problem.cpp index 484fa4458dcc256c3ac002459ef700bace62b1c0..34f37364291cc3d0710fb78a890799df87218b1f 100644 --- a/src/problem/problem.cpp +++ b/src/problem/problem.cpp @@ -401,6 +401,16 @@ void Problem::removeStateBlock(StateBlockPtr _state_ptr) state_block_notification_map_[_state_ptr] = REMOVE; } +bool Problem::getStateBlockNotification(const StateBlockPtr& sb_ptr, Notification& notif) const +{ + std::lock_guard<std::mutex> lock(mut_state_block_notifications_); + if (state_block_notification_map_.find(sb_ptr) == state_block_notification_map_.end()) + return false; + + notif = state_block_notification_map_.at(sb_ptr); + return true; +} + FactorBasePtr Problem::addFactor(FactorBasePtr _factor_ptr) { std::lock_guard<std::mutex> lock(mut_factor_notifications_); @@ -442,6 +452,16 @@ void Problem::removeFactor(FactorBasePtr _factor_ptr) factor_notification_map_[_factor_ptr] = REMOVE; } +bool Problem::getFactorNotification(const FactorBasePtr& fac_ptr, Notification& notif) const +{ + std::lock_guard<std::mutex> lock(mut_factor_notifications_); + if (factor_notification_map_.find(fac_ptr) == factor_notification_map_.end()) + return false; + + notif = factor_notification_map_.at(fac_ptr); + return true; +} + void Problem::clearCovariance() { std::lock_guard<std::mutex> lock(mut_covariances_);