Genome builder basics

This commit is contained in:
rendo 2026-03-26 13:29:28 +05:00
commit fdb5e59eff
5 changed files with 86 additions and 5 deletions

View file

@ -0,0 +1,63 @@
use crate::genetics::prelude::*;
pub struct GenomeBuilder {
genome: PlantGenome,
current_gene: usize,
}
impl GenomeBuilder {
pub fn new() -> Self {
Self {
genome: PlantGenome::new(),
current_gene: 0
}
}
pub fn finish(mut self) -> PlantGenome {
self.genome.update_graph();
return self.genome;
}
pub fn create_root(mut self, root: Gene) -> Result<Self,GenomeBuilderError> {
if self.genome.genes.len() > 0 {
return Err(GenomeBuilderError::RootExists);
}
self.genome.genes.push(root);
return Ok(self);
}
pub fn insert_gene(mut self, gene: Gene, parent: Gene) -> Result<Self,GenomeBuilderError> {
if self.genome.genes.contains(&gene){
return Err(GenomeBuilderError::GeneExists);
}
let edge = Edge::new(parent,gene.clone());
if self.genome.edges.contains(&edge) {
return Err(GenomeBuilderError::EdgeExists);
}
self.genome.edges.push(edge);
self.current_gene = self.genome.genes.len();
self.genome.genes.push(gene);
Ok(self)
}
pub fn add_gene(mut self, gene: Gene) -> Result<Self,GenomeBuilderError> {
if self.genome.genes.len() == 0 {
return Err(GenomeBuilderError::RootDoesntExist);
}
todo!();
}
}
#[derive(Debug)]
pub enum GenomeBuilderError {
RootExists,
RootDoesntExist,
GeneExists,
EdgeExists,
}