From ca118555214a176728b9aab87849391344306d6d Mon Sep 17 00:00:00 2001 From: Paul Oliver Date: Thu, 29 Feb 2024 02:29:13 +0100 Subject: Initial commit. --- include/evolver.h | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) create mode 100644 include/evolver.h (limited to 'include/evolver.h') diff --git a/include/evolver.h b/include/evolver.h new file mode 100644 index 0000000..b2ead10 --- /dev/null +++ b/include/evolver.h @@ -0,0 +1,38 @@ +/** +* @file evolver.h +* @author Paul Oliver +* +* This module controls all random events in Salis. At its heart lies a +* XOR-Shift pseudo-random number generator with 128 bits of state. It controls +* cosmic rays and rises simulation entropy whenever organisms 'eat' +* information. +*/ + +#ifndef SALIS_EVOLVER_H +#define SALIS_EVOLVER_H + +void _sal_evo_init(void); +void _sal_evo_quit(void); +void _sal_evo_load_from(FILE *file); +void _sal_evo_save_into(FILE *file); + +/** Get address where the last cosmic ray landed. +* @return Last address changed by a cosmic ray +*/ +SALIS_API uint32 sal_evo_get_last_changed_address(void); + +/** Get amount of random numbers generated during the last simulation cycle. +* @return Number of calls to the random number generator during the last cycle +*/ +SALIS_API uint32 sal_evo_get_calls_on_last_cycle(void); + +/** Access the internal state of the XOR-Shift random number generator. +* @param state_index Index of one of the 32 bit state-blocks [0-4] +* @return State of the 32 bit block +*/ +SALIS_API uint32 sal_evo_get_state(uint8 state_index); + +void _sal_evo_randomize_at(uint32 address); +void _sal_evo_cycle(void); + +#endif -- cgit v1.2.1