#pragma once #include #include #include #include #include namespace kel { namespace lbm { /* template struct is_neighbour { static bool operator()(saw::data& latt, saw::data& index) { using dfi = df_info; if(index.at({0u}).get() == 0u or index.at({1u}).get() == 0u){ return false; } for(saw::data k{0u}; k.get() < Descriptor::Q; ++k){ // TODO saw::data> } auto& cell = latt(index); } }; */ /* Might be stupidly complex class cell_info_registry final { public: static uint8_t next_reg_id = 0u; template static uint8_t get_registration_id() { static uint8_t reg_id = std::numeric_limit::max(); if(reg_id == std::numeric_limit::max()){ reg_id = next_reg_id; ++next_reg_id; } return reg_id; } }; */ void print_progress_bar(const uint32_t progress, const uint32_t progress_target){ std::cout<<"\r"; // <<"Progress: " // <<((100 * progress) / progress_target) // <<"% ["; uint64_t perc_prog = (100ul*progress) / progress_target; constexpr uint64_t max_perc_progress = 100u; perc_prog = std::min(perc_prog, max_perc_progress); std::string_view prog_str{"Progress: "}; // Progress string + (100 width and perc char) + ([] brackets) + space + pointer uint64_t i{prog_str.size() + 4u + 2u + 1u + 1u}; std::cout< uint64_t{ struct winsize w; if(ioctl(STDOUT_FILENO, TIOCGWINSZ,&w) == -1){ // Standardized Terminal size return 80u; } return w.ws_col; }(); max_display = std::max(max_display,i) - i; uint64_t progress_display = (max_display * progress) / progress_target; for(i = 0u; i < progress_display; ++i){ std::cout<<"#"; } for(; i < max_display; ++i){ std::cout<<"-"; } std::cout<<"]"; std::cout<