Genome builder basics
This commit is contained in:
parent
23d9ab696c
commit
fdb5e59eff
5 changed files with 86 additions and 5 deletions
63
rust-pvz-genetics/src/genetics/genome_builder.rs
Normal file
63
rust-pvz-genetics/src/genetics/genome_builder.rs
Normal 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,
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue