SHARE
TWEET

Untitled

a guest Oct 12th, 2017 51 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. loop {
  2.     match *self {
  3.         Machine::Counting {
  4.             len,
  5.             first_id,
  6.             deadline,
  7.             seen_blocked,
  8.         } => if first_id == case_id {
  9.             *self = Machine::Initialized {
  10.                 pos: 0,
  11.                 state: if seen_blocked {
  12.                     State::TryOnce { disconn_count: 0 }
  13.                 } else {
  14.                     State::SpinTry { disconn_count: 0 }
  15.                 },
  16.                 len,
  17.                 start: gen_random(len),
  18.                 deadline,
  19.             };
  20.         } else {
  21.             *self = Machine::Counting {
  22.                 len: len + 1,
  23.                 first_id: if first_id == CaseId::none() {
  24.                     case_id
  25.                 } else {
  26.                     first_id
  27.                 },
  28.                 deadline,
  29.                 seen_blocked,
  30.             };
  31.             return None;
  32.         },
  33.         Machine::Initialized {
  34.             pos,
  35.             mut state,
  36.             len,
  37.             start,
  38.             deadline,
  39.         } => if pos >= 2 * len {
  40.             state.transition(len, deadline);
  41.             *self = Machine::Initialized {
  42.                 pos: 0,
  43.                 state,
  44.                 len,
  45.                 start,
  46.                 deadline,
  47.             };
  48.         } else {
  49.             *self = Machine::Initialized {
  50.                 pos: pos + 1,
  51.                 state,
  52.                 len,
  53.                 start,
  54.                 deadline,
  55.             };
  56.             if let Machine::Initialized { ref mut state, .. } = *self {
  57.                 if start <= pos && pos < start + len {
  58.                     return Some(state);
  59.                 } else {
  60.                     return None;
  61.                 }
  62.             }
  63.         },
  64.     }
  65. }
RAW Paste Data
Top