[][src]Crate bswp

Utilities for swapping bytes using patterns and masks.

Quick Start

Iterators

use bswp::pattern::{Pattern, Predicate, swap_iter};

let pattern = Pattern::new(0x42).with_mask(0xFF); // replace byte by 0x42
let predicate = Predicate::new().with_periodicity(2).with_offset(1); // replace odd bytes
let swaps = &[(pattern, predicate)];

let source: [u8; 4] = [0x41, 0x41, 0x41, 0x41];
let swapped = swap_iter(&source, swaps); // iterator on result
let swapped: Vec<u8> = swapped.collect();
assert_eq!(swapped, vec!(0x41, 0x42, 0x41, 0x42));

Mutating File-like Data

use std::io::Cursor;
use bswp::pattern::{Pattern, Predicate};
use bswp::io::swap_io;

// in memory reader (implements `Read`)
let mut reader: Cursor<Vec<u8>> = Cursor::new(vec![0x41, 0x42, 0x43, 0x44]);
// in memory writer (implements `Write`)
let mut writer: Cursor<Vec<u8>> = Cursor::new(Vec::new());

let swaps: &[(Pattern, Predicate)] = &[(Pattern::new(0x42).with_mask(0xFF), Predicate::new().with_periodicity(2).with_offset(0))];
let swap = swap_io(&mut reader, &mut writer, swaps);
assert!(swap.is_ok());
assert_eq!(swap.unwrap(), 4); // 4 bytes written
assert_eq!(writer.into_inner(), vec![0x42, 0x42, 0x42, 0x44])

Modules

io

Byte swap IO utils (mut)

pattern

Pattern, Predicate and iterator utils (pure)

Constants

BUFFER_SIZE

default buffer size for io: 8KB

Traits

BytePattern

Pattern on byte.

PositionPredicate

Predicate on byte position.