on master help sign in
rev
commita9deec4b89a30b3a81e3f5eaaa447e368679c4e7 authoriko <mail@iko.soy> dateMon 26 Aug 2024, 01:26 (2 years ago) parent7e0de8e
1 file changed+21
nock/src/jets.rs+21
nock/src/jets.rs+21
@@ -72,6 +72,7 @@ pub fn generate_jets() -> Jets {
7272 (84358434946425438379820219100952030132, RSH),
7373 (49642221456321333759873032692286222867, RAP),
7474 (92956425869648916777812729456192604084, REP),
75+ (302196507237993702819920888576650809366, REV),
7576 ])
7677}
7778
@@ -711,3 +712,23 @@ static REP: Jet = |ctx, n| {
711712
712713 Rc::new(Noun::Atom(target))
713714};
715+
716+static REV: Jet = |ctx, n| {
717+ let (bloq, b) = n.as_cell().unwrap();
718+ let (len, dat) = b.as_cell().unwrap();
719+ let bloq = bloq.as_u32().unwrap();
720+ let len = len.as_u32().unwrap();
721+ let mut dat: Atom = dat.as_atom().unwrap().clone();
722+
723+ let bits = 2u32.pow(bloq);
724+ let mask = (&ctx.big_uints.one << bits) - &ctx.big_uints.one;
725+
726+ let mut target = ctx.big_uints.zero.clone();
727+
728+ for _ in 0..len {
729+ target = (target << bits) | (&mask & &dat);
730+ dat = dat >> bits;
731+ }
732+
733+ Rc::new(Noun::Atom(target))
734+};