Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- loop {
- match *self {
- Machine::Counting {
- len,
- first_id,
- deadline,
- seen_blocked,
- } => if first_id == case_id {
- *self = Machine::Initialized {
- pos: 0,
- state: if seen_blocked {
- State::TryOnce { disconn_count: 0 }
- } else {
- State::SpinTry { disconn_count: 0 }
- },
- len,
- start: gen_random(len),
- deadline,
- };
- } else {
- *self = Machine::Counting {
- len: len + 1,
- first_id: if first_id == CaseId::none() {
- case_id
- } else {
- first_id
- },
- deadline,
- seen_blocked,
- };
- return None;
- },
- Machine::Initialized {
- pos,
- mut state,
- len,
- start,
- deadline,
- } => if pos >= 2 * len {
- state.transition(len, deadline);
- *self = Machine::Initialized {
- pos: 0,
- state,
- len,
- start,
- deadline,
- };
- } else {
- *self = Machine::Initialized {
- pos: pos + 1,
- state,
- len,
- start,
- deadline,
- };
- if let Machine::Initialized { ref mut state, .. } = *self {
- if start <= pos && pos < start + len {
- return Some(state);
- } else {
- return None;
- }
- }
- },
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement