diff --git a/includes/organisme.hpp b/includes/organisme.hpp index a53408d..8fb6497 100644 --- a/includes/organisme.hpp +++ b/includes/organisme.hpp @@ -17,9 +17,6 @@ class Organisme { int m_index; // Location dans l'univers - // Renvoie un index libre - int recuperationIndexLibre(int); - public: const int ID; // ID unique pour chaque organisme diff --git a/src/organisme.cpp b/src/organisme.cpp index 8c8d2ab..266a37a 100644 --- a/src/organisme.cpp +++ b/src/organisme.cpp @@ -7,9 +7,17 @@ Organisme::Organisme(const int univers_ID, const int index): m_univers_ID(univer } m_total_ID = ID; // + 1 aux ID 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) { // On remet notre index dans le vecteur des index vide @@ -33,13 +41,3 @@ char Organisme::lettre(const int id) noexcept { std::pair> 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)); } - -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; -}