gol_core/evolution/
strategy_manager.rs1use crate::{BoardStrategyManager, EvolutionStrategy, IndexedDataOwned};
2
3pub struct SharedStrategyManager<CI, T, I>
4where
5 I: Iterator<Item = IndexedDataOwned<CI, T>>,
6{
7 strategy: Box<dyn EvolutionStrategy<CI, T, I>>,
8}
9
10impl<CI, T, I> BoardStrategyManager<CI, T, I> for SharedStrategyManager<CI, T, I>
11where
12 I: Iterator<Item = IndexedDataOwned<CI, T>>,
13{
14 fn get_strategy_at_index(&self, _: CI) -> &dyn EvolutionStrategy<CI, T, I> {
15 &*self.strategy
16 }
17}
18
19impl<CI, T, I> SharedStrategyManager<CI, T, I>
20where
21 I: Iterator<Item = IndexedDataOwned<CI, T>>,
22{
23 pub fn new(strategy: Box<dyn EvolutionStrategy<CI, T, I>>) -> Self {
24 Self { strategy }
25 }
26}
27
28#[cfg(test)]
29mod shared_strat_manager_test {
30 use crate::{
31 BoardStrategyManager, DecayLifeLikeStrategy, IndexedDataOwned, SharedStrategyManager,
32 };
33
34 #[test]
35 fn shared_strat_test_1() {
36 let strat = Box::new(DecayLifeLikeStrategy::gol());
37 let strat_manager =
38 SharedStrategyManager::<i32, u8, std::vec::IntoIter<IndexedDataOwned<i32, u8>>>::new(
39 strat,
40 );
41 let _ = strat_manager.get_strategy_at_index(0);
42 }
43}