Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.25 KB | None | 0 0
  1. static RAWDATA:&[u8] = &[ 0b01010000, 0b01100000, 0b01110000, 0b10000000, 0b10010000 ];
  2.  
  3. enum Nod {
  4. Normal{mask:u32,size:usize,zero:Box<Nod>,one:Box<Nod>},
  5. Nil,
  6. }
  7.  
  8. fn accept(nod:&mut Nod, _nr:u32) -> () {
  9. match nod {
  10. Nod::Normal{mask, size: _, zero: _, one: _} => {
  11. if *mask & _nr > 0 {
  12. println!("am 1");
  13. } else {
  14. println!("am 0");
  15. }
  16. },
  17. Nod::Nil => {
  18. println!("Am Nil!");
  19. }
  20. }
  21. }
  22.  
  23. fn partition(data:&[u8], mask:u8) -> (usize, usize) {
  24. let mut zeros:usize = 0;
  25. let mut ones:usize = 0;
  26. for e in data {
  27. if e & mask == 0 {
  28. zeros += 1;
  29. } else {
  30. ones += 1;
  31. }
  32. }
  33. (zeros, ones)
  34. }
  35.  
  36. fn main() {
  37. let ROOT_NODE:&mut Nod = &mut Nod::Normal {
  38. mask: 0b10000000,
  39. size:0,
  40. zero:Box::new(Nod::Nil),
  41. one:Box::new(Nod::Nil)
  42. };
  43.  
  44. accept(ROOT_NODE, 0b10000000);
  45. let (zeros, ones) = partition(RAWDATA, 0b1000);
  46. println!("{}\n{}", zeros, ones);
  47. let (zeros2, ones2) = partition(&RAWDATA[0..zeros], 0b0100);
  48. println!("{}\n{}", zeros2, ones2);
  49. let (zeros2, ones2) = partition(&RAWDATA[zeros..], 0b0100);
  50. println!("{}\n{}", zeros2, ones2);
  51. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement