From 42c4b88f499f4ba6c4f0642800248133c6950143 Mon Sep 17 00:00:00 2001 From: Nikola Petrov Date: Sat, 4 Jan 2025 21:05:20 +0100 Subject: [PATCH] Change to index lists --- inc/values/DnaManager.hpp | 8 ++++---- src/values/DnaManager.cpp | 33 +++++++++++++++++++-------------- 2 files changed, 23 insertions(+), 18 deletions(-) diff --git a/inc/values/DnaManager.hpp b/inc/values/DnaManager.hpp index 2be2df1..230720c 100644 --- a/inc/values/DnaManager.hpp +++ b/inc/values/DnaManager.hpp @@ -30,10 +30,10 @@ private: uint128 randSeed; uint128 id; std::vector vector; - std::list queued; - std::list showed; - std::vector liked; - std::vector disliked; + std::list queued; + std::list showed; + std::vector liked; + std::vector disliked; void newGen(); }; diff --git a/src/values/DnaManager.cpp b/src/values/DnaManager.cpp index f3bccd5..a7ecf17 100644 --- a/src/values/DnaManager.cpp +++ b/src/values/DnaManager.cpp @@ -38,7 +38,7 @@ void DnaManager::init() for (std::size_t i = 0; i < NUM_PER_GEN; i++) { DNA::newDna(&vector[i], &randSeed); - queued.push_back(&vector[i]); + queued.push_back(i); } } @@ -55,22 +55,23 @@ void DnaManager::deinit() Unit DnaManager::next() { - Dna *ret = queued.front(); + int index = queued.front(); queued.pop_front(); - showed.push_back(ret); + showed.push_back(index); + Dna *ret = &vector[index]; return {ret, Liked::tbd}; } void DnaManager::like(Unit unit) { - Dna *found = nullptr; + int found = -1; for (auto &&i : showed) { - if (i == unit.dna) - found = unit.dna; + if (&vector[i] == unit.dna) + found = i; } - if (found == nullptr) + if (found == -1) { TraceLog(LOG_ERROR, "NOT FOUND UNIT"); return; @@ -104,7 +105,7 @@ void DnaManager::newGen() for (std::size_t i = 0; i < NUM_PER_GEN; i++) { DNA::newDna(&vector[i], &randSeed); - queued.push_back(&vector[i]); + queued.push_back(i); } disliked.clear(); return; @@ -117,11 +118,11 @@ void DnaManager::newGen() if (liked.size() == 1) { - Dna *front = liked.front(); + int front = liked.front(); for (auto &&i : disliked) { - DNA::clone(front, i, &randSeed); + DNA::clone(&vector[front], &vector[i], &randSeed); queued.push_back(i); } @@ -141,9 +142,13 @@ void DnaManager::newGen() p2 = mrand::getValue(0, liked.size(), &randSeed); } - Dna *p1p = liked[p1]; - Dna *p2p = liked[p2]; - DNA::makeChild(p1p, p2p, i, &randSeed); + p1 = liked[p1]; + p2 = liked[p2]; + Dna *p1p = &vector[p1]; + Dna *p2p = &vector[p2]; + Dna *c = &vector[i]; + + DNA::makeChild(p1p, p2p, c, &randSeed); queued.push_back(i); } } @@ -152,7 +157,7 @@ void DnaManager::newGen() { for (auto &&i : queued) { - DNA::mutate(i, NUM_OF_MUT, &randSeed); + DNA::mutate(&vector[i], NUM_OF_MUT, &randSeed); } return; }