mod basic;
mod configurable;
mod preflop_chart;
mod simple;
use std::sync::Arc;
use smallvec::SmallVec;
use crate::arena::{GameState, action::AgentAction};
use super::{CFRState, TraversalState};
pub type ActionVec = SmallVec<[AgentAction; 8]>;
pub use basic::BasicCFRActionGenerator;
pub use configurable::{
ConfigurableActionConfig, ConfigurableActionConfigError, ConfigurableActionGenerator,
RoundActionConfig,
};
pub use preflop_chart::{
PositionCharts, PreflopChartActionConfig, PreflopChartActionGenerator, PreflopChartConfig,
PreflopChartConfigError,
};
pub use simple::SimpleActionGenerator;
pub trait ActionGenerator {
type Config: Clone + Send + Sync;
fn new(cfr_state: CFRState, traversal_state: TraversalState, config: Arc<Self::Config>)
-> Self;
fn config(&self) -> &Self::Config;
fn cfr_state(&self) -> &CFRState;
fn traversal_state(&self) -> &TraversalState;
fn gen_possible_actions(&self, game_state: &GameState) -> ActionVec;
}