@@ -95,6 +95,10 @@ use option::{Some, None, Option};
95
95
96
96
use cmp:: { PartialEq , Eq , PartialOrd , Equiv , Ordering , Less , Equal , Greater } ;
97
97
98
+ pub use intrinsics:: copy_memory;
99
+ pub use intrinsics:: copy_nonoverlapping_memory;
100
+ pub use intrinsics:: set_memory;
101
+
98
102
/// Create a null pointer.
99
103
///
100
104
/// # Example
@@ -123,86 +127,6 @@ pub fn null<T>() -> *const T { 0 as *const T }
123
127
#[ unstable = "may need a different name after pending changes to pointer types" ]
124
128
pub fn mut_null < T > ( ) -> * mut T { 0 as * mut T }
125
129
126
- /// Copies data from one location to another.
127
- ///
128
- /// Copies `count` elements (not bytes) from `src` to `dst`. The source
129
- /// and destination may overlap.
130
- ///
131
- /// `copy_memory` is semantically equivalent to C's `memmove`.
132
- ///
133
- /// # Example
134
- ///
135
- /// Efficiently create a Rust vector from an unsafe buffer:
136
- ///
137
- /// ```
138
- /// use std::ptr;
139
- ///
140
- /// unsafe fn from_buf_raw<T>(ptr: *const T, elts: uint) -> Vec<T> {
141
- /// let mut dst = Vec::with_capacity(elts);
142
- /// dst.set_len(elts);
143
- /// ptr::copy_memory(dst.as_mut_ptr(), ptr, elts);
144
- /// dst
145
- /// }
146
- /// ```
147
- ///
148
- #[ inline]
149
- #[ unstable]
150
- pub unsafe fn copy_memory < T > ( dst : * mut T , src : * const T , count : uint ) {
151
- intrinsics:: copy_memory ( dst, src, count)
152
- }
153
-
154
- /// Copies data from one location to another.
155
- ///
156
- /// Copies `count` elements (not bytes) from `src` to `dst`. The source
157
- /// and destination may *not* overlap.
158
- ///
159
- /// `copy_nonoverlapping_memory` is semantically equivalent to C's `memcpy`.
160
- ///
161
- /// # Example
162
- ///
163
- /// A safe swap function:
164
- ///
165
- /// ```
166
- /// use std::mem;
167
- /// use std::ptr;
168
- ///
169
- /// fn swap<T>(x: &mut T, y: &mut T) {
170
- /// unsafe {
171
- /// // Give ourselves some scratch space to work with
172
- /// let mut t: T = mem::uninitialized();
173
- ///
174
- /// // Perform the swap, `&mut` pointers never alias
175
- /// ptr::copy_nonoverlapping_memory(&mut t, &*x, 1);
176
- /// ptr::copy_nonoverlapping_memory(x, &*y, 1);
177
- /// ptr::copy_nonoverlapping_memory(y, &t, 1);
178
- ///
179
- /// // y and t now point to the same thing, but we need to completely forget `tmp`
180
- /// // because it's no longer relevant.
181
- /// mem::forget(t);
182
- /// }
183
- /// }
184
- /// ```
185
- ///
186
- /// # Safety Note
187
- ///
188
- /// If the source and destination overlap then the behavior of this
189
- /// function is undefined.
190
- #[ inline]
191
- #[ unstable]
192
- pub unsafe fn copy_nonoverlapping_memory < T > ( dst : * mut T ,
193
- src : * const T ,
194
- count : uint ) {
195
- intrinsics:: copy_nonoverlapping_memory ( dst, src, count)
196
- }
197
-
198
- /// Invokes memset on the specified pointer, setting `count * size_of::<T>()`
199
- /// bytes of memory starting at `dst` to `c`.
200
- #[ inline]
201
- #[ experimental = "uncertain about naming and semantics" ]
202
- pub unsafe fn set_memory < T > ( dst : * mut T , c : u8 , count : uint ) {
203
- intrinsics:: set_memory ( dst, c, count)
204
- }
205
-
206
130
/// Zeroes out `count * size_of::<T>` bytes of memory at `dst`
207
131
#[ inline]
208
132
#[ experimental = "uncertain about naming and semantics" ]
0 commit comments