SHARE
TWEET

Untitled

a guest Aug 24th, 2019 68 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. pub fn encode(data: &[u8]) -> Vec<u8> {
  2.     let mut nodes = Vec::new();
  3.     nodes.push(Node::blank(&data[0..1]));
  4.     let mut idx = 1;
  5.     'outer: while idx < data.len() {
  6.         let dict = &data[0..idx];
  7.         let mut best = Node::blank(&data[idx..idx + 1]);
  8.         let mut len = 1;
  9.         'inner: while idx + len < data.len() && len <= idx {
  10.             let buf = &data[idx..idx + len];
  11.             match dict.windows(buf.len()).position(|win| win == buf) {
  12.                 Some(pos) => {
  13.                     println!("{:?}", len);
  14.                     best = Node {
  15.                         offset: pos,
  16.                         length: buf.len(),
  17.                         data: Vec::from(buf),
  18.                     };
  19.                     len += 1;
  20.                     continue 'inner;
  21.                 }
  22.                 None => {
  23.                     idx = if best.length == 0 {
  24.                         idx + 1
  25.                     } else {
  26.                         idx + best.length
  27.                     };
  28.                     nodes.push(best);
  29.                     continue 'outer;
  30.                 }
  31.             };
  32.         }
  33.     }
  34.     println!("{:?}", nodes);
  35.     serialize_nodes(nodes.as_slice())
  36. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top