@@ -2288,6 +2288,22 @@ pub mod bytes {
2288
2288
use uint;
2289
2289
use vec:: raw;
2290
2290
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
+ }
2291
2307
2292
2308
/// Bytewise string comparison
2293
2309
pub fn memcmp ( a : & ~[ u8 ] , b : & ~[ u8 ] ) -> int {
@@ -3941,4 +3957,14 @@ mod tests {
3941
3957
t ! ( @[ int] ) ;
3942
3958
t ! ( ~[ int] ) ;
3943
3959
}
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
+ }
3944
3970
}
0 commit comments