pub mod index_shifter;
pub mod segment_permutation_shifter;
pub mod combined_shifter;
pub mod shifting_square_breadth_first_search_shifter;
pub mod scaling_square_breadth_first_search_shifter;
pub mod hyper_graph_cliche_shifter;
use std::rc::Rc;
use crate::IndexedElement;
pub trait Shifter {
type T;
fn try_forward(&mut self) -> bool;
fn try_backward(&mut self) -> bool;
fn try_increment(&mut self) -> bool;
fn get_indexed_element(&self) -> IndexedElement<Self::T>;
fn get_length(&self) -> usize;
fn get_element_index_and_state_index(&self) -> (usize, usize);
fn get_states(&self) -> Vec<Rc<Self::T>>;
fn randomize(&mut self);
fn reset(&mut self) {
while self.try_backward() {
}
}
}