Push pvqkqxlkkwry #17
@@ -189,58 +189,12 @@ impl WalkState {
|
||||
}
|
||||
|
||||
pub fn leavable(&self, graph: &GraphDeBruijn) -> bool {
|
||||
WalkState {
|
||||
kmer: self.kmer,
|
||||
node: self.node,
|
||||
direct: !self.direct,
|
||||
}
|
||||
.reachable(graph)
|
||||
self.walk(graph).is_some()
|
||||
}
|
||||
|
||||
pub fn reachable(&self, graph: &GraphDeBruijn) -> bool {
|
||||
if self.direct {
|
||||
if self.node.can_extend_left() {
|
||||
let next = self.kmer.into_kmer().push_left(self.node.left_nuc());
|
||||
let cnext = next.canonical();
|
||||
let dnext = next.raw() == cnext.raw();
|
||||
let next_node = Node(
|
||||
graph
|
||||
.nodes
|
||||
.get(&cnext)
|
||||
.unwrap()
|
||||
.load(std::sync::atomic::Ordering::Relaxed),
|
||||
);
|
||||
!next_node.is_visited()
|
||||
&& if dnext {
|
||||
next_node.can_extend_right()
|
||||
} else {
|
||||
next_node.can_extend_left()
|
||||
}
|
||||
} else {
|
||||
false
|
||||
}
|
||||
} else {
|
||||
if self.node.can_extend_right() {
|
||||
let next = self.kmer.into_kmer().push_right(self.node.right_nuc());
|
||||
let cnext = next.canonical();
|
||||
let dnext = next.raw() == cnext.raw();
|
||||
let next_node = Node(
|
||||
graph
|
||||
.nodes
|
||||
.get(&cnext)
|
||||
.unwrap()
|
||||
.load(std::sync::atomic::Ordering::Relaxed),
|
||||
);
|
||||
!next_node.is_visited()
|
||||
&& if dnext {
|
||||
next_node.can_extend_left()
|
||||
} else {
|
||||
next_node.can_extend_right()
|
||||
}
|
||||
} else {
|
||||
false
|
||||
}
|
||||
}
|
||||
WalkState { kmer: self.kmer, node: self.node, direct: !self.direct }
|
||||
.leavable(graph)
|
||||
}
|
||||
|
||||
pub fn walk(&self, graph: &GraphDeBruijn) -> Option<WalkState> {
|
||||
|
||||
Reference in New Issue
Block a user