Skip to content

Commit 524a92c

Browse files
lilyballemberian
authored andcommitted
Add method .set_memory in vec::bytes for &[u8]
Add new trait vec::bytes::MutableByteVector which currently defines one method .set_memory().
1 parent 35314c9 commit 524a92c

File tree

1 file changed

+26
-0
lines changed

1 file changed

+26
-0
lines changed

src/libstd/vec.rs

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2288,6 +2288,22 @@ pub mod bytes {
22882288
use uint;
22892289
use vec::raw;
22902290
use vec;
2291+
use ptr;
2292+
2293+
/// A trait for operations on mutable operations on `[u8]`
2294+
pub trait MutableByteVector {
2295+
/// Sets all bytes of the receiver to the given value.
2296+
pub fn set_memory(self, value: u8);
2297+
}
2298+
2299+
impl<'self> MutableByteVector for &'self mut [u8] {
2300+
#[inline]
2301+
fn set_memory(self, value: u8) {
2302+
do vec::as_mut_buf(self) |p, len| {
2303+
unsafe { ptr::set_memory(p, value, len) };
2304+
}
2305+
}
2306+
}
22912307

22922308
/// Bytewise string comparison
22932309
pub fn memcmp(a: &~[u8], b: &~[u8]) -> int {
@@ -3941,4 +3957,14 @@ mod tests {
39413957
t!(@[int]);
39423958
t!(~[int]);
39433959
}
3960+
3961+
#[test]
3962+
fn test_bytes_set_memory() {
3963+
use vec::bytes::MutableByteVector;
3964+
let mut values = [1u8,2,3,4,5];
3965+
values.mut_slice(0,5).set_memory(0xAB);
3966+
assert_eq!(values, [0xAB, 0xAB, 0xAB, 0xAB, 0xAB]);
3967+
values.mut_slice(2,4).set_memory(0xFF);
3968+
assert_eq!(values, [0xAB, 0xAB, 0xFF, 0xFF, 0xAB]);
3969+
}
39443970
}

0 commit comments

Comments
 (0)