| 37 | /// This relies on an external method having properly allocated the WasmSlice before calling this method. |
| 38 | #[no_mangle] |
| 39 | pub unsafe extern "C" fn reverse_bytes( |
| 40 | slice_ptr: i32, |
| 41 | slice_len: i32, |
| 42 | slice_ref: &mut Owned<WasmSlice>, |
| 43 | ) { |
| 44 | let slice = WasmSlice::borrowed(slice_ptr, &slice_len); |
| 45 | println!( |
| 46 | "slices::reverse_bytes: ptr: {:x?} len: {}", |
| 47 | slice_ptr, slice_len |
| 48 | ); |
| 49 | |
| 50 | let data: &[u8] = slice.as_bytes(); |
| 51 | println!("slices::reverse_bytes: received bytes {:x?}", data); |
| 52 | |
| 53 | let mut reversed: Vec<u8> = Vec::with_capacity(data.len()); |
| 54 | for b in data.iter().rev() { |
| 55 | reversed.push(*b); |
| 56 | } |
| 57 | |
| 58 | let reversed = reversed.into_boxed_slice(); |
| 59 | let reversed = Owned::<WasmSlice>::from(reversed); |
| 60 | |
| 61 | // assign the return value |
| 62 | slice_ref.replace(reversed); |
| 63 | } |
| 64 | |
| 65 | /// # Safety |
| 66 | /// Assumes that the data input is properly allocated slice, and the result has an allocated WasmSlice object at the pointer. |