Skip to content

Commit 1cc35a9

Browse files
committed
Add RandomAccessIterator::index
1 parent eeb99bd commit 1cc35a9

11 files changed

Lines changed: 97 additions & 93 deletions

‎rules/iterator_category/shim.rs‎

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -338,14 +338,6 @@ macro_rules! random_access_iterator {
338338
Vec($ptr),
339339
}
340340

341-
impl<T> $name<T> {
342-
pub fn ptr(&self) -> $ptr {
343-
match self {
344-
Self::Vec(p) => p.clone(),
345-
}
346-
}
347-
}
348-
349341
impl<T> Default for $name<T> {
350342
fn default() -> Self {
351343
Self::Vec($null)
@@ -354,7 +346,9 @@ macro_rules! random_access_iterator {
354346

355347
impl<T> Clone for $name<T> {
356348
fn clone(&self) -> Self {
357-
Self::Vec(self.ptr())
349+
match self {
350+
Self::Vec(p) => Self::Vec(p.clone()),
351+
}
358352
}
359353
}
360354

@@ -442,6 +436,14 @@ random_access_iterator!(
442436
Ptr::null()
443437
);
444438

439+
impl<T> RandomAccessIterator<T> {
440+
pub fn index(&self) -> usize {
441+
match self {
442+
Self::Vec(p) => p.get_offset(),
443+
}
444+
}
445+
}
446+
445447
random_access_iterator!(
446448
UnsafeRandomAccessIterator,
447449
*mut T,

‎rules/vector/tgt_refcount.rs‎

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ fn f40<T1>(a0: Ptr<T1>) -> Ptr<T1> {
1010
}
1111

1212
fn f60<T1: ByteRepr>(a0: Ptr<Vec<T1>>, a1: RandomAccessIterator<T1>) -> RandomAccessIterator<T1> {
13-
let idx = a1.ptr().get_offset();
14-
a0.with_mut(|__v: &mut Vec<T1>| __v.remove(idx));
15-
RandomAccessIterator::Vec(a0.decay())
13+
let __off = a1.iter_distance(&RandomAccessIterator::Vec(a0.decay())) as usize;
14+
a0.with_mut(|__v: &mut Vec<T1>| __v.remove(__off));
15+
RandomAccessIterator::Vec(a0.decay() + __off)
1616
}
1717

1818
fn f65<T1>(a0: Ptr<T1>) -> Ptr<T1> {
@@ -40,13 +40,13 @@ fn f76<T1>(a0: Ptr<T1>) -> RandomAccessIterator<T1> {
4040
}
4141

4242
fn f77<T1: ByteRepr>(a0: &mut Vec<T1>, a1: RandomAccessIterator<T1>, a2: T1) -> RandomAccessIterator<T1> {
43-
let __off = a1.ptr().get_offset();
43+
let __off = a1.index();
4444
a0.insert(__off, a2);
4545
a1
4646
}
4747

4848
fn f79<T1: ByteRepr>(a0: &mut Vec<T1>, a1: RandomAccessIterator<T1>, a2: T1) -> RandomAccessIterator<T1> {
49-
let __off = a1.ptr().get_offset();
49+
let __off = a1.index();
5050
a0.insert(__off, a2);
5151
a1
5252
}
@@ -91,7 +91,7 @@ fn f101<T1: Clone + ByteRepr, T2, T3: CppInputIterator<T1>>(
9191
a2: T3,
9292
a3: T3,
9393
) -> RandomAccessIterator<T1> {
94-
let start_idx = a1.ptr().get_offset();
94+
let start_idx = a1.iter_distance(&RandomAccessIterator::Vec(a0.decay())) as usize;
9595
let mut temp_vec: Vec<T1> = Vec::new();
9696
let mut __it = a2;
9797
while __it != a3 {
@@ -117,13 +117,13 @@ fn f105<T1: Clone + ByteRepr>(a0: Ptr<Vec<T1>>, a1: Vec<T1>) {
117117
}
118118

119119
fn f115<T1: Clone + ByteRepr>(a0: &mut Vec<T1>, a1: RandomAccessIterator<T1>, a2: usize, a3: T1) -> RandomAccessIterator<T1> {
120-
let __off = a1.ptr().get_offset();
120+
let __off = a1.index();
121121
a0.splice(__off..__off, std::iter::repeat_n(a3, a2));
122122
a1
123123
}
124124

125125
fn f116<T1: ByteRepr>(a0: &mut Vec<T1>, a1: RandomAccessIterator<T1>, a2: Vec<T1>) -> RandomAccessIterator<T1> {
126-
let __off = a1.ptr().get_offset();
126+
let __off = a1.index();
127127
a0.splice(__off..__off, a2);
128128
a1
129129
}

‎rules/vector/tgt_unsafe.rs‎

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ unsafe fn f47(a0: Vec<bool>) -> Vec<bool> {
2424
}
2525

2626
unsafe fn f60<T1>(a0: &mut Vec<T1>, a1: UnsafeRandomAccessIterator<T1>) -> UnsafeRandomAccessIterator<T1> {
27-
let pos = a1.ptr().offset_from(a0.as_ptr()) as usize;
27+
let pos = a1.iter_distance(&UnsafeRandomAccessIterator::Vec(a0.as_mut_ptr())) as usize;
2828
a0.remove(pos);
2929
a1
3030
}
@@ -101,7 +101,7 @@ unsafe fn f76<T1>(a0: &mut Vec<T1>) -> UnsafeRandomAccessIterator<T1> {
101101
}
102102

103103
unsafe fn f77<T1>(a0: &mut Vec<T1>, a1: UnsafeRandomAccessIterator<T1>, a2: T1) -> UnsafeRandomAccessIterator<T1> {
104-
let pos = a1.ptr().offset_from(a0.as_ptr()) as usize;
104+
let pos = a1.iter_distance(&UnsafeRandomAccessIterator::Vec(a0.as_mut_ptr())) as usize;
105105
a0.insert(pos, a2);
106106
a1
107107
}
@@ -111,7 +111,7 @@ unsafe fn f78<T1: Default + Clone>(a0: usize, a1: T1) -> Vec<T1> {
111111
}
112112

113113
unsafe fn f79<T1>(a0: &mut Vec<T1>, a1: UnsafeRandomAccessIterator<T1>, a2: T1) -> UnsafeRandomAccessIterator<T1> {
114-
let pos = a1.ptr().offset_from(a0.as_ptr()) as usize;
114+
let pos = a1.iter_distance(&UnsafeRandomAccessIterator::Vec(a0.as_mut_ptr())) as usize;
115115
a0.insert(pos, a2);
116116
a1
117117
}
@@ -169,7 +169,7 @@ unsafe fn f101<T1: Clone, T2, T3: UnsafeCppInputIterator<T1>>(
169169
a2: T3,
170170
a3: T3,
171171
) -> UnsafeRandomAccessIterator<T1> {
172-
let __off = a1.ptr().offset_from(a0.as_ptr()) as usize;
172+
let __off = a1.iter_distance(&UnsafeRandomAccessIterator::Vec(a0.as_mut_ptr())) as usize;
173173
let mut __tmp = Vec::new();
174174
let mut __it = a2;
175175
while __it != a3 {
@@ -215,13 +215,13 @@ unsafe fn f114<T1>(a0: &mut Vec<T1>, init: T1) {
215215
}
216216

217217
unsafe fn f115<T1: Clone>(a0: &mut Vec<T1>, a1: UnsafeRandomAccessIterator<T1>, a2: usize, a3: T1) -> UnsafeRandomAccessIterator<T1> {
218-
let __off = a1.ptr().offset_from(a0.as_ptr()) as usize;
218+
let __off = a1.iter_distance(&UnsafeRandomAccessIterator::Vec(a0.as_mut_ptr())) as usize;
219219
a0.splice(__off..__off, std::iter::repeat_n(a3, a2));
220220
UnsafeRandomAccessIterator::Vec(a0.as_mut_ptr().add(__off))
221221
}
222222

223223
unsafe fn f116<T1>(a0: &mut Vec<T1>, a1: UnsafeRandomAccessIterator<T1>, a2: Vec<T1>) -> UnsafeRandomAccessIterator<T1> {
224-
let __off = a1.ptr().offset_from(a0.as_ptr()) as usize;
224+
let __off = a1.iter_distance(&UnsafeRandomAccessIterator::Vec(a0.as_mut_ptr())) as usize;
225225
a0.splice(__off..__off, a2);
226226
UnsafeRandomAccessIterator::Vec(a0.as_mut_ptr().add(__off))
227227
}

‎tests/unit/out/refcount/unboxed_conditional_iterator.rs‎

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -66,11 +66,11 @@ pub fn lehmer_2(mut sigma: Ptr<u32>, mut len: u32, mut code: Ptr<u32>) {
6666
as u32);
6767
elem!(code, i).write(__rhs);
6868
{
69-
let idx = <RandomAccessIterator<u32>>::from((*it.borrow()).clone())
70-
.ptr()
71-
.get_offset();
72-
(items.as_pointer() as Ptr<Vec<u32>>).with_mut(|__v: &mut Vec<u32>| __v.remove(idx));
73-
RandomAccessIterator::Vec((items.as_pointer() as Ptr<Vec<u32>>).decay())
69+
let __off = <RandomAccessIterator<u32>>::from((*it.borrow()).clone()).iter_distance(
70+
&RandomAccessIterator::Vec((items.as_pointer() as Ptr<Vec<u32>>).decay()),
71+
) as usize;
72+
(items.as_pointer() as Ptr<Vec<u32>>).with_mut(|__v: &mut Vec<u32>| __v.remove(__off));
73+
RandomAccessIterator::Vec((items.as_pointer() as Ptr<Vec<u32>>).decay() + __off)
7474
};
7575
i.prefix_inc();
7676
}

‎tests/unit/out/refcount/vector.rs‎

Lines changed: 31 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,14 @@ fn main_0() -> i32 {
5555
};
5656
assert!(((*v2.borrow()).len() == 3_usize));
5757
{
58-
let idx = <RandomAccessIterator<i32>>::from(RandomAccessIterator::Vec(
58+
let __off = <RandomAccessIterator<i32>>::from(RandomAccessIterator::Vec(
5959
(v2.as_pointer() as Ptr<i32>),
6060
))
61-
.ptr()
62-
.get_offset();
63-
(v2.as_pointer() as Ptr<Vec<i32>>).with_mut(|__v: &mut Vec<i32>| __v.remove(idx));
64-
RandomAccessIterator::Vec((v2.as_pointer() as Ptr<Vec<i32>>).decay())
61+
.iter_distance(&RandomAccessIterator::Vec(
62+
(v2.as_pointer() as Ptr<Vec<i32>>).decay(),
63+
)) as usize;
64+
(v2.as_pointer() as Ptr<Vec<i32>>).with_mut(|__v: &mut Vec<i32>| __v.remove(__off));
65+
RandomAccessIterator::Vec((v2.as_pointer() as Ptr<Vec<i32>>).decay() + __off)
6566
};
6667
assert!(((*v2.borrow()).len() == 2_usize));
6768
assert!(({ (*v2.borrow())[0_usize] } == 2));
@@ -70,8 +71,7 @@ fn main_0() -> i32 {
7071
let __off = <RandomAccessIterator<i32>>::from(RandomAccessIterator::Vec(
7172
(v2.as_pointer() as Ptr<i32>),
7273
))
73-
.ptr()
74-
.get_offset();
74+
.index();
7575
(*v2.borrow_mut()).insert(__off, 100);
7676
<RandomAccessIterator<i32>>::from(RandomAccessIterator::Vec((v2.as_pointer() as Ptr<i32>)))
7777
};
@@ -85,8 +85,7 @@ fn main_0() -> i32 {
8585
let __off = <RandomAccessIterator<i32>>::from(
8686
RandomAccessIterator::Vec((v2.as_pointer() as Ptr<i32>)).iter_add(1_isize),
8787
)
88-
.ptr()
89-
.get_offset();
88+
.index();
9089
(*v2.borrow_mut()).insert(__off, x);
9190
<RandomAccessIterator<i32>>::from(
9291
RandomAccessIterator::Vec((v2.as_pointer() as Ptr<i32>)).iter_add(1_isize),
@@ -100,8 +99,7 @@ fn main_0() -> i32 {
10099
let __off = <RandomAccessIterator<i32>>::from(RandomAccessIterator::Vec(
101100
(v2.as_pointer() as Ptr<i32>).to_end(),
102101
))
103-
.ptr()
104-
.get_offset();
102+
.index();
105103
(*v2.borrow_mut()).splice(__off..__off, std::iter::repeat_n(9, 2_usize));
106104
<RandomAccessIterator<i32>>::from(RandomAccessIterator::Vec(
107105
(v2.as_pointer() as Ptr<i32>).to_end(),
@@ -114,8 +112,7 @@ fn main_0() -> i32 {
114112
let __off = <RandomAccessIterator<i32>>::from(
115113
RandomAccessIterator::Vec((v2.as_pointer() as Ptr<i32>)).iter_add(2_isize),
116114
)
117-
.ptr()
118-
.get_offset();
115+
.index();
119116
(*v2.borrow_mut()).splice(__off..__off, vec![11, 12, 13]);
120117
<RandomAccessIterator<i32>>::from(
121118
RandomAccessIterator::Vec((v2.as_pointer() as Ptr<i32>)).iter_add(2_isize),
@@ -133,8 +130,9 @@ fn main_0() -> i32 {
133130
let start_idx = <RandomAccessIterator<i32>>::from(RandomAccessIterator::Vec(
134131
(v2.as_pointer() as Ptr<i32>),
135132
))
136-
.ptr()
137-
.get_offset();
133+
.iter_distance(&RandomAccessIterator::Vec(
134+
(v2.as_pointer() as Ptr<Vec<i32>>).decay(),
135+
)) as usize;
138136
let mut temp_vec: Vec<i32> = Vec::new();
139137
let mut __it = RandomAccessIterator::Vec((src.as_pointer() as Ptr<i32>));
140138
while __it != RandomAccessIterator::Vec((src.as_pointer() as Ptr<i32>).to_end()) {
@@ -151,33 +149,36 @@ fn main_0() -> i32 {
151149
assert!(({ (*v2.borrow())[1_usize] } == 22));
152150
assert!(({ (*v2.borrow())[2_usize] } == 100));
153151
{
154-
let idx = <RandomAccessIterator<i32>>::from(RandomAccessIterator::Vec(
152+
let __off = <RandomAccessIterator<i32>>::from(RandomAccessIterator::Vec(
155153
(v2.as_pointer() as Ptr<i32>),
156154
))
157-
.ptr()
158-
.get_offset();
159-
(v2.as_pointer() as Ptr<Vec<i32>>).with_mut(|__v: &mut Vec<i32>| __v.remove(idx));
160-
RandomAccessIterator::Vec((v2.as_pointer() as Ptr<Vec<i32>>).decay())
155+
.iter_distance(&RandomAccessIterator::Vec(
156+
(v2.as_pointer() as Ptr<Vec<i32>>).decay(),
157+
)) as usize;
158+
(v2.as_pointer() as Ptr<Vec<i32>>).with_mut(|__v: &mut Vec<i32>| __v.remove(__off));
159+
RandomAccessIterator::Vec((v2.as_pointer() as Ptr<Vec<i32>>).decay() + __off)
161160
};
162161
{
163-
let idx = <RandomAccessIterator<i32>>::from(RandomAccessIterator::Vec(
162+
let __off = <RandomAccessIterator<i32>>::from(RandomAccessIterator::Vec(
164163
(v2.as_pointer() as Ptr<i32>),
165164
))
166-
.ptr()
167-
.get_offset();
168-
(v2.as_pointer() as Ptr<Vec<i32>>).with_mut(|__v: &mut Vec<i32>| __v.remove(idx));
169-
RandomAccessIterator::Vec((v2.as_pointer() as Ptr<Vec<i32>>).decay())
165+
.iter_distance(&RandomAccessIterator::Vec(
166+
(v2.as_pointer() as Ptr<Vec<i32>>).decay(),
167+
)) as usize;
168+
(v2.as_pointer() as Ptr<Vec<i32>>).with_mut(|__v: &mut Vec<i32>| __v.remove(__off));
169+
RandomAccessIterator::Vec((v2.as_pointer() as Ptr<Vec<i32>>).decay() + __off)
170170
};
171171
let mut i: i32 = 0;
172172
'loop_: while (i < 4) {
173173
{
174-
let idx = <RandomAccessIterator<i32>>::from(
174+
let __off = <RandomAccessIterator<i32>>::from(
175175
RandomAccessIterator::Vec((v2.as_pointer() as Ptr<i32>)).iter_add(1_isize),
176176
)
177-
.ptr()
178-
.get_offset();
179-
(v2.as_pointer() as Ptr<Vec<i32>>).with_mut(|__v: &mut Vec<i32>| __v.remove(idx));
180-
RandomAccessIterator::Vec((v2.as_pointer() as Ptr<Vec<i32>>).decay())
177+
.iter_distance(&RandomAccessIterator::Vec(
178+
(v2.as_pointer() as Ptr<Vec<i32>>).decay(),
179+
)) as usize;
180+
(v2.as_pointer() as Ptr<Vec<i32>>).with_mut(|__v: &mut Vec<i32>| __v.remove(__off));
181+
RandomAccessIterator::Vec((v2.as_pointer() as Ptr<Vec<i32>>).decay() + __off)
181182
};
182183
i.prefix_inc();
183184
}

‎tests/unit/out/refcount/vector_iter_range_ctor.rs‎

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -143,8 +143,9 @@ fn main_0() -> i32 {
143143
RandomAccessIterator::Vec((v6.as_pointer() as Ptr<(Value<i32>, Value<i32>)>))
144144
.iter_add(1_isize),
145145
)
146-
.ptr()
147-
.get_offset();
146+
.iter_distance(&RandomAccessIterator::Vec(
147+
(v6.as_pointer() as Ptr<Vec<(Value<i32>, Value<i32>)>>).decay(),
148+
)) as usize;
148149
let mut temp_vec: Vec<(Value<i32>, Value<i32>)> = Vec::new();
149150
let mut __it = (m.as_pointer() as Ptr<Map<i32, (Value<i32>, Value<i32>)>>)
150151
.with(|__m: &Map<i32, (Value<i32>, Value<i32>)>| __m.begin());

‎tests/unit/out/refcount/vector_with_allocator.rs‎

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -100,13 +100,14 @@ fn main_0() -> i32 {
100100
};
101101
assert!(((*v2.borrow()).len() == 3_usize));
102102
{
103-
let idx = <RandomAccessIterator<i32>>::from(RandomAccessIterator::Vec(
103+
let __off = <RandomAccessIterator<i32>>::from(RandomAccessIterator::Vec(
104104
(v2.as_pointer() as Ptr<i32>),
105105
))
106-
.ptr()
107-
.get_offset();
108-
(v2.as_pointer() as Ptr<Vec<i32>>).with_mut(|__v: &mut Vec<i32>| __v.remove(idx));
109-
RandomAccessIterator::Vec((v2.as_pointer() as Ptr<Vec<i32>>).decay())
106+
.iter_distance(&RandomAccessIterator::Vec(
107+
(v2.as_pointer() as Ptr<Vec<i32>>).decay(),
108+
)) as usize;
109+
(v2.as_pointer() as Ptr<Vec<i32>>).with_mut(|__v: &mut Vec<i32>| __v.remove(__off));
110+
RandomAccessIterator::Vec((v2.as_pointer() as Ptr<Vec<i32>>).decay() + __off)
110111
};
111112
assert!(((*v2.borrow()).len() == 2_usize));
112113
assert!(({ (*v2.borrow())[0_usize] } == 2));
@@ -115,8 +116,7 @@ fn main_0() -> i32 {
115116
let __off = <RandomAccessIterator<i32>>::from(RandomAccessIterator::Vec(
116117
(v2.as_pointer() as Ptr<i32>),
117118
))
118-
.ptr()
119-
.get_offset();
119+
.index();
120120
(*v2.borrow_mut()).insert(__off, 100);
121121
<RandomAccessIterator<i32>>::from(RandomAccessIterator::Vec((v2.as_pointer() as Ptr<i32>)))
122122
};

‎tests/unit/out/unsafe/unboxed_conditional_iterator.rs‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,8 @@ pub unsafe fn lehmer_2(mut sigma: *const u32, mut len: u32, mut code: *mut u32)
5757
(it.iter_distance(&UnsafeRandomAccessIterator::Vec(items.as_mut_ptr())) as u32);
5858
{
5959
let pos = <UnsafeRandomAccessIterator<u32>>::from((it).clone())
60-
.ptr()
61-
.offset_from(items.as_ptr()) as usize;
60+
.iter_distance(&UnsafeRandomAccessIterator::Vec(items.as_mut_ptr()))
61+
as usize;
6262
items.remove(pos);
6363
<UnsafeRandomAccessIterator<u32>>::from((it).clone())
6464
};

0 commit comments

Comments
 (0)