MCPcopy Create free account
hub / github.com/KTH-RPL/dufomap / MultiProgress

Class MultiProgress

src/indicators.hpp:2831–2893  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2829namespace indicators {
2830
2831template <typename Indicator, size_t count> class MultiProgress {
2832public:
2833 template <typename... Indicators,
2834 typename = typename std::enable_if<(sizeof...(Indicators) == count)>::type>
2835 explicit MultiProgress(Indicators &... bars) {
2836 bars_ = {bars...};
2837 for (auto &bar : bars_) {
2838 bar.get().multi_progress_mode_ = true;
2839 }
2840 }
2841
2842 template <size_t index>
2843 typename std::enable_if<(index >= 0 && index < count), void>::type set_progress(size_t value) {
2844 if (!bars_[index].get().is_completed())
2845 bars_[index].get().set_progress(value);
2846 print_progress();
2847 }
2848
2849 template <size_t index>
2850 typename std::enable_if<(index >= 0 && index < count), void>::type set_progress(float value) {
2851 if (!bars_[index].get().is_completed())
2852 bars_[index].get().set_progress(value);
2853 print_progress();
2854 }
2855
2856 template <size_t index>
2857 typename std::enable_if<(index >= 0 && index < count), void>::type tick() {
2858 if (!bars_[index].get().is_completed())
2859 bars_[index].get().tick();
2860 print_progress();
2861 }
2862
2863 template <size_t index>
2864 typename std::enable_if<(index >= 0 && index < count), bool>::type is_completed() const {
2865 return bars_[index].get().is_completed();
2866 }
2867
2868private:
2869 std::atomic<bool> started_{false};
2870 std::mutex mutex_;
2871 std::vector<std::reference_wrapper<Indicator>> bars_;
2872
2873 bool _all_completed() {
2874 bool result{true};
2875 for (size_t i = 0; i < count; ++i)
2876 result &= bars_[i].get().is_completed();
2877 return result;
2878 }
2879
2880public:
2881 void print_progress() {
2882 std::lock_guard<std::mutex> lock{mutex_};
2883 if (started_)
2884 move_up(count);
2885 for (auto &bar : bars_) {
2886 bar.get().print_progress(true);
2887 std::cout << "\n";
2888 }

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected