Skip to content

Commit d978752

Browse files
author
Nick Desaulniers
committed
Convert all uses of vec::slice to vec::view Issue #3869
Rename const_view to const_slice Renamed mut_view to mut_slice
1 parent faef933 commit d978752

File tree

20 files changed

+123
-120
lines changed

20 files changed

+123
-120
lines changed

src/compiletest/runtest.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -519,7 +519,8 @@ fn make_run_args(config: config, _props: TestProps, testfile: &Path) ->
519519
};
520520

521521
let args = toolargs + ~[make_exe_name(config, testfile).to_str()];
522-
return ProcArgs {prog: args[0], args: vec::slice(args, 1, args.len())};
522+
return ProcArgs {prog: args[0],
523+
args: vec::slice(args, 1, args.len()).to_vec()};
523524
}
524525

525526
fn split_maybe_args(argstr: Option<~str>) -> ~[~str] {

src/libcargo/cargo.rc

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1553,7 +1553,7 @@ pub fn cmd_list(c: &Cargo) {
15531553
sync(c);
15541554

15551555
if vec::len(c.opts.free) >= 3u {
1556-
let v = vec::view(c.opts.free, 2u, vec::len(c.opts.free));
1556+
let v = vec::slice(c.opts.free, 2u, vec::len(c.opts.free));
15571557
for vec::each(v) |name| {
15581558
if !valid_pkg_name(*name) {
15591559
error(fmt!("'%s' is an invalid source name", *name));

src/libcore/io.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -246,7 +246,7 @@ impl<T: Reader> T : ReaderUtil {
246246
// over-read by reading 1-byte per char needed
247247
nbread = if ncreq > nbreq { ncreq } else { nbreq };
248248
if nbread > 0 {
249-
bytes = vec::slice(bytes, offset, bytes.len());
249+
bytes = vec::slice(bytes, offset, bytes.len()).to_vec();
250250
}
251251
}
252252
move chars
@@ -531,7 +531,7 @@ impl BytesReader: Reader {
531531
fn read(&self, bytes: &[mut u8], len: uint) -> uint {
532532
let count = uint::min(len, self.bytes.len() - self.pos);
533533
534-
let view = vec::view(self.bytes, self.pos, self.bytes.len());
534+
let view = vec::slice(self.bytes, self.pos, self.bytes.len());
535535
vec::bytes::copy_memory(bytes, view, count);
536536
537537
self.pos += count;
@@ -1008,7 +1008,7 @@ impl BytesWriter: Writer {
10081008
unsafe { vec::raw::set_len(&mut bytes, count); }
10091009
10101010
{
1011-
let view = vec::mut_view(bytes, self.pos, count);
1011+
let view = vec::mut_slice(bytes, self.pos, count);
10121012
vec::bytes::copy_memory(view, v, v_len);
10131013
}
10141014

src/libcore/vec.rs

Lines changed: 59 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -220,21 +220,21 @@ pub pure fn head<T: Copy>(v: &[const T]) -> T { v[0] }
220220

221221
/// Returns a vector containing all but the first element of a slice
222222
pub pure fn tail<T: Copy>(v: &[const T]) -> ~[T] {
223-
return slice(v, 1u, len(v));
223+
slice(v, 1u, len(v)).to_vec()
224224
}
225225

226226
/**
227227
* Returns a vector containing all but the first `n` \
228228
* elements of a slice
229229
*/
230230
pub pure fn tailn<T: Copy>(v: &[const T], n: uint) -> ~[T] {
231-
slice(v, n, len(v))
231+
slice(v, n, len(v)).to_vec()
232232
}
233233

234234
/// Returns a vector containing all but the last element of a slice
235235
pub pure fn init<T: Copy>(v: &[const T]) -> ~[T] {
236236
assert len(v) != 0u;
237-
slice(v, 0u, len(v) - 1u)
237+
slice(v, 0u, len(v) - 1u).to_vec()
238238
}
239239

240240
/// Returns the last element of the slice `v`, failing if the slice is empty.
@@ -252,20 +252,9 @@ pub pure fn last_opt<T: Copy>(v: &[const T]) -> Option<T> {
252252
Some(v[len(v) - 1u])
253253
}
254254
255-
/// Returns a copy of the elements from [`start`..`end`) from `v`.
256-
pub pure fn slice<T: Copy>(v: &[const T], start: uint, end: uint) -> ~[T] {
257-
assert (start <= end);
258-
assert (end <= len(v));
259-
let mut result = ~[];
260-
unsafe {
261-
for uint::range(start, end) |i| { result.push(v[i]) }
262-
}
263-
result
264-
}
265-
266255
/// Return a slice that points into another slice.
267256
#[inline(always)]
268-
pub pure fn view<T>(v: &r/[T], start: uint, end: uint) -> &r/[T] {
257+
pub pure fn slice<T>(v: &r/[T], start: uint, end: uint) -> &r/[T] {
269258
assert (start <= end);
270259
assert (end <= len(v));
271260
do as_imm_buf(v) |p, _len| {
@@ -279,7 +268,9 @@ pub pure fn view<T>(v: &r/[T], start: uint, end: uint) -> &r/[T] {
279268
280269
/// Return a slice that points into another slice.
281270
#[inline(always)]
282-
pub pure fn mut_view<T>(v: &r/[mut T], start: uint, end: uint) -> &r/[mut T] {
271+
pub pure fn mut_slice<T>(v: &r/[mut T], start: uint,
272+
end: uint) -> &r/[mut T] {
273+
283274
assert (start <= end);
284275
assert (end <= len(v));
285276
do as_mut_buf(v) |p, _len| {
@@ -293,7 +284,7 @@ pub pure fn mut_view<T>(v: &r/[mut T], start: uint, end: uint) -> &r/[mut T] {
293284
294285
/// Return a slice that points into another slice.
295286
#[inline(always)]
296-
pub pure fn const_view<T>(v: &r/[const T], start: uint,
287+
pub pure fn const_slice<T>(v: &r/[const T], start: uint,
297288
end: uint) -> &r/[const T] {
298289
assert (start <= end);
299290
assert (end <= len(v));
@@ -319,12 +310,12 @@ pub fn split<T: Copy>(v: &[T], f: fn(t: &T) -> bool) -> ~[~[T]] {
319310
match position_between(v, start, ln, f) {
320311
None => break,
321312
Some(i) => {
322-
result.push(slice(v, start, i));
313+
result.push(slice(v, start, i).to_vec());
323314
start = i + 1u;
324315
}
325316
}
326317
}
327-
result.push(slice(v, start, ln));
318+
result.push(slice(v, start, ln).to_vec());
328319
result
329320
}
330321
@@ -343,14 +334,14 @@ pub fn splitn<T: Copy>(v: &[T], n: uint, f: fn(t: &T) -> bool) -> ~[~[T]] {
343334
match position_between(v, start, ln, f) {
344335
None => break,
345336
Some(i) => {
346-
result.push(slice(v, start, i));
337+
result.push(slice(v, start, i).to_vec());
347338
// Make sure to skip the separator.
348339
start = i + 1u;
349340
count -= 1u;
350341
}
351342
}
352343
}
353-
result.push(slice(v, start, ln));
344+
result.push(slice(v, start, ln).to_vec());
354345
result
355346
}
356347
@@ -368,12 +359,12 @@ pub fn rsplit<T: Copy>(v: &[T], f: fn(t: &T) -> bool) -> ~[~[T]] {
368359
match rposition_between(v, 0, end, f) {
369360
None => break,
370361
Some(i) => {
371-
result.push(slice(v, i + 1, end));
362+
result.push(slice(v, i + 1, end).to_vec());
372363
end = i;
373364
}
374365
}
375366
}
376-
result.push(slice(v, 0u, end));
367+
result.push(slice(v, 0u, end).to_vec());
377368
reverse(result);
378369
return result;
379370
}
@@ -393,14 +384,14 @@ pub fn rsplitn<T: Copy>(v: &[T], n: uint, f: fn(t: &T) -> bool) -> ~[~[T]] {
393384
match rposition_between(v, 0u, end, f) {
394385
None => break,
395386
Some(i) => {
396-
result.push(slice(v, i + 1u, end));
387+
result.push(slice(v, i + 1u, end).to_vec());
397388
// Make sure to skip the separator.
398389
end = i;
399390
count -= 1u;
400391
}
401392
}
402393
}
403-
result.push(slice(v, 0u, end));
394+
result.push(slice(v, 0u, end).to_vec());
404395
reverse(result);
405396
result
406397
}
@@ -478,15 +469,15 @@ pub fn shift<T>(v: &mut ~[T]) -> T {
478469
// popped. For the moment it unsafely exists at both the head and last
479470
// positions
480471
{
481-
let first_slice = view(*v, 0, 1);
482-
let last_slice = view(*v, next_ln, ln);
472+
let first_slice = slice(*v, 0, 1);
473+
let last_slice = slice(*v, next_ln, ln);
483474
raw::copy_memory(::cast::transmute(last_slice), first_slice, 1);
484475
}
485476
486477
// Memcopy everything to the left one element
487478
{
488-
let init_slice = view(*v, 0, next_ln);
489-
let tail_slice = view(*v, 1, ln);
479+
let init_slice = slice(*v, 0, next_ln);
480+
let tail_slice = slice(*v, 1, ln);
490481
raw::copy_memory(::cast::transmute(init_slice),
491482
tail_slice,
492483
next_ln);
@@ -1468,9 +1459,9 @@ pure fn each_permutation<T: Copy>(v: &[T], put: fn(ts: &[T]) -> bool) {
14681459
let mut i = 0u;
14691460
while i < ln {
14701461
let elt = v[i];
1471-
let mut rest = slice(v, 0u, i);
1462+
let mut rest = slice(v, 0u, i).to_vec();
14721463
unsafe {
1473-
rest.push_all(const_view(v, i+1u, ln));
1464+
rest.push_all(const_slice(v, i+1u, ln));
14741465
for each_permutation(rest) |permutation| {
14751466
if !put(append(~[elt], permutation)) {
14761467
return;
@@ -1489,7 +1480,7 @@ pub pure fn windowed<TT: Copy>(nn: uint, xx: &[TT]) -> ~[~[TT]] {
14891480
let len = vec::len(xx);
14901481
if ii+nn <= len {
14911482
unsafe {
1492-
ww.push(vec::slice(xx, ii, ii+nn));
1483+
ww.push(slice(xx, ii, ii+nn).to_vec());
14931484
}
14941485
}
14951486
}
@@ -1700,7 +1691,7 @@ impl<T: Copy> &[const T]: CopyableVector<T> {
17001691
/// Returns a copy of the elements from [`start`..`end`) from `v`.
17011692
#[inline]
17021693
pure fn slice(&self, start: uint, end: uint) -> ~[T] {
1703-
slice(*self, start, end)
1694+
slice(*self, start, end).to_vec()
17041695
}
17051696

17061697
/// Returns all but the first element of a vector
@@ -1724,7 +1715,7 @@ impl<T> &[T]: ImmutableVector<T> {
17241715
/// Return a slice that points into another slice.
17251716
#[inline]
17261717
pure fn view(&self, start: uint, end: uint) -> &self/[T] {
1727-
view(*self, start, end)
1718+
slice(*self, start, end)
17281719
}
17291720

17301721
/// Reduce a vector from right to left
@@ -2577,42 +2568,45 @@ mod tests {
25772568

25782569
#[test]
25792570
fn test_slice() {
2580-
// Test on-stack -> on-stack slice.
2581-
let mut v = slice(~[1, 2, 3], 1u, 3u);
2582-
assert (len(v) == 2u);
2583-
assert (v[0] == 2);
2584-
assert (v[1] == 3);
2585-
2586-
// Test on-heap -> on-stack slice.
2587-
v = slice(~[1, 2, 3, 4, 5], 0u, 3u);
2588-
assert (len(v) == 3u);
2589-
assert (v[0] == 1);
2590-
assert (v[1] == 2);
2591-
assert (v[2] == 3);
2592-
2593-
// Test on-heap -> on-heap slice.
2594-
v = slice(~[1, 2, 3, 4, 5, 6], 1u, 6u);
2595-
assert (len(v) == 5u);
2596-
assert (v[0] == 2);
2597-
assert (v[1] == 3);
2598-
assert (v[2] == 4);
2599-
assert (v[3] == 5);
2600-
assert (v[4] == 6);
2571+
// Test fixed length vector.
2572+
let vec_fixed = [1, 2, 3, 4];
2573+
let v_a = slice(vec_fixed, 1u, len(vec_fixed)).to_vec();
2574+
assert (len(v_a) == 3u);
2575+
assert (v_a[0] == 2);
2576+
assert (v_a[1] == 3);
2577+
assert (v_a[2] == 4);
2578+
2579+
// Test on stack.
2580+
let vec_stack = &[1, 2, 3];
2581+
let v_b = slice(vec_stack, 1u, 3u).to_vec();
2582+
assert (len(v_b) == 2u);
2583+
assert (v_b[0] == 2);
2584+
assert (v_b[1] == 3);
2585+
2586+
// Test on managed heap.
2587+
let vec_managed = @[1, 2, 3, 4, 5];
2588+
let v_c = slice(vec_managed, 0u, 3u).to_vec();
2589+
assert (len(v_c) == 3u);
2590+
assert (v_c[0] == 1);
2591+
assert (v_c[1] == 2);
2592+
assert (v_c[2] == 3);
2593+
2594+
// Test on exchange heap.
2595+
let vec_unique = ~[1, 2, 3, 4, 5, 6];
2596+
let v_d = slice(vec_unique, 1u, 6u).to_vec();
2597+
assert (len(v_d) == 5u);
2598+
assert (v_d[0] == 2);
2599+
assert (v_d[1] == 3);
2600+
assert (v_d[2] == 4);
2601+
assert (v_d[3] == 5);
2602+
assert (v_d[4] == 6);
26012603
}
26022604

26032605
#[test]
26042606
fn test_pop() {
2605-
// Test on-stack pop.
2606-
let mut v = ~[1, 2, 3];
2607-
let mut e = v.pop();
2608-
assert (len(v) == 2u);
2609-
assert (v[0] == 1);
2610-
assert (v[1] == 2);
2611-
assert (e == 3);
2612-
26132607
// Test on-heap pop.
2614-
v = ~[1, 2, 3, 4, 5];
2615-
e = v.pop();
2608+
let mut v = ~[1, 2, 3, 4, 5];
2609+
let e = v.pop();
26162610
assert (len(v) == 4u);
26172611
assert (v[0] == 1);
26182612
assert (v[1] == 2);

src/librustc/back/rpath.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ pub fn get_relative_to(abs1: &Path, abs2: &Path) -> Path {
157157
let mut path = ~[];
158158
for uint::range(start_idx, len1 - 1) |_i| { path.push(~".."); };
159159

160-
path.push_all(vec::view(split2, start_idx, len2 - 1));
160+
path.push_all(vec::slice(split2, start_idx, len2 - 1));
161161

162162
if !path.is_empty() {
163163
return Path("").push_many(path);

src/librustc/metadata/decoder.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ fn lookup_hash(d: ebml::Doc, eq_fn: fn(x:&[u8]) -> bool, hash: uint) ->
6464
let belt = tag_index_buckets_bucket_elt;
6565
for reader::tagged_docs(tagged_doc.doc, belt) |elt| {
6666
let pos = io::u64_from_be_bytes(*elt.data, elt.start, 4u) as uint;
67-
if eq_fn(vec::view(*elt.data, elt.start + 4u, elt.end)) {
67+
if eq_fn(vec::slice(*elt.data, elt.start + 4u, elt.end)) {
6868
return Some(reader::doc_at(d.data, pos).doc);
6969
}
7070
};
@@ -75,7 +75,8 @@ pub type GetCrateDataCb = &fn(ast::crate_num) -> cmd;
7575

7676
pub fn maybe_find_item(item_id: int, items: ebml::Doc) -> Option<ebml::Doc> {
7777
fn eq_item(bytes: &[u8], item_id: int) -> bool {
78-
return io::u64_from_be_bytes(vec::view(bytes, 0u, 4u), 0u, 4u) as int
78+
return io::u64_from_be_bytes(
79+
vec::slice(bytes, 0u, 4u), 0u, 4u) as int
7980
== item_id;
8081
}
8182
lookup_hash(items,

src/librustc/metadata/encoder.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1099,7 +1099,7 @@ fn encode_crate_deps(ecx: @encode_ctxt,
10991099
}
11001100
11011101
// mut -> immutable hack for vec::map
1102-
return vec::slice(deps, 0u, vec::len(deps));
1102+
return vec::slice(deps, 0u, vec::len(deps)).to_vec();
11031103
}
11041104
11051105
// We're just going to write a list of crate 'name-hash-version's, with
@@ -1259,7 +1259,7 @@ pub fn encode_metadata(parms: encode_parms, crate: &crate) -> ~[u8] {
12591259
// vec::from_slice(metadata_encoding_version) +
12601260
12611261
(do str::as_bytes(&~"rust\x00\x00\x00\x01") |bytes| {
1262-
vec::slice(*bytes, 0, 8)
1262+
vec::slice(*bytes, 0, 8).to_vec()
12631263
}) + flate::deflate_bytes(wr.bytes.check_out(|buf| buf))
12641264
}
12651265

src/librustc/metadata/tydecode.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -493,8 +493,8 @@ pub fn parse_def_id(buf: &[u8]) -> ast::def_id {
493493
die!();
494494
}
495495
496-
let crate_part = vec::view(buf, 0u, colon_idx);
497-
let def_part = vec::view(buf, colon_idx + 1u, len);
496+
let crate_part = vec::slice(buf, 0u, colon_idx);
497+
let def_part = vec::slice(buf, colon_idx + 1u, len);
498498
499499
let crate_num = match uint::parse_bytes(crate_part, 10u) {
500500
Some(cn) => cn as int,

0 commit comments

Comments
 (0)