gol_core/evolution/
strategy_manager.rs

1use 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}