use std::collections::HashMap;
use crate::prelude::*;
#[derive(Clone, Debug, Default, PartialEq)]
pub struct Chromosome {
genes: HashMap<String, Gene>,
}
impl Chromosome {
#[inline]
pub fn new() -> Self {
Self {
..Default::default()
}
}
#[inline]
pub fn gene(&self, gene_name: &str) -> Option<&Gene> {
self.genes.get(gene_name)
}
#[inline]
pub fn genes(&self) -> &HashMap<String, Gene> {
&self.genes
}
#[inline]
pub fn insert_gene(&mut self, gene_name: &str, gene: Gene) {
self.genes.insert(gene_name.to_string(), gene);
}
#[inline]
pub fn insert_genes(&mut self, genes: Vec<(&str, Gene)>) {
for gene in genes {
self.insert_gene(gene.0, gene.1);
}
}
#[inline]
pub fn set_gene(&mut self, gene_name: &str, gene: Gene) -> Result<(), &str> {
*self.genes.get_mut(gene_name).ok_or("No gene by that name exists")? = gene;
Ok(())
}
}