Petites modifs
This commit is contained in:
parent
7a3dd3abfc
commit
3438519d3b
@ -79,19 +79,18 @@ grid. Lors d'un redimensionnement, nous supprimons la mémoire et réallouont la
|
|||||||
selon la taille nécessaire."},
|
selon la taille nécessaire."},
|
||||||
{"Nous parcourons simplement en mémoire les deux tableaux (réel et intermédiaire) et faisons \
|
{"Nous parcourons simplement en mémoire les deux tableaux (réel et intermédiaire) et faisons \
|
||||||
9 accès du tableau réel en mettant à jour la case de l'intermédiaire. Nous utilisons une règle encodée \
|
9 accès du tableau réel en mettant à jour la case de l'intermédiaire. Nous utilisons une règle encodée \
|
||||||
avec ses bits. Ce nombre contient les règles de réanimation et de survie. Voir le fichier GOLTeamH.h pour \
|
avec ses bits. Ce nombre contient les règles de réanimation et de survie. Des précisions sont offertes \
|
||||||
plus de détails."},
|
dans le fichier GOLTeamH.h aux lignes 76-87."},
|
||||||
{"Pour mettre à jour l'image, nous parcourons le tableau réel au complet et nous utilisons une règle \
|
{"Pour mettre à jour l'image, nous parcourons le tableau réel au complet et nous utilisons une règle \
|
||||||
de couleur encodée pour éviter une branche. Nous mettons les bits à 0, mettons le alpha à 255 et utilisons la \
|
de couleur encodée pour éviter une branche. Nous mettons les bits à 0, mettons le alpha à 255 et utilisons une \
|
||||||
règle pour simplifier la modification."},
|
multiplication pour atteindre la bonne partie de la règle avant de la copier dans le buffer."},
|
||||||
{"Nous avons encodé la règle dans un uint32_t en le divisant par deux. Le premier 16 bits (à gauche) \
|
{"Nous avons encodé la règle dans un uint32_t en le divisant par deux. Le premier 16 bits (à gauche) \
|
||||||
est celui de la règle de survie alors qu'à droite nous avons la règle de réanimation. En utilisant une multiplication \
|
est celui de la règle de survie alors qu'à droite nous avons la règle de réanimation. En utilisant une multiplication \
|
||||||
de 16, nous pouvons accéder à la bonne partie des bits avec aucune branche. Par la suite chaque bit (0-9) représente \
|
de 16, nous pouvons accéder à la bonne partie des bits avec aucune branche. Par la suite chaque bit (0-9) représente \
|
||||||
la partie de la règle."
|
la partie de la règle."}},
|
||||||
}},
|
|
||||||
.optionnalComments{"Il y a quelques différences dans les implémentations (ex: 3 -> quand on met un \
|
.optionnalComments{"Il y a quelques différences dans les implémentations (ex: 3 -> quand on met un \
|
||||||
pattern, la grid se remet à zéro alors que pas dans la 2 et 1.) Il serait bien d'avoir des précisions sur les \
|
pattern, la grid se remet à zéro alors que pas dans la 2 et 1.) Il serait bien d'avoir des précisions sur les \
|
||||||
détails."}
|
détails nécessaires. Nous nous sommes basés sur la troisième."}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -550,6 +549,7 @@ std::optional<GOLTeamH::sizeQueried> GOLTeamH::parsePattern(std::string const& p
|
|||||||
{
|
{
|
||||||
// \[ -> on match le caractère [
|
// \[ -> on match le caractère [
|
||||||
// (\d+) -> on match plusieurs caractères de 0-9
|
// (\d+) -> on match plusieurs caractères de 0-9
|
||||||
|
// std::regex_constants::icase -> min ou maj
|
||||||
std::regex regexp(R"(\[(\d+)x(\d+)\](\d+))", std::regex_constants::icase);
|
std::regex regexp(R"(\[(\d+)x(\d+)\](\d+))", std::regex_constants::icase);
|
||||||
std::smatch m;
|
std::smatch m;
|
||||||
|
|
||||||
@ -670,11 +670,13 @@ size_t GOLTeamH::countNeighbors(const uint8_t* cellPtr) const
|
|||||||
|
|
||||||
// Petit lambda pour simplifier les opérations.
|
// Petit lambda pour simplifier les opérations.
|
||||||
auto putInBounds = [width, height, bm, firstGridPtr, lastGridPtr](const uint8_t* ptr) {
|
auto putInBounds = [width, height, bm, firstGridPtr, lastGridPtr](const uint8_t* ptr) {
|
||||||
|
// En bas ou en haut de la grille.
|
||||||
if (ptr < firstGridPtr)
|
if (ptr < firstGridPtr)
|
||||||
ptr += width * ((bm == GOL::BorderManagement::mirror) ? 2 : height);
|
ptr += width * ((bm == GOL::BorderManagement::mirror) ? 2 : height);
|
||||||
else if (ptr > lastGridPtr)
|
else if (ptr > lastGridPtr)
|
||||||
ptr -= width * ((bm == GOL::BorderManagement::mirror) ? 2 : height);
|
ptr -= width * ((bm == GOL::BorderManagement::mirror) ? 2 : height);
|
||||||
|
|
||||||
|
// Gauche ou droite
|
||||||
if ((ptr - firstGridPtr) % width == 0)
|
if ((ptr - firstGridPtr) % width == 0)
|
||||||
ptr -= ((bm == GOL::BorderManagement::mirror) ? 2 : width);
|
ptr -= ((bm == GOL::BorderManagement::mirror) ? 2 : width);
|
||||||
else if ((ptr - firstGridPtr) % width == width - 1)
|
else if ((ptr - firstGridPtr) % width == width - 1)
|
||||||
@ -702,8 +704,5 @@ size_t GOLTeamH::countNeighbors(const uint8_t* cellPtr) const
|
|||||||
tempPtr++;
|
tempPtr++;
|
||||||
neighborsAliveCount += *(putInBounds(tempPtr));
|
neighborsAliveCount += *(putInBounds(tempPtr));
|
||||||
|
|
||||||
if (neighborsAliveCount) // TODO: retire
|
|
||||||
int a = 0;
|
|
||||||
|
|
||||||
return neighborsAliveCount;
|
return neighborsAliveCount;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user