aboutsummaryrefslogtreecommitdiff
path: root/include/evolver.h
diff options
context:
space:
mode:
authorPaul Oliver <contact@pauloliver.dev>2024-02-29 02:29:13 +0100
committerPaul Oliver <contact@pauloliver.dev>2024-02-29 02:29:13 +0100
commitca118555214a176728b9aab87849391344306d6d (patch)
tree833cffdd4066a7114b1d79d6eeaa2e0152408fc8 /include/evolver.h
Initial commit.
Diffstat (limited to 'include/evolver.h')
-rw-r--r--include/evolver.h38
1 files changed, 38 insertions, 0 deletions
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