Added function and selector to prevent selection of specific random NodeIds
This commit is contained in:
parent
360adc10be
commit
2c48e979c3
1 changed files with 48 additions and 0 deletions
|
@ -652,6 +652,54 @@ impl UICategory {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Clone, Copy)]
|
||||||
|
pub enum RandNodeSelector {
|
||||||
|
Any,
|
||||||
|
OnlyUseful,
|
||||||
|
}
|
||||||
|
|
||||||
|
fn rand_node_satisfies_spec(nid: NodeId, sel: RandNodeSelector) -> bool {
|
||||||
|
if let NodeId::Nop = nid {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
match sel {
|
||||||
|
RandNodeSelector::Any => true,
|
||||||
|
RandNodeSelector::OnlyUseful => {
|
||||||
|
match nid {
|
||||||
|
NodeId::Nop => false,
|
||||||
|
NodeId::Out(_) => false,
|
||||||
|
NodeId::FbRd(_) => false,
|
||||||
|
NodeId::Test(_) => false,
|
||||||
|
_ => true,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn get_rand_node_id(count: usize, sel: RandNodeSelector) -> Vec<NodeId> {
|
||||||
|
let mut sm = crate::dsp::helpers::SplitMix64::new_time_seed();
|
||||||
|
let mut out = vec![];
|
||||||
|
|
||||||
|
let mut cnt = 0;
|
||||||
|
while cnt < 100 && out.len() < count {
|
||||||
|
let cur = ALL_NODE_IDS[sm.next_u64() as usize % ALL_NODE_IDS.len()];
|
||||||
|
|
||||||
|
if rand_node_satisfies_spec(cur, sel) {
|
||||||
|
out.push(cur);
|
||||||
|
}
|
||||||
|
|
||||||
|
cnt += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
while out.len() < count {
|
||||||
|
out.push(NodeId::Nop);
|
||||||
|
}
|
||||||
|
|
||||||
|
out
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
macro_rules! make_node_info_enum {
|
macro_rules! make_node_info_enum {
|
||||||
($s1: ident => $v1: ident,
|
($s1: ident => $v1: ident,
|
||||||
$($str: ident => $variant: ident
|
$($str: ident => $variant: ident
|
||||||
|
|
Loading…
Reference in a new issue