Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- static RAWDATA:&[u8] = &[ 0b01010000, 0b01100000, 0b01110000, 0b10000000, 0b10010000 ];
- enum Nod {
- Normal{mask:u32,size:usize,zero:Box<Nod>,one:Box<Nod>},
- Nil,
- }
- fn accept(nod:&mut Nod, _nr:u32) -> () {
- match nod {
- Nod::Normal{mask, size: _, zero: _, one: _} => {
- if *mask & _nr > 0 {
- println!("am 1");
- } else {
- println!("am 0");
- }
- },
- Nod::Nil => {
- println!("Am Nil!");
- }
- }
- }
- fn partition(data:&[u8], mask:u8) -> (usize, usize) {
- let mut zeros:usize = 0;
- let mut ones:usize = 0;
- for e in data {
- if e & mask == 0 {
- zeros += 1;
- } else {
- ones += 1;
- }
- }
- (zeros, ones)
- }
- fn main() {
- let ROOT_NODE:&mut Nod = &mut Nod::Normal {
- mask: 0b10000000,
- size:0,
- zero:Box::new(Nod::Nil),
- one:Box::new(Nod::Nil)
- };
- accept(ROOT_NODE, 0b10000000);
- let (zeros, ones) = partition(RAWDATA, 0b1000);
- println!("{}\n{}", zeros, ones);
- let (zeros2, ones2) = partition(&RAWDATA[0..zeros], 0b0100);
- println!("{}\n{}", zeros2, ones2);
- let (zeros2, ones2) = partition(&RAWDATA[zeros..], 0b0100);
- println!("{}\n{}", zeros2, ones2);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement