mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-22 22:24:01 -06:00
Refactoring + throwing exception from random generator in hints
This commit is contained in:
parent
2680d42055
commit
e65dc37401
1 changed files with 20 additions and 7 deletions
|
@ -20,7 +20,7 @@
|
||||||
|
|
||||||
#define HINTS_CEREAL_VERSION 1
|
#define HINTS_CEREAL_VERSION 1
|
||||||
// structure for writing used hints into binary file with version
|
// structure for writing used hints into binary file with version
|
||||||
struct CerealData
|
struct HintsCerealData
|
||||||
{
|
{
|
||||||
std::vector<std::string> my_data;
|
std::vector<std::string> my_data;
|
||||||
// cereal will supply the version automatically when loading or saving
|
// cereal will supply the version automatically when loading or saving
|
||||||
|
@ -38,7 +38,7 @@ struct CerealData
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
// version of used hints binary file
|
// version of used hints binary file
|
||||||
CEREAL_CLASS_VERSION(CerealData, HINTS_CEREAL_VERSION);
|
CEREAL_CLASS_VERSION(HintsCerealData, HINTS_CEREAL_VERSION);
|
||||||
|
|
||||||
namespace Slic3r {
|
namespace Slic3r {
|
||||||
namespace GUI {
|
namespace GUI {
|
||||||
|
@ -65,7 +65,7 @@ void write_used_binary(const std::vector<std::string>& ids)
|
||||||
{
|
{
|
||||||
boost::filesystem::ofstream file((boost::filesystem::path(data_dir()) / "cache" / "hints.cereal"), std::ios::binary);
|
boost::filesystem::ofstream file((boost::filesystem::path(data_dir()) / "cache" / "hints.cereal"), std::ios::binary);
|
||||||
cereal::BinaryOutputArchive archive(file);
|
cereal::BinaryOutputArchive archive(file);
|
||||||
CerealData cd { ids };
|
HintsCerealData cd { ids };
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
archive(cd);
|
archive(cd);
|
||||||
|
@ -79,7 +79,7 @@ void read_used_binary(std::vector<std::string>& ids)
|
||||||
{
|
{
|
||||||
boost::filesystem::ifstream file((boost::filesystem::path(data_dir()) / "cache" / "hints.cereal"));
|
boost::filesystem::ifstream file((boost::filesystem::path(data_dir()) / "cache" / "hints.cereal"));
|
||||||
cereal::BinaryInputArchive archive(file);
|
cereal::BinaryInputArchive archive(file);
|
||||||
CerealData cd;
|
HintsCerealData cd;
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
archive(cd);
|
archive(cd);
|
||||||
|
@ -407,8 +407,17 @@ HintData* HintDatabase::get_hint(bool new_hint/* = true*/)
|
||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (new_hint)
|
try
|
||||||
m_hint_id = get_next();
|
{
|
||||||
|
if (new_hint)
|
||||||
|
m_hint_id = get_next();
|
||||||
|
}
|
||||||
|
catch (const std::exception&)
|
||||||
|
{
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return &m_loaded_hints[m_hint_id];
|
return &m_loaded_hints[m_hint_id];
|
||||||
}
|
}
|
||||||
|
@ -442,6 +451,10 @@ size_t HintDatabase::get_next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (total_weight == 0) {
|
||||||
|
BOOST_LOG_TRIVIAL(error) << "Hint notification random number generator failed. No suitable hint was found.";
|
||||||
|
throw std::exception();
|
||||||
|
}
|
||||||
size_t random_number = rand() % total_weight + 1;
|
size_t random_number = rand() % total_weight + 1;
|
||||||
size_t current_weight = 0;
|
size_t current_weight = 0;
|
||||||
for (size_t i = 0; i < candidates.size(); i++) {
|
for (size_t i = 0; i < candidates.size(); i++) {
|
||||||
|
@ -453,7 +466,7 @@ size_t HintDatabase::get_next()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
BOOST_LOG_TRIVIAL(error) << "Hint notification random number generator failed.";
|
BOOST_LOG_TRIVIAL(error) << "Hint notification random number generator failed.";
|
||||||
return 0;
|
throw std::exception();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool HintDatabase::is_used(const std::string& id)
|
bool HintDatabase::is_used(const std::string& id)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue