Compare commits
2 Commits
8f4c7596c4
...
8cbbb9b3ec
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8cbbb9b3ec | ||
|
|
208d804f8f |
46
src/seq.rs
46
src/seq.rs
@@ -55,7 +55,8 @@ impl SynSeq {
|
|||||||
#[derive(PartialEq)]
|
#[derive(PartialEq)]
|
||||||
pub struct Seq {
|
pub struct Seq {
|
||||||
beats: Vec<(usize, tone::Tone)>,
|
beats: Vec<(usize, tone::Tone)>,
|
||||||
state: Option<tone::Tone>,
|
had_more: bool,
|
||||||
|
eof: bool,
|
||||||
}
|
}
|
||||||
|
|
||||||
fn new() -> Seq {
|
fn new() -> Seq {
|
||||||
@@ -66,7 +67,8 @@ impl Seq {
|
|||||||
fn new() -> Seq {
|
fn new() -> Seq {
|
||||||
Seq {
|
Seq {
|
||||||
beats: vec![],
|
beats: vec![],
|
||||||
state: None,
|
had_more: false,
|
||||||
|
eof: false,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -79,12 +81,22 @@ impl Seq {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn pop(&mut self) -> (Option<tone::Tone>, bool) {
|
fn pop(&mut self) -> (Option<tone::Tone>, bool) {
|
||||||
let state_before = self.state.clone();
|
let mut changed = !self.had_more && self.beats.len() > 0;
|
||||||
let tone_after = self._pop();
|
self.had_more = match self.beats.len() {
|
||||||
if state_before != tone_after {
|
0 => false,
|
||||||
self.state = tone_after.clone();
|
_ => self.beats[0].0 > 1,
|
||||||
|
};
|
||||||
|
let eof_before = self.eof;
|
||||||
|
self.eof = self.beats.len() == 0;
|
||||||
|
if !eof_before && self.eof {
|
||||||
|
changed = true;
|
||||||
}
|
}
|
||||||
(tone_after, self.state != state_before)
|
let tone = self._pop();
|
||||||
|
eprintln!(
|
||||||
|
" popped ({:?}, {}): had_more={}, beats={:?} eof={} from {}",
|
||||||
|
tone, changed, self.had_more, self.beats, self.eof, eof_before,
|
||||||
|
);
|
||||||
|
(tone, changed)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn _pop(&mut self) -> Option<tone::Tone> {
|
fn _pop(&mut self) -> Option<tone::Tone> {
|
||||||
@@ -130,20 +142,22 @@ mod test {
|
|||||||
fn test_seq() {
|
fn test_seq() {
|
||||||
let mut seq = new();
|
let mut seq = new();
|
||||||
|
|
||||||
seq.append("c");
|
seq.append("c c");
|
||||||
seq.append("4d");
|
seq.append("4d");
|
||||||
seq.append("2-");
|
seq.append("2-");
|
||||||
seq.append("g 2e");
|
seq.append("g 2e");
|
||||||
|
|
||||||
assert_eq!(seq.beats.len(), 5);
|
assert_eq!(seq.beats.len(), 6);
|
||||||
assert_eq!(seq.len(), 10);
|
assert_eq!(seq.len(), 11);
|
||||||
|
|
||||||
assert_eq!(seq.beats[0], (1 as usize, tone::new("c")));
|
assert_eq!(seq.beats[0], (1 as usize, tone::new("c")));
|
||||||
assert_eq!(seq.beats[1], (4 as usize, tone::new("d")));
|
assert_eq!(seq.beats[1], (1 as usize, tone::new("c")));
|
||||||
assert_eq!(seq.beats[2], (2 as usize, tone::new("!")));
|
assert_eq!(seq.beats[2], (4 as usize, tone::new("d")));
|
||||||
assert_eq!(seq.beats[3], (1 as usize, tone::new("g")));
|
assert_eq!(seq.beats[3], (2 as usize, tone::new("!")));
|
||||||
assert_eq!(seq.beats[4], (2 as usize, tone::new("e")));
|
assert_eq!(seq.beats[4], (1 as usize, tone::new("g")));
|
||||||
|
assert_eq!(seq.beats[5], (2 as usize, tone::new("e")));
|
||||||
|
|
||||||
|
assert_eq!(seq.pop(), (Some(tone::new("c")), true));
|
||||||
assert_eq!(seq.pop(), (Some(tone::new("c")), true));
|
assert_eq!(seq.pop(), (Some(tone::new("c")), true));
|
||||||
assert_eq!(seq.pop(), (Some(tone::new("d")), true));
|
assert_eq!(seq.pop(), (Some(tone::new("d")), true));
|
||||||
for _ in 1..4 {
|
for _ in 1..4 {
|
||||||
@@ -154,7 +168,7 @@ mod test {
|
|||||||
assert_eq!(seq.pop(), (Some(tone::new("g")), true));
|
assert_eq!(seq.pop(), (Some(tone::new("g")), true));
|
||||||
assert_eq!(seq.pop(), (Some(tone::new("e")), true));
|
assert_eq!(seq.pop(), (Some(tone::new("e")), true));
|
||||||
assert_eq!(seq.pop(), (Some(tone::new("e")), false));
|
assert_eq!(seq.pop(), (Some(tone::new("e")), false));
|
||||||
assert_eq!(seq.pop(), (None, true));
|
assert_eq!(seq.pop(), (None, true), "shouldve newly had no more");
|
||||||
assert_eq!(seq.pop(), (None, false));
|
assert_eq!(seq.pop(), (None, false), "shouldve still had no more");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user