#include #include #include "values/Dna.hpp" namespace DNA { void newDna(Dna *dna, uint128 *state) { uint8_t *array = (uint8_t *)dna; for (size_t i = 0; i < sizeof(Dna); i++) { array[i] = mrand::getValue(256, state); } } void makeChild(Dna *p1, Dna *p2, Dna *c, uint128 *state) { uint8_t *p1a = (uint8_t *)p1; uint8_t *p2a = (uint8_t *)p2; uint8_t *ca = (uint8_t *)c; for (size_t i = 0; i < sizeof(Dna); i++) { int val = mrand::getValue(2, state); if (val == 0) { ca[i] = p1a[i]; } else { ca[i] = p2a[i]; } } } void clone(Dna *p1, Dna *c, uint128 *state) { uint8_t *p1a = (uint8_t *)p1; uint8_t *ca = (uint8_t *)c; for (size_t i = 0; i < sizeof(Dna); i++) { int val = mrand::getValue(2, state); if (val == 0) { ca[i] = p1a[i]; } else { ca[i] = mrand::getValue(256, state); } } } void mutate(Dna *dna, uint32_t num, uint128 *state) { uint8_t *array = (uint8_t *)dna; for (size_t i = 0; i < num; i++) { int pos = mrand::getValue(sizeof(Dna), state); array[pos] = mrand::getValue(256, state); } } }