Suppression

- index libre directement dans le constructeur
- Comportement de la méthode recuperationIndexLibre directement dans le constructeur
This commit is contained in:
Mylloon 2022-04-10 18:01:10 +02:00
parent 7d482d0afd
commit 51406b8cb5
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
2 changed files with 9 additions and 14 deletions

View file

@ -17,9 +17,6 @@ class Organisme {
int m_index; // Location dans l'univers int m_index; // Location dans l'univers
// Renvoie un index libre
int recuperationIndexLibre(int);
public: public:
const int ID; // ID unique pour chaque organisme const int ID; // ID unique pour chaque organisme

View file

@ -7,9 +7,17 @@ Organisme::Organisme(const int univers_ID, const int index): m_univers_ID(univer
} }
m_total_ID = ID; // + 1 aux ID m_total_ID = ID; // + 1 aux ID
Univers::m_liste_univers[m_univers_ID].second.push_back(this); Univers::m_liste_univers[m_univers_ID].second.push_back(this);
// Supprime l'index maintenant pris par un organisme
auto debut = Univers::m_liste_univers[m_univers_ID].first.begin();
auto fin = Univers::m_liste_univers[m_univers_ID].first.end();
auto it = std::find(debut, fin, index);
if(it != fin) {
Univers::m_liste_univers[m_univers_ID].first.erase(it);
}
} }
Organisme::Organisme(const int univers_ID): Organisme(univers_ID, recuperationIndexLibre(univers_ID)) {} Organisme::Organisme(const int univers_ID): Organisme(univers_ID, Univers::m_liste_univers[univers_ID].first.back()) {}
Organisme::~Organisme(void) { Organisme::~Organisme(void) {
// On remet notre index dans le vecteur des index vide // On remet notre index dans le vecteur des index vide
@ -33,13 +41,3 @@ char Organisme::lettre(const int id) noexcept {
std::pair<int, std::pair<int, int>> Organisme::position(const int id) const noexcept { std::pair<int, std::pair<int, int>> Organisme::position(const int id) const noexcept {
return std::make_pair(m_index, std::make_pair(m_index / Univers::m_dimensions_univers[id].first, m_index % Univers::m_dimensions_univers[id].first)); return std::make_pair(m_index, std::make_pair(m_index / Univers::m_dimensions_univers[id].first, m_index % Univers::m_dimensions_univers[id].first));
} }
int Organisme::recuperationIndexLibre(const int universID_p) {
if(Univers::m_liste_univers[universID_p].first.size() == 0) { // normalement c'est impossible que cette expection apparaisse
throw std::domain_error("Impossible d'attribuer une position à l'organisme.");
}
int res = Univers::m_liste_univers[universID_p].first.back();
Univers::m_liste_univers[universID_p].first.pop_back();
return res;
}