Dynamic genome building
This commit is contained in:
parent
c5d69da608
commit
a9615c07a7
5 changed files with 94 additions and 12 deletions
|
|
@ -20,6 +20,7 @@ impl GenomeBuilder {
|
|||
}
|
||||
|
||||
pub fn create_root(mut self, root: Gene) -> Result<Self,GenomeBuilderError> {
|
||||
// Check for root existance
|
||||
if self.genome.genes.len() > 0 {
|
||||
return Err(GenomeBuilderError::RootExists);
|
||||
}
|
||||
|
|
@ -29,15 +30,12 @@ impl GenomeBuilder {
|
|||
}
|
||||
|
||||
pub fn insert_gene(mut self, gene: Gene, parent: Gene) -> Result<Self,GenomeBuilderError> {
|
||||
// Check for gene collision
|
||||
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();
|
||||
|
|
@ -46,10 +44,37 @@ impl GenomeBuilder {
|
|||
Ok(self)
|
||||
}
|
||||
pub fn add_gene(mut self, gene: Gene) -> Result<Self,GenomeBuilderError> {
|
||||
if self.genome.genes.len() == 0 {
|
||||
// Check for root existance
|
||||
if self.genome.genes.len() == 0 {
|
||||
return Err(GenomeBuilderError::RootDoesntExist);
|
||||
}
|
||||
todo!();
|
||||
}
|
||||
// Check for gene collision
|
||||
if self.genome.genes.contains(&gene){
|
||||
return Err(GenomeBuilderError::GeneExists);
|
||||
}
|
||||
let edge = Edge::new(self.get_current_gene().clone(),gene.clone());
|
||||
self.genome.edges.push(edge);
|
||||
|
||||
self.current_gene = self.genome.genes.len();
|
||||
self.genome.genes.push(gene);
|
||||
|
||||
Ok(self)
|
||||
|
||||
}
|
||||
pub fn back(mut self, amount: Option<usize>) -> Self {
|
||||
for _ in 0..amount.unwrap_or(0) {
|
||||
|
||||
}
|
||||
self
|
||||
}
|
||||
#[inline(always)]
|
||||
pub fn get_current_gene(&self) -> &Gene {
|
||||
&self.genome.genes[self.current_gene]
|
||||
}
|
||||
|
||||
#[inline(always)]
|
||||
pub fn get_current_gene_mut(&mut self) -> &mut Gene {
|
||||
&mut self.genome.genes[self.current_gene]
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue