Petites modifs

This commit is contained in:
Timothée Leclaire-Fournier 2024-01-19 19:36:01 -05:00
parent f727a9df20
commit 42a4f5dfba
2 changed files with 18 additions and 8 deletions

View File

@ -95,11 +95,12 @@ bool GOLTeamH::setRule(std::string const& rule)
continue; continue;
} }
// On vérifie qu'il y ait un backslash avec un char après. // S'il n'y a pas de chiffre, on vérifie qu'il y ait
// un backslash avec un S après.
if (firstPart && rule[i] == '/' && rule.size() > i + 1 if (firstPart && rule[i] == '/' && rule.size() > i + 1
&& (rule[i + 1] == 'S' || rule[i + 1] == 's')) { && (rule[i + 1] == 'S' || rule[i + 1] == 's')) {
i++; // On saute le S i++; // On saute le S
firstPart = false; firstPart = false; // Deuxième partie
continue; continue;
} }
else // Aucun slash + s, alors pas bon. else // Aucun slash + s, alors pas bon.
@ -168,11 +169,16 @@ void GOLTeamH::setSolidColor(State state, Color const& color)
mAliveColor = color; mAliveColor = color;
} }
// TODO // TODO: performance
void GOLTeamH::processOneStep() void GOLTeamH::processOneStep()
{ {
// On commence à itérer sur les côtés. En règlant ces cas particuliers, on
// peut éviter des branches dans la boucle principale. Le branch predictor
// aime cela.
for (size_t i{}; i < mData.width(); ++i) {
} }
}
void GOLTeamH::updateImage(uint32_t* buffer, size_t buffer_size) const void GOLTeamH::updateImage(uint32_t* buffer, size_t buffer_size) const
{ {
@ -182,6 +188,7 @@ void GOLTeamH::updateImage(uint32_t* buffer, size_t buffer_size) const
auto s_ptr = buffer; auto s_ptr = buffer;
auto e_ptr = &buffer[buffer_size]; auto e_ptr = &buffer[buffer_size];
// On itère sur chaque éléments du tableau et on associe la couleur.
for (const auto& i : mData.data()) { for (const auto& i : mData.data()) {
if (i == GridTeamH::CellType::alive) { if (i == GridTeamH::CellType::alive) {
*s_ptr &= 0; // Clear *s_ptr &= 0; // Clear
@ -197,10 +204,11 @@ void GOLTeamH::updateImage(uint32_t* buffer, size_t buffer_size) const
*s_ptr |= mDeadColor.green << 8; *s_ptr |= mDeadColor.green << 8;
*s_ptr |= mDeadColor.blue; *s_ptr |= mDeadColor.blue;
} }
s_ptr++; s_ptr++;
// Sanity check // Sanity check, pour éviter des problèmes
if (s_ptr > e_ptr) if (s_ptr >= e_ptr)
break; break;
} }
} }

View File

@ -40,9 +40,11 @@ private:
std::optional<BorderManagement> mBorderManagement; std::optional<BorderManagement> mBorderManagement;
std::optional<IterationType> mIteration; std::optional<IterationType> mIteration;
GridTeamH mData; // On utilise un bitset qui contient les règles de chaque nombre.
std::bitset<9> mParsedRuleRevive, mParsedRuleSurvive; std::bitset<9> mParsedRuleRevive, mParsedRuleSurvive;
GridTeamH mData;
Color mDeadColor, mAliveColor; Color mDeadColor, mAliveColor;
// Fonction utilisée à l'interne.
std::optional<unsigned char> convertCharToNumber(const char c); std::optional<unsigned char> convertCharToNumber(const char c);
}; };